113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle/* Copyright (C) 2005 Red Hat, Inc. */ 213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#ifndef _SEMANAGE_DATABASE_LLIST_INTERNAL_H_ 413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define _SEMANAGE_DATABASE_LLIST_INTERNAL_H_ 513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#include "database.h" 713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#include "handle.h" 813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle/* Representation of the database once loaded in memory */ 1013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindletypedef struct cache_entry { 1113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle record_t *data; 1213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle struct cache_entry *prev; 1313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle struct cache_entry *next; 1413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle} cache_entry_t; 1513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 1613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle/* LLIST dbase */ 1713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindletypedef struct dbase_llist { 1813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 1913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle /* Method tables */ 2013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle record_table_t *rtable; 2113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle dbase_table_t *dtable; 2213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 2313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle /* In-memory representation (cache) */ 2413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle cache_entry_t *cache; 2513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle cache_entry_t *cache_tail; 2613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 2713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle unsigned int cache_sz; 2813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle int cache_serial; 2913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle int modified; 3013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle} dbase_llist_t; 3113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 3213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle/* Helpers for internal use only */ 3313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 3413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindlestatic inline void dbase_llist_cache_init(dbase_llist_t * dbase) 3513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle{ 3613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 3713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle dbase->cache = NULL; 3813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle dbase->cache_tail = NULL; 3913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle dbase->cache_sz = 0; 4013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle dbase->cache_serial = -1; 4113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle dbase->modified = 0; 4213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle} 4313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 4413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindlestatic inline void dbase_llist_init(dbase_llist_t * dbase, 4513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle record_table_t * rtable, 4613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle dbase_table_t * dtable) 4713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle{ 4813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 4913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle dbase->rtable = rtable; 5013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle dbase->dtable = dtable; 5113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle dbase_llist_cache_init(dbase); 5213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle} 5313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 5413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern int dbase_llist_cache_prepend(semanage_handle_t * handle, 5513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle dbase_llist_t * dbase, 5613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle const record_t * data); 5713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 5813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern int dbase_llist_needs_resync(semanage_handle_t * handle, 5913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle dbase_llist_t * dbase); 6013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 6113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern int dbase_llist_set_serial(semanage_handle_t * handle, 6213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle dbase_llist_t * dbase); 6313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 6413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindlestatic inline void dbase_llist_set_modified(dbase_llist_t * dbase, int status) 6513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle{ 6613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle dbase->modified = status; 6713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle} 6813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 6913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle/* LLIST - cache/transactions */ 7013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern void dbase_llist_drop_cache(dbase_llist_t * dbase); 7113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 7213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindlestatic inline int dbase_llist_is_modified(dbase_llist_t * dbase) 7313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle{ 7413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 7513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle return dbase->modified; 7613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle} 7713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 7813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle/* LLIST - polymorphism */ 7913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindlestatic inline record_table_t *dbase_llist_get_rtable(dbase_llist_t * dbase) 8013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle{ 8113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle return dbase->rtable; 8213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle} 8313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 8413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle/* LLIST - dbase API */ 8513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern int dbase_llist_exists(semanage_handle_t * handle, 8613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle dbase_llist_t * dbase, 8713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle const record_key_t * key, int *response); 8813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 8913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern int dbase_llist_add(semanage_handle_t * handle, 9013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle dbase_llist_t * dbase, 9113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle const record_key_t * key, const record_t * data); 9213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 9313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern int dbase_llist_set(semanage_handle_t * handle, 9413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle dbase_llist_t * dbase, 9513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle const record_key_t * key, const record_t * data); 9613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 9713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern int dbase_llist_modify(semanage_handle_t * handle, 9813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle dbase_llist_t * dbase, 9913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle const record_key_t * key, const record_t * data); 10013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 10113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern int dbase_llist_count(semanage_handle_t * handle, 10213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle dbase_llist_t * dbase, unsigned int *response); 10313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 10413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern int dbase_llist_query(semanage_handle_t * handle, 10513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle dbase_llist_t * dbase, 10613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle const record_key_t * key, record_t ** response); 10713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 10813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern int dbase_llist_iterate(semanage_handle_t * handle, 10913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle dbase_llist_t * dbase, 11013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle int (*fn) (const record_t * record, 11113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle void *fn_arg), void *arg); 11213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 11313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern int dbase_llist_del(semanage_handle_t * handle, 11413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle dbase_llist_t * dbase, const record_key_t * key); 11513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 11613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern int dbase_llist_clear(semanage_handle_t * handle, dbase_llist_t * dbase); 11713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 11813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern int dbase_llist_list(semanage_handle_t * handle, 11913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle dbase_llist_t * dbase, 12013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle record_t *** records, unsigned int *count); 12113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 12213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#endif 123