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