Blame src/database_llist.h

Packit Service 102278
/* Copyright (C) 2005 Red Hat, Inc. */
Packit Service 102278
Packit Service 102278
#ifndef _SEMANAGE_DATABASE_LLIST_INTERNAL_H_
Packit Service 102278
#define _SEMANAGE_DATABASE_LLIST_INTERNAL_H_
Packit Service 102278
Packit Service 102278
#include "database.h"
Packit Service 102278
#include "handle.h"
Packit Service 102278
Packit Service 102278
/* Representation of the database once loaded in memory */
Packit Service 102278
typedef struct cache_entry {
Packit Service 102278
	record_t *data;
Packit Service 102278
	struct cache_entry *prev;
Packit Service 102278
	struct cache_entry *next;
Packit Service 102278
} cache_entry_t;
Packit Service 102278
Packit Service 102278
/* LLIST dbase */
Packit Service 102278
typedef struct dbase_llist {
Packit Service 102278
Packit Service 102278
	/* Method tables */
Packit Service 102278
	record_table_t *rtable;
Packit Service 102278
	dbase_table_t *dtable;
Packit Service 102278
Packit Service 102278
	/* In-memory representation (cache) */
Packit Service 102278
	cache_entry_t *cache;
Packit Service 102278
	cache_entry_t *cache_tail;
Packit Service 102278
Packit Service 102278
	unsigned int cache_sz;
Packit Service 102278
	int cache_serial;
Packit Service 102278
	int modified;
Packit Service 102278
} dbase_llist_t;
Packit Service 102278
Packit Service 102278
/* Helpers for internal use only */
Packit Service 102278
Packit Service 102278
static inline void dbase_llist_cache_init(dbase_llist_t * dbase)
Packit Service 102278
{
Packit Service 102278
Packit Service 102278
	dbase->cache = NULL;
Packit Service 102278
	dbase->cache_tail = NULL;
Packit Service 102278
	dbase->cache_sz = 0;
Packit Service 102278
	dbase->cache_serial = -1;
Packit Service 102278
	dbase->modified = 0;
Packit Service 102278
}
Packit Service 102278
Packit Service 102278
static inline void dbase_llist_init(dbase_llist_t * dbase,
Packit Service 102278
				    record_table_t * rtable,
Packit Service 102278
				    dbase_table_t * dtable)
Packit Service 102278
{
Packit Service 102278
Packit Service 102278
	dbase->rtable = rtable;
Packit Service 102278
	dbase->dtable = dtable;
Packit Service 102278
	dbase_llist_cache_init(dbase);
Packit Service 102278
}
Packit Service 102278
Packit Service 102278
extern int dbase_llist_cache_prepend(semanage_handle_t * handle,
Packit Service 102278
				     dbase_llist_t * dbase,
Packit Service 102278
				     const record_t * data);
Packit Service 102278
Packit Service 102278
extern int dbase_llist_needs_resync(semanage_handle_t * handle,
Packit Service 102278
				    dbase_llist_t * dbase);
Packit Service 102278
Packit Service 102278
extern int dbase_llist_set_serial(semanage_handle_t * handle,
Packit Service 102278
				  dbase_llist_t * dbase);
Packit Service 102278
Packit Service 102278
static inline void dbase_llist_set_modified(dbase_llist_t * dbase, int status)
Packit Service 102278
{
Packit Service 102278
	dbase->modified = status;
Packit Service 102278
}
Packit Service 102278
Packit Service 102278
/* LLIST - cache/transactions */
Packit Service 102278
extern void dbase_llist_drop_cache(dbase_llist_t * dbase);
Packit Service 102278
Packit Service 102278
static inline int dbase_llist_is_modified(dbase_llist_t * dbase)
Packit Service 102278
{
Packit Service 102278
Packit Service 102278
	return dbase->modified;
Packit Service 102278
}
Packit Service 102278
Packit Service 102278
/* LLIST - polymorphism */
Packit Service 102278
static inline record_table_t *dbase_llist_get_rtable(dbase_llist_t * dbase)
Packit Service 102278
{
Packit Service 102278
	return dbase->rtable;
Packit Service 102278
}
Packit Service 102278
Packit Service 102278
/* LLIST - dbase API */
Packit Service 102278
extern int dbase_llist_exists(semanage_handle_t * handle,
Packit Service 102278
			      dbase_llist_t * dbase,
Packit Service 102278
			      const record_key_t * key, int *response);
Packit Service 102278
Packit Service 102278
extern int dbase_llist_add(semanage_handle_t * handle,
Packit Service 102278
			   dbase_llist_t * dbase,
Packit Service 102278
			   const record_key_t * key, const record_t * data);
Packit Service 102278
Packit Service 102278
extern int dbase_llist_set(semanage_handle_t * handle,
Packit Service 102278
			   dbase_llist_t * dbase,
Packit Service 102278
			   const record_key_t * key, const record_t * data);
Packit Service 102278
Packit Service 102278
extern int dbase_llist_modify(semanage_handle_t * handle,
Packit Service 102278
			      dbase_llist_t * dbase,
Packit Service 102278
			      const record_key_t * key, const record_t * data);
Packit Service 102278
Packit Service 102278
extern int dbase_llist_count(semanage_handle_t * handle,
Packit Service 102278
			     dbase_llist_t * dbase, unsigned int *response);
Packit Service 102278
Packit Service 102278
extern int dbase_llist_query(semanage_handle_t * handle,
Packit Service 102278
			     dbase_llist_t * dbase,
Packit Service 102278
			     const record_key_t * key, record_t ** response);
Packit Service 102278
Packit Service 102278
extern int dbase_llist_iterate(semanage_handle_t * handle,
Packit Service 102278
			       dbase_llist_t * dbase,
Packit Service 102278
			       int (*fn) (const record_t * record,
Packit Service 102278
					  void *fn_arg), void *arg);
Packit Service 102278
Packit Service 102278
extern int dbase_llist_del(semanage_handle_t * handle,
Packit Service 102278
			   dbase_llist_t * dbase, const record_key_t * key);
Packit Service 102278
Packit Service 102278
extern int dbase_llist_clear(semanage_handle_t * handle, dbase_llist_t * dbase);
Packit Service 102278
Packit Service 102278
extern int dbase_llist_list(semanage_handle_t * handle,
Packit Service 102278
			    dbase_llist_t * dbase,
Packit Service 102278
			    record_t *** records, unsigned int *count);
Packit Service 102278
Packit Service 102278
#endif