netatalk  4.4.0dev
Free and Open Source Apple Filing Protocol (AFP) Server
Loading...
Searching...
No Matches
dbif.c File Reference
#include <arpa/inet.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <db.h>
#include <atalk/cnid.h>
#include <atalk/errchk.h>
#include <atalk/logger.h>
#include <atalk/util.h>
#include "db_param.h"
#include "dbif.h"
#include "pack.h"

Macros

#define DB_ERRLOGFILE   "db_errlog"
#define UNINTIALIZED_DB   UINT32_MAX

Functions

static int dbif_stamp (DBD *dbd, void *buffer, int size)
static int dbif_init_rootinfo (DBD *dbd, int version)
static int dbif_getversion (DBD *dbd, uint32_t *version)
static int dbif_setversion (DBD *dbd, uint32_t version)
static int dbif_upgrade (DBD *dbd)
static int dbif_openlog (DBD *dbd)
static int dbif_logautorem (DBD *dbd)
DBDdbif_init (const char *envhome, const char *filename)
int dbif_env_open (DBD *dbd, struct db_param *dbp, uint32_t dbenv_oflags)
int dbif_open (DBD *dbd, struct db_param *dbp, int reindex)
static int dbif_closedb (DBD *dbd)
int dbif_close (DBD *dbd)
int dbif_env_remove (const char *path)
int dbif_get (DBD *dbd, const int dbi, DBT *key, DBT *val, uint32_t flags)
int dbif_put (DBD *dbd, const int dbi, DBT *key, DBT *val, uint32_t flags)
int dbif_del (DBD *dbd, const int dbi, DBT *key, uint32_t flags)
int dbif_search (DBD *dbd, DBT *key, char *resbuf)
int dbif_txn_begin (DBD *dbd)
int dbif_txn_commit (DBD *dbd)
int dbif_txn_abort (DBD *dbd)
int dbif_txn_close (DBD *dbd, int ret)
int dbif_txn_checkpoint (DBD *dbd, uint32_t kbyte, uint32_t min, uint32_t flags)
int dbif_count (DBD *dbd, const int dbi, uint32_t *count)
int dbif_copy_rootinfokey (DBD *srcdbd, DBD *destdbd)
int dbif_dump (DBD *dbd, int dumpindexes)
int dbif_idwalk (DBD *dbd, cnid_t *cnid, int close)

Macro Definition Documentation

◆ DB_ERRLOGFILE

#define DB_ERRLOGFILE   "db_errlog"

◆ UNINTIALIZED_DB

#define UNINTIALIZED_DB   UINT32_MAX

Upgrade CNID database versions, initialize rootinfo key as as necessary in dbif_setversion()

For now this does nothing, as upgrading from ver. 0 to 1 is done in dbif_open

Function Documentation

◆ dbif_close()

int dbif_close ( DBD * dbd)

◆ dbif_closedb()

int dbif_closedb ( DBD * dbd)
static

◆ dbif_copy_rootinfokey()

int dbif_copy_rootinfokey ( DBD * srcdbd,
DBD * destdbd )

◆ dbif_count()

int dbif_count ( DBD * dbd,
const int dbi,
uint32_t * count )

◆ dbif_del()

int dbif_del ( DBD * dbd,
const int dbi,
DBT * key,
uint32_t flags )

◆ dbif_dump()

int dbif_dump ( DBD * dbd,
int dumpindexes )

◆ dbif_env_open()

int dbif_env_open ( DBD * dbd,
struct db_param * dbp,
uint32_t dbenv_oflags )

◆ dbif_env_remove()

int dbif_env_remove ( const char * path)

◆ dbif_get()

int dbif_get ( DBD * dbd,
const int dbi,
DBT * key,
DBT * val,
uint32_t flags )

◆ dbif_getversion()

int dbif_getversion ( DBD * dbd,
uint32_t * version )
static

Return CNID database version number

Returns version in *version

Returns
-1 on error, 0 if theres no rootinfo key yet, 1 if *version is returned

◆ dbif_idwalk()

int dbif_idwalk ( DBD * dbd,
cnid_t * cnid,
int close )

◆ dbif_init()

DBD * dbif_init ( const char * envhome,
const char * filename )

◆ dbif_init_rootinfo()

int dbif_init_rootinfo ( DBD * dbd,
int version )
static

Inititialize rootinfo key (which has CNID 0 as key)

This also "stamps" the database, which means storing st.st_ctime of the "cnid2.db" file in the rootinfo data at the DEV offset

Parameters
dbd(rw) database handle
version(r) database version number
Returns
-1 on error, 0 on success

◆ dbif_logautorem()

int dbif_logautorem ( DBD * dbd)
static

◆ dbif_open()

int dbif_open ( DBD * dbd,
struct db_param * dbp,
int reindex )

◆ dbif_openlog()

int dbif_openlog ( DBD * dbd)
static

◆ dbif_put()

int dbif_put ( DBD * dbd,
const int dbi,
DBT * key,
DBT * val,
uint32_t flags )

◆ dbif_search()

int dbif_search ( DBD * dbd,
DBT * key,
char * resbuf )

Search the database by name

Parameters
dbd(r) database handle
key(r) key to search for, must be initialized with name to search for (key->data, key->size)
resbuf(w) buffer for search results CNIDs, maxsize is assumed to be DBD_MAX_SRCH_RSLTS * sizefof(cnid_t)
Returns
-1 on error, 0 when nothing found, else the number of matches

◆ dbif_setversion()

int dbif_setversion ( DBD * dbd,
uint32_t version )
static

Set CNID database version number

Initializes rootinfo key as neccessary

Returns
-1 on error, 0 on success

◆ dbif_stamp()

int dbif_stamp ( DBD * dbd,
void * buffer,
int size )
static

Get the db stamp which is the st_ctime of the file "cnid2.db" and store it in buffer

◆ dbif_txn_abort()

int dbif_txn_abort ( DBD * dbd)

◆ dbif_txn_begin()

int dbif_txn_begin ( DBD * dbd)

◆ dbif_txn_checkpoint()

int dbif_txn_checkpoint ( DBD * dbd,
uint32_t kbyte,
uint32_t min,
uint32_t flags )

◆ dbif_txn_close()

int dbif_txn_close ( DBD * dbd,
int ret )

◆ dbif_txn_commit()

int dbif_txn_commit ( DBD * dbd)

◆ dbif_upgrade()

int dbif_upgrade ( DBD * dbd)
static