glibc/nss/nss_db/nss_db.h
Ulrich Drepper d1c2a14cdf Update.
2000-05-07  Mark Kettenis  <kettenis@gnu.org>

	* nss/nss_db/db-open.c: Cleanup and add comments.  Pretty print.
	Remove duplicate <errno.h> include.  Remove inclusion of
	<libintl.h> and "nsswitch.h".
	(set_cloexec_flag): New function, broken out of dbopen.
	(dbopen): Changed return type to `enum
	nss_status'.  Mostly rewritten to make sure that we do not report
	NSS_STATUS_SUCCESS if something went wrong.  Remove unnecessary casts.
	(internal_setent): Change return type to nss_status.
	Document, and make sure that the function
	behaves accordingly.  Make dynamically loading the database
	library really thread-safe and return NSS_STATUS_UNAVAIL if it
	failed.
	(db_cursor): Return ENOMEM is memory allocation failed.  Remove
	unecessary casts.
	* nss/nss_db/dummy-db.h: Add copyright notice.  Improve
	documentation.
	(struct dbc24, struct dbc27): Use DBT type in parameter lists for
	c_get function member.
	* nss/nss_db/nss_db.h: Add and tweak some comments.
	(DBT): Move typedef before NSS_DBC typedef.
	(NSS_DBC, NSS_DB): Use DBT in function member parameter lists.
2000-05-08 04:50:45 +00:00

95 lines
3.1 KiB
C

/* Common database open/close routines for nss_db.
Copyright (C) 1999, 2000 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#ifndef _NSS_DB_H
#define _NSS_DB_H 1
#include <nss.h>
#include <stdint.h>
/* Variables which keep track of the error values. */
extern int db_keyexist;
extern int db_notfound;
/* This flag is the same for all versions of the Berkeley DB library. */
#define DB_CREATE 0x000001
/* But constants which vary from version to version are actually
variables here. */
extern int db_first;
extern int db_next;
extern int db_nooverwrite;
extern int db_truncate;
extern int db_rdonly;
/* The `DBT' type is the same in all versions we support. */
typedef struct
{
void *data;
uint32_t size;
uint32_t ulen;
uint32_t dlen;
uint32_t doff;
uint32_t flags;
} DBT;
/* But the cursor object is very different from version to version. */
typedef struct
{
void *cursor;
int (*c_get) (void *, DBT *, DBT *, uint32_t);
} NSS_DBC;
/* We need a helper function for it. */
extern int db_cursor (void *db, void *txn, NSS_DBC **dbcp);
/* This is the wrapper we put around the `DB' structures to provide a
uniform interface to the higher-level functions. */
typedef struct
{
void *db;
int (*close) (void *, uint32_t);
int (*cursor) (void *, void *, NSS_DBC **);
int (*fd) (void *, int *);
int (*get) (void *, void *, DBT *, DBT *, uint32_t);
int (*put) (void *, void *, DBT *, DBT *, uint32_t);
} NSS_DB;
/* Open the database stored in FILE. If succesful, store the database
handle in *DBP and return NSS_STATUS_SUCCESS. On failure, return
the appropriate lookup status. */
extern enum nss_status internal_setent (const char *file, NSS_DB **dbp);
/* Close the database *DBP. */
extern void internal_endent (NSS_DB **dbp);
/* Dynamically load the Berkeley DB library. Return zero if
successful, non-zero if no suitable version of the library could be
loaded. */
extern enum nss_status load_db (void);
/* Open the database in FNAME, for access specified by FLAGS. If
opening the database causes the file FNAME to be created, it is
created with MODE. If succesful, store the database handle in *DBP
and return NSS_STATUS_SUCCESS. On failure, return the appropriate
lookup status. */
extern int dbopen (const char *fname, int oper, int mode, NSS_DB **dbp);
#endif /* nss_db.h */