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