Provided by: libgdbm-dev_1.23-1_amd64 bug

NAME

       GDBM - The GNU database manager.  Includes dbm and ndbm compatibility.

SYNOPSIS

       #include <gdbm.h>

       extern gdbm_error gdbm_errno;
       extern char *gdbm_version;
       extern int gdbm_version[3];
       GDBM_FILE gdbm_open (const char *name, int block_size,
                            int flags, int mode,
                            void (*fatal_func)(const char *));
       int gdbm_close (GDBM_FILE dbf);
       int gdbm_store (GDBM_FILE dbf, datum key, datum content, int flag);
       datum gdbm_fetch (GDBM_FILE dbf, datum key);
       int gdbm_delete (GDBM_FILE dbf, datum key);
       datum gdbm_firstkey (GDBM_FILE dbf);
       datum gdbm_nextkey (GDBM_FILE dbf, datum key);
       int gdbm_recover (GDBM_FILE dbf, gdbm_recovery *rcvr, intflags);
       int gdbm_reorganize (GDBM_FILE dbf);
       int gdbm_sync (GDBM_FILE dbf);
       int gdbm_exists (GDBM_FILE dbf, datum key);
       const char *gdbm_strerror (gdbm_error errno);
       int gdbm_setopt (GDBM_FILE dbf, int option, int value, int size);
       int gdbm_fdesc (GDBM_FILE dbf);
       int gdbm_count (GDBM_FILE dbf, gdbm_count_t *pcount);
       int gdbm_bucket_count (GDBM_FILE dbf, size_t *pcount);
       int gdbm_avail_verify (GDBM_FILE dbf);

   Crash Tolerance (see below):
       int gdbm_failure_atomic (GDBM_FILE dbf, const char *even, const char *odd);
       int gdbm_latest_snapshot (const char *even, const char *odd, const char **result);

NOTICE

       This  manpage  is  a  short  description  of the GDBM library.  For a detailed discussion,
       including examples and usage recommendations,  refer  to  the  GDBM  Manual  available  in
       Texinfo format.  To access it, run:

         info gdbm

       The documentation is also available online at

         https://www.gnu.org/software/gdbm/manual

       Should  any  discrepancies occur between this manpage and the GDBM Manual, the later shall
       be considered the authoritative source.

DESCRIPTION

       GNU dbm is a library of routines that manages data files that contain key/data pairs.  The
       access  provided  is  that  of  storing,  retrieval,  and deletion by key and a non-sorted
       traversal of all keys.  A process is allowed to use multiple data files at the same time.

   Opening a database
       A process that opens a gdbm file is designated as a "reader"  or  a  "writer".   Only  one
       writer  may  open a gdbm file and many readers may open the file.  Readers and writers can
       not open the gdbm file at the same time. The procedure for opening a gdbm file is:

       GDBM_FILE gdbm_open (const char *name, int block_size,
                            int flags, int mode,
                            void (*fatal_func)(const char *));

       Name is the name of the file (the complete name, gdbm does not append  any  characters  to
       this name).

       Block_size  is  the  size  of a single transfer from disk to memory.  If the value is less
       than 512, the file system block size is used instead.  The size is adjusted  so  that  the
       block  can hold exact number of directory entries, so that the effective block size can be
       slightly greater than requested.  This adjustment is disabled if the GDBM_BSEXACT flag  is
       used.

       The  flags  parameter  is  a bitmask, composed of the access mode and one or more modifier
       flags.  The access mode bit designates the process as a reader or writer and must  be  one
       of the following:

       GDBM_READER
              reader

       GDBM_WRITER
              writer

       GDBM_WRCREAT
              writer - if database does not exist create new one

       GDBM_NEWDB
              writer - create new database regardless if one exists

       Additional  flags (modifiers) can be combined with these values by bitwise OR.  Not all of
       them are meaningful with all access modes.

       Flags that are valid for any value of access mode are:

       GDBM_CLOEXEC
              Set the close-on-exec flag on the database file descriptor.

       GDBM_NOLOCK
              Prevents the library from performing any locking on the database file.

       GDBM_NOMMAP
              Instructs gdbm_open to disable the use of mmap(2).

       GDBM_PREREAD
              When mapping GDBM file to memory, read its contents immediately,  instead  of  when
              needed  (prefault  reading).   This  can  be  advantageous  if you open a read-only
              database and are going to do a lot of look-ups on it.  In this case entire database
              will  be read at once and searches will operate on an in-memory copy.  In contrast,
              GDBM_PREREAD should not be used if you open a database  (even  in  read-only  mode)
              only to retrieve a couple of keys.

              Finally, never use GDBM_PREREAD when opening a database for updates, especially for
              inserts: this will degrade performance.

              This flag has no effect if GDBM_NOMMAP is given, or if the  operating  system  does
              not  support  prefault  reading.  It is known to work on Linux and FreeBSD kernels.

       GDBM_XVERIFY
              Enable additional consistency checks.  With this flag, eventual corruptions of  the
              database  are  discovered when opening it, instead of when a corrupted structure is
              read during normal operation.  However, on large databases, it can  slow  down  the
              opening process.

       The  following  additional  flags  are  valid  when  the  database  is  opened for writing
       (GDBM_WRITER, GDBM_WRCREAT, or GDBM_NEWDB):

       GDBM_SYNC
              Causes all database operations to be synchronized to the disk.

              NOTE: this option entails severe performance degradation and does  not  necessarily
              ensure that the resulting database state is consistent, therefore we discourage its
              use.  For  a  discussion  of  how  to  ensure  database  consistency  with  minimal
              performance overhead, see CRASH TOLERANCE below.

       GDBM_FAST
              A  reverse of GDBM_SYNC: synchronize writes only when needed.  This is the default.
              This flag is provided only for compatibility with previous versions of GDBM.

       The following flags can be used together with GDBM_NEWDB.  They also take effect when used
       with GDBM_WRCREAT, if the requested database file doesn't exist:

       GDBM_BSEXACT
              If  this  flag  is set and the requested block_size value cannot be used, gdbm_open
              will refuse to create the database.  In  this  case  it  will  set  the  gdbm_errno
              variable to GDBM_BLOCK_SIZE_ERROR and return NULL.

              Without this flag, gdbm_open will silently adjust the block_size to a usable value,
              as described above.

       GDBM_NUMSYNC
              Create new database in extended database format, a format best suited for effective
              crash recovery.  For a detailed discussion, see the CRASH RECOVERY chapter below.

       Mode is the file mode (see chmod(2) and open(2)).  It is used if the file is created.

       Fatal_func  is  a  function  to  be called when gdbm if it encounters a fatal error.  This
       parameter is deprecated and must always be NULL.

       The return value is the pointer needed by all other routines to access that gdbm file.  If
       the return is the NULL pointer, gdbm_open was not successful.  In this case, the reason of
       the failure can be found in the gdbm_errno variable.  If the following call  returns  true
       (non-zero value):

              gdbm_check_syserr(gdbm_open)

       the  system  errno  variable  must  be  examined  in order to obtain more detail about the
       failure.

       GDBM_FILE gdbm_fd_open (int FD, const char *name, int block_size,
                            int flags, int mode,
                            void (*fatal_func)(const char *));

       This is an alternative entry point to gdbm_open.  FD is a valid file  descriptor  obtained
       as  a  result  of  a  call  to open(2) or creat(2).  The function opens (or creates) a DBM
       database this descriptor refers to.  The descriptor is not dup'ed, and will be closed when
       the returned GDBM_FILE is closed.  Use dup (2) if that is not desirable.

       In  case of error, the function behaves like gdbm_open and does not close FD.  This can be
       altered by the following value passed in flags:

       GDBM_CLOERROR
              Close FD before exiting on error.

              The rest of arguments are the same as for gdbm_open.

   Calling convention
       All GDBM functions take as their first parameter the database handle (GDBM_FILE), returned
       from gdbm_open or gdbm_fd_open.

       Any value stored in the GDBM database is described by datum, an aggregate type defined as:

            typedef struct
            {
              char *dptr;
              int   dsize;
            } datum;

       The  dptr  field  points  to  the actual data.  Its type is char * for historical reasons.
       Actually it should have been typed  void  *.   Programmers  are  free  to  store  data  of
       arbitrary complexity, both scalar and aggregate, in this field.

       The dsize field contains the number of bytes stored in dptr.

       The datum type is used to describe both keys and content (values) in the database.  Values
       of this type can be passed as arguments or returned from GDBM function calls.

       GDBM functions that return datum indicate failure by setting its dptr field to NULL.

       Functions returning integer  value,  indicate  success  by  returning  0  and  failure  by
       returning  a non-zero value (the only exception to this rule is gdbm_exists, for which the
       return value is reversed).

       If the returned value indicates failure, the gdbm_errno variable contains an integer value
       indicating  what went wrong.  A similar value is associated with the dbf handle and can be
       accessed using the gdbm_last_errno function.  Immediately after return  from  a  function,
       both  values  are  exactly  equal.  Subsequent GDBM calls with another dbf as argument may
       alter the value of the global gdbm_errno, but the value returned by  gdbm_last_errno  will
       always  indicate  the  most  recent  code  of  an  error that occurred for that particular
       database.  Programmers are encouraged to use such per-database error codes.

       Sometimes the actual reason of the failure can be clarified by examining the system  errno
       value.   To  make  sure  its  value  is  meaningful  for  a given GDBM error code, use the
       gdbm_check_syserr function.  The function takes error code as argument and  returns  1  if
       the errno is meaningful for that error, or 0 if it is irrelevant.

       Similarly  to gdbm_errno, the latest errno value associated with a particular database can
       be obtained using the gdbm_last_syserr function.

       The gdbm_clear_error clears the  error  indicator  (both  GDBM  and  system  error  codes)
       associated with a database handle.

       Some  critical  errors  leave  the database in a structurally inconsistent state.  If that
       happens, all subsequent GDBM calls accessing that database will fail with the  GDBM  error
       code of GDBM_NEED_RECOVERY (a special function gdbm_needs_recovery is also provided, which
       returns true if the database handle given as its argument is  structurally  inconsistent).
       To return such databases to consistent state, use the gdbm_recover function (see below).

       The GDBM_NEED_RECOVERY error cannot be cleared using gdbm_clear_error.

   Error functions
       This section describes the error handling functions outlined above.

       gdbm_error gdbm_last_errno (GDBM_FILE dbf)
              Returns  the  error  code  of the most recent failure encountered when operating on
              dbf.

       int gdbm_last_syserr (GDBM_FILE dbf)
              Returns the value of the system errno variable  associated  with  the  most  recent
              failure that occurred on dbf.

              Notice  that  not  all gdbm_error codes have a relevant system error code.  Use the
              following function to determine if a given code has.

       int gdbm_check_syserr (gdbm_error err)
              Returns 1, if system errno value should be checked to get more info  on  the  error
              described by GDBM code err.

       void gdbm_clear_error (GDBM_FILE dbf)
              Clears  the  error  state for the database dbf.  This function is called implicitly
              upon entry to any GDBM function that operates on GDBM_FILE.

              The GDBM_NEED_RECOVERY error cannot be cleared.

       int gdbm_needs_recovery (GDBM_FILE dbf)
              Return 1 if the database file dbf is in inconsistent state and needs recovery.

       const char *gdbm_strerror (gdbm_error err)
              Returns a textual description of the error code err.

       const char *gdbm_db_strerror (GDBM_FILE dbf)
              Returns  a  textual  description  of  the  recent  error  in  database  dbf.   This
              description includes the system errno value, if relevant.

   Closing the database
       It  is important that every database file opened is also closed.  This is needed to update
       the reader/writer count on the file.  This is done by:

       int gdbm_close (GDBM_FILE dbf);

   Database lookups
       int gdbm_exists (GDBM_FILE dbf, datum key);
              If the key is found within the database, the return value will  be  true  (1).   If
              nothing  appropriate  is  found,  false  (0)  is  returned  and  gdbm_errno  set to
              GDBM_NO_ERROR.

              On error, returns 0 and sets gdbm_errno.

       datum gdbm_fetch (GDBM_FILE dbf, datum key);
              Dbf is the pointer returned by gdbm_open.  Key is the key data.

              If the dptr element of the return value is NULL, the gdbm_errno variable should  be
              examined.   The  value of GDBM_ITEM_NOT_FOUND means no data was found for that key.
              Other value means an error occurred.

              Otherwise the return value is a pointer to the found data.  The storage  space  for
              the  dptr  element  is allocated using malloc(3).  GDBM does not automatically free
              this data.  It is the programmer's responsibility to free this storage when  it  is
              no longer needed.

   Iterating over the database
       The  following  two  routines  allow  for  iterating over all items in the database.  Such
       iteration is not key sequential, but it is guaranteed to visit every key in  the  database
       exactly once.  (The order has to do with the hash values.)

       datum gdbm_firstkey (GDBM_FILE dbf);
              Returns first key in the database.

       datum gdbm_nextkey (GDBM_FILE dbf, datum key);
              Given  a key, returns the database key that follows it.  End of iteration is marked
              by returning datum with dptr field set to NULL and setting the gdbm_errno value  to
              GDBM_ITEM_NOT_FOUND.

       After  successful  return from both functions, dptr points to data allocated by malloc(3).
       It is the caller responsibility to free the data when no longer needed.

       A typical iteration loop looks like:

            datum key, nextkey, content;
            key = gdbm_firstkey (dbf);
            while (key.dptr)
              {
                content = gdbm_fetch (dbf, key);
                /* Do something with key and/or content */
                nextkey = gdbm_nextkey (dbf, key);
                free (key.dptr);
                key = nextkey;
              }

       These functions are intended to visit the database in  read-only  algorithms.   Avoid  any
       database modifications within the iteration loop.  File visiting is based on a hash table.
       The gdbm_delete and, in most cases, gdbm_store, functions rearrange the hash table to make
       sure  that any collisions in the table do not leave some item `un-findable'.  Thus, a call
       to either of these functions changes the order in which the keys are ordered.   Therefore,
       these  functions should not be used when iterating over all the keys in the database.  For
       example, the following loop is wrong: it is possible that some keys will not be visited or
       will be visited twice if it is executed:

            key = gdbm_firstkey (dbf);
            while (key.dptr)
              {
                nextkey = gdbm_nextkey (dbf, key);
                if (some condition)
                  gdbm_delete ( dbf, key );
                free (key.dptr);
                key = nextkey;
              }

   Updating the database
       int gdbm_store (GDBM_FILE dbf, datum key, datum content, int flag);
              Dbf  is  the  pointer  returned by gdbm_open.  Key is the key data.  Content is the
              data to be associated with the key.  Flag can have one of the following values:

           GDBM_INSERT
                  Insert only, generate an error if key exists;

           GDBM_REPLACE
                  Replace contents if key exists.

              The function returns 0 on success and -1 on failure.  If the key already exists  in
              the  database  and  the  flag  is  GDBM_INSERT,  the  function  does not modify the
              database.  It sets gdbm_errno to GDBM_CANNOT_REPLACE and returns 1.

       int gdbm_delete (GDBM_FILE dbf, datum key);
              Looks up and deletes the given key from the database dbf.

              The return value is 0 if there was a successful delete or  -1  on  error.   In  the
              latter case, the gdbm_errno value GDBM_ITEM_NOT_FOUND indicates that the key is not
              present in the database.  Other gdbm_errno values indicate failure.

   Recovering structural consistency
       If a function leaves the database in structurally inconsistent state, it can be  recovered
       using the gdbm_recover function.

       int gdbm_recover (GDBM_FILE dbf, gdbm_recovery * rcvr, int flags)
              Check  the  database  file DBF and fix eventual inconsistencies.  The rcvr argument
              can be used both to control the recovery and to return additional statistics  about
              the  process,  as indicated by flags.  For a detailed discussion of these arguments
              and their usage, see the GDBM Manual, chapter Recovering structural consistency.

              You can pass NULL as rcvr and 0 as flags, if no such control is needed.

              By default, this  function  first  checks  the  database  for  inconsistencies  and
              attempts  recovery  only if some were found.  The special flags bit GDBM_RCVR_FORCE
              instructs gdbm_recovery to  skip  this  check  and  to  perform  database  recovery
              unconditionally.

   Export and import
       GDBM  database files can be exported (dumped) to so called flat files or imported (loaded)
       from them.  A flat file contains exactly the same data as the original  database,  but  it
       cannot be used for searches or updates.  Its purpose is to keep the data from the database
       for restoring it when the need arrives.  As such, flat files are used for backup purposes,
       and for sending databases over the wire.

       As  of  GDBM version 1.21, there are two flat file formats.  The ASCII file format encodes
       all data in Base64 and stores not only key/data pairs, but also the original database file
       metadata, such as file name, mode and ownership.  Files in this format can be sent without
       additional encapsulation over transmission channels that normally allow only  ASCII  data,
       such  as, e.g. SMTP.  Due to additional metadata they allow for restoring an exact copy of
       the database, including file ownership and privileges, which is  especially  important  if
       the  database  in  question  contained  some security-related data.  This is the preferred
       format.

       Another flat file format is the binary format.  It stores only key/data pairs and does not
       keep  information  about  the  database  file itself.  It cannot be used to copy databases
       between different architectures.  The binary format was introduced in GDBM  version  1.9.1
       and is retained mainly for backward compatibility.

       The following functions are used to export or import GDBM database files.

       int gdbm_dump (GDBM_FILE dbf, const char *filename,
                      int format, int open_flag, int mode)
              Dumps  the  database  file  dbf  to the file filename in requested format.  Allowed
              values for format are: GDBM_DUMP_FMT_ASCII, to  create  an  ASCII  dump  file,  and
              GDBM_DUMP_FMT_BINARY, to create a binary dump.

              The  value  of open_flag tells gdbm_dump what to do if filename already exists.  If
              it is GDBM_NEWDB, the function will create a new output file, replacing  it  if  it
              already  exists.  If its value is GDBM_WRCREAT, the file will be created if it does
              not exist.  If it does exist, gdbm_dump will return error.

              The file mode to use  when  creating  the  output  file  is  defined  by  the  mode
              parameter.  Its meaning is the same as for open(2).

       int gdbm_load (GDBM_FILE *pdbf, const char *filename,
                      int flag, int meta_mask, unsigned long *errline)
              Loads  data  from  the dump file filename into the database pointed to by pdbf.  If
              pdbf is NULL, the function will try to create a new database.  On success, the  new
              GDBM_FILE  object will be stored in the memory location pointed to by pdbf.  If the
              dump file carries no  information  about  the  original  database  file  name,  the
              function will set gdbm_errno to GDBM_NO_DBNAME and return -1, indicating failure.

              Otherwise, if pdbf points to an already open GDBM_FILE, the function will load data
              from filename into that database.

              The flag parameter controls the function behavior if  a  key  from  the  dump  file
              already  exists  in  the  database.   See  the gdbm_store function for its possible
              values.

              The meta_mask parameter can be used to disable restoring  certain  bits  of  file's
              meta-data  from  the information in the input dump file.  It is a binary OR of zero
              or more of the following:

           GDBM_META_MASK_MODE
                  Do not restore file mode.

           GDBM_META_MASK_OWNER
                  Do not restore file owner.

   Other functions
       int gdbm_reorganize (GDBM_FILE dbf);
              If you have had a lot of deletions and would like to shrink the space used  by  the
              GDBM file, this routine will reorganize the database.

       int gdbm_sync (GDBM_FILE dbf);
              Synchronizes the changes in dbf with its disk file.

              It  will  not  return  until the disk file state is synchronized with the in-memory
              state of the database.

       int gdbm_setopt (GDBM_FILE dbf, int option, void *value, int size);
              Query or change some parameter of an already opened database.  The option  argument
              defines  what  parameter  to  set  or retrieve.  If the set operation is requested,
              value points to the new value.  Its actual data type depends on option.  If the get
              operation  is  requested, value points to a memory region where to store the return
              value.  In both cases, size contains the actual size of the memory  pointed  to  by
              value.

              Possible values of option are:

           GDBM_SETCACHESIZE
           GDBM_CACHESIZE
                  Set  the size of the internal bucket cache.  The value should point to a size_t
                  holding the desired cache size, or the constant GDBM_CACHE_AUTO, to select  the
                  best cache size automatically.

                  By  default, a newly open database is configured to adapt the cache size to the
                  number of index buckets in the database  file.   This  provides  for  the  best
                  performance.

                  Use  this  option  if  you  wish  to  limit  the memory usage at the expense of
                  performance.  If you chose to do so, please bear in  mind  that  cache  becomes
                  effective  when  its  size  is  greater  then 2/3 of the number of index bucket
                  counts in the database.  The best performance results are achieved  when  cache
                  size equals the number of buckets.

           GDBM_GETCACHESIZE
                  Return  the  size  of  the  internal bucket cache.  The value should point to a
                  size_t variable, where the size will be stored.

           GDBM_GETFLAGS
                  Return the flags describing current state of the database.   The  value  should
                  point  to an int variable where to store the flags.  On success, its value will
                  be similar to the flags used when opening the database,  except  that  it  will
                  reflect  the  current  state  (which  may have been altered by another calls to
                  gdbm_setopt).

           GDBM_FASTMODE
                  Enable or disable the fast writes mode, similar  to  the  GDBM_FAST  option  to
                  gdbm_open.

                  This option is retained for compatibility with previous versions of GDBM.

           GDBM_SETSYNCMODE
           GDBM_SYNCMODE
                  Turn  on or off immediate disk synchronization after updates.  The value should
                  point to an integer: 1 to turn synchronization on, and 0 to turn it off.

                  NOTE: setting this option entails severe performance degradation and  does  not
                  necessarily  ensure  that the resulting database state is consistent, therefore
                  we discourage its use.  For a discussion of how to ensure database  consistency
                  with minimal performance overhead, see CRASH TOLERANCE below.

           GDBM_GETSYNCMODE
                  Return  the  current  synchronization status.  The value should point to an int
                  where the status will be stored.

           GDBM_SETCENTFREE
           GDBM_CENTFREE
                  Enable or disable central free block pool.  The default is off,  which  is  how
                  previous  versions of GDBM handled free blocks.  If set, this option causes all
                  subsequent free blocks to be placed in the global pool,  allowing  (in  theory)
                  more  file  space  to  be  reused  more  quickly.  The value should point to an
                  integer: TRUE to turn central block pool on, and FALSE to turn it off.

                  The GDBM_CENTFREE alias is provided for compatibility with earlier versions.

           GDBM_SETCOALESCEBLKS
           GDBM_COALESCEBLKS
                  Set free block merging to either on or off.  The default is off, which  is  how
                  previous  versions  of  GDBM  handled  free blocks.  If set, this option causes
                  adjacent free blocks to be merged.  This can become  a  CPU  expensive  process
                  with  time,  though, especially if used in conjunction with GDBM_CENTFREE.  The
                  value should point to an integer: TRUE to turn free block merging on, and FALSE
                  to turn it off.

           GDBM_GETCOALESCEBLKS
                  Return  the current status of free block merging.  The value should point to an
                  int where the status will be stored.

           GDBM_SETMAXMAPSIZE
                  Sets maximum size of a memory mapped region.  The value should point to a value
                  of  type size_t, unsigned long or unsigned.  The actual value is rounded to the
                  nearest page boundary (the page size is obtained from sysconf(_SC_PAGESIZE)).

           GDBM_GETMAXMAPSIZE
                  Return the maximum size of a memory mapped region.  The value should point to a
                  value of type size_t where to return the data.

           GDBM_SETMMAP
                  Enable  or  disable memory mapping mode.  The value should point to an integer:
                  TRUE to enable memory mapping or FALSE to disable it.

           GDBM_GETMMAP
                  Check whether memory mapping is enabled.  The value should point to an  integer
                  where to return the status.

           GDBM_GETDBNAME
                  Return  the  name  of  the  database  disk  file.   The value should point to a
                  variable of type char**.  A pointer to the newly allocated  copy  of  the  file
                  name  will  be placed there.  The caller is responsible for freeing this memory
                  when no longer needed.

           GDBM_GETBLOCKSIZE
                  Return the block size in bytes.  The value should point to int.

       int gdbm_fdesc (GDBM_FILE dbf);
              Returns the file descriptor of the database dbf.

CRASH TOLERANCE

       By default GNU dbm does not protect the integrity of  its  databases  from  corruption  or
       destruction  due  to  failures  such  as power outages, operating system kernel panics, or
       application process crashes.   Such  failures  could  damage  or  destroy  the  underlying
       database.

       Starting  with  release 1.21 GNU dbm includes a mechanism that, if used correctly, enables
       post-crash recovery to a consistent state of  the  underlying  database.   This  mechanism
       requires  OS  and  filesystem  support  and  must be requested when gdbm is compiled.  The
       crash-tolerance mechanism is a "pure opt-in" feature, in the sense that it has no  effects
       whatsoever  except on those applications that explicitly request it.  For details, see the
       chapter Crash Tolerance in the GDBM manual.

GLOBAL VARIABLES

       gdbm_error gdbm_errno
              This variable contains code of the most recent error that occurred.  Note, that  it
              is  not  C variable in the proper sense: you can use its value, assign any value to
              it, but taking its address will result in syntax error.  It is a per-thread  memory
              location.

       const char *gdbm_version
              A string containing the library version number and build date.

       int const gdbm_version_number[3]
              This variable contains library version numbers: major, minor, and patchlevel.

VERSIONING

       The  version information is kept in two places.  The version of the library is kept in the
       gdbm_version_number variable, described  above.   Additionally,  the  header  file  gdbm.h
       defines the following macros:

       GDBM_VERSION_MAJOR
              Major version number.

       GDBM_VERSION_MINOR
              Minor version number.

       GDBM_VERSION_PATCH
              Patchlevel number.  0 means no patchlevel.

       You  can  use  this  to  compare  whether  your header file corresponds to the library the
       program is linked with.

       The following function can be used to compare two version numbers:

       int gdbm_version_cmp (int const a[3], int const b[3])
              Compare two version numbers  formatted  as  gdbm_version_number.   Return  negative
              number  if  a  is older than b, positive number if a is newer than b, and 0 if they
              are equal.

ERROR CODES

       GDBM_NO_ERROR
              No error occurred.

       GDBM_MALLOC_ERROR
              Memory allocation failed.

       GDBM_BLOCK_SIZE_ERROR
              This error is set by the  gdbm_open  function,  if  the  value  of  its  block_size
              argument is incorrect and the GDBM_BSEXACT flag is set.

       GDBM_FILE_OPEN_ERROR
              The  library  was  not  able  to  open  a disk file.  This can be set by gdbm_open,
              gdbm_fd_open, gdbm_dump and gdbm_load functions.

              Inspect the value of the system errno variable to get more detailed diagnostics.

       GDBM_FILE_WRITE_ERROR
              Writing to a disk file  failed.   This  can  be  set  by  gdbm_open,  gdbm_fd_open,
              gdbm_dump and gdbm_load functions.

              Inspect the value of the system errno variable to get more detailed diagnostics.

       GDBM_FILE_SEEK_ERROR
              Positioning in a disk file failed.  This can be set by gdbm_open function.

              Inspect the value of the system errno variable to get a more detailed diagnostics.

       GDBM_FILE_READ_ERROR
              Reading  from  a  disk  file  failed.   This can be set by gdbm_open, gdbm_dump and
              gdbm_load functions.

              Inspect the value of the system errno variable to get a more detailed diagnostics.

       GDBM_BAD_MAGIC_NUMBER
              The file given as argument to gdbm_open function is not a valid gdbm file: it has a
              wrong magic number.

       GDBM_EMPTY_DATABASE
              The  file  given as argument to gdbm_open function is not a valid gdbm file: it has
              zero length.  This error is returned unless the flags argument has  GDBM_NEWDB  bit
              set.

       GDBM_CANT_BE_READER
              This  error  code  is  set by the gdbm_open function if it is not able to lock file
              when called in GDBM_READER mode.

       GDBM_CANT_BE_WRITER
              This error code is set by the gdbm_open function if it is not  able  to  lock  file
              when called in writer mode.

       GDBM_READER_CANT_DELETE
              Set  by  the  gdbm_delete, if it attempted to operate on a database that is open in
              read-only mode.

       GDBM_READER_CANT_STORE
              Set by the gdbm_store if it attempted to operate on a  database  that  is  open  in
              read-only mode.

       GDBM_READER_CANT_REORGANIZE
              Set by the gdbm_reorganize if it attempted to operate on a database that is open in
              read-only mode.

       GDBM_ITEM_NOT_FOUND
              Requested item was not found.  This error is set by gdbm_delete and gdbm_fetch when
              the requested key value is not found in the database.

       GDBM_REORGANIZE_FAILED
              The gdbm_reorganize function is not able to create a temporary database.

       GDBM_CANNOT_REPLACE
              Cannot replace existing item.  This error is set by the gdbm_store if the requested
              key value is found in the database and the flag parameter is not GDBM_REPLACE.

       GDBM_MALFORMED_DATA
              Input data was malformed in some way.  When returned by gdbm_load, this means  that
              the  input  file was not a valid gdbm dump file.  When returned by gdbm_store, this
              means that either key or content parameter had its dptr field set to NULL.

              The GDBM_ILLEGAL_DATA is an alias for this  error  code,  maintained  for  backward
              compatibility.

       GDBM_OPT_ALREADY_SET
              Requested  option  can  be  set only once and was already set.  As of version 1.21,
              this error code is no longer used.  In prior versions it could have  been  returned
              by the gdbm_setopt function when setting the GDBM_CACHESIZE value.

       GDBM_OPT_BADVAL
              The  option  argument is not valid or the value argument points to an invalid value
              in a call to gdbm_setopt function.

              GDBM_OPT_ILLEGAL  is  an  alias  for  this  error  code,  maintained  for  backward
              compatibility.  Modern applications should not use it.

       GDBM_BYTE_SWAPPED
              The  gdbm_open  function  attempts to open a database which is created on a machine
              with different byte ordering.

       GDBM_BAD_FILE_OFFSET
              The gdbm_open function sets this error code if the file it  tries  to  open  has  a
              wrong magic number.

       GDBM_BAD_OPEN_FLAGS
              Set by the gdbm_dump function if supplied an invalid flags argument.

       GDBM_FILE_STAT_ERROR
              Getting  information  about  a  disk  file failed.  The system errno will give more
              details about the error.

              This error can be set by the following functions: gdbm_open, gdbm_reorganize.

       GDBM_FILE_EOF
              End of file was encountered where more data was expected to be present.  This error
              can  occur when fetching data from the database and usually means that the database
              is truncated or otherwise corrupted.

              This error can be set by any GDBM function that does I/O.  Some of these  functions
              are:    gdbm_delete,    gdbm_exists,    gdbm_fetch,    gdbm_export,    gdbm_import,
              gdbm_reorganize, gdbm_firstkey, gdbm_nextkey, gdbm_store.

       GDBM_NO_DBNAME
              Output database name is not specified.  This error code is set by gdbm_load if  the
              first  argument  points  to  NULL  and the input file does not specify the database
              name.

       GDBM_ERR_FILE_OWNER
              This error code is set by gdbm_load if it is unable to restore  the  database  file
              owner.   It  is  a  mild  error condition, meaning that the data have been restored
              successfully, only changing the target file owner failed.  Inspect the system errno
              variable to get a more detailed diagnostics.

       GDBM_ERR_FILE_MODE
              This  error code is set by gdbm_load if it is unable to restore database file mode.
              It  is  a  mild  error  condition,  meaning  that  the  data  have  been   restored
              successfully, only changing the target file owner failed.  Inspect the system errno
              variable to get a more detailed diagnostics.

       GDBM_NEED_RECOVERY
              Database is in inconsistent state and needs recovery.  Call gdbm_recover if you get
              this error.

       GDBM_BACKUP_FAILED
              The GDBM engine is unable to create backup copy of the file.

       GDBM_DIR_OVERFLOW
              Bucket  directory  would  overflow  the  size limit during an attempt to split hash
              bucket.  This error can occur while storing a new key.

       GDBM_BAD_BUCKET
              Invalid index bucket is encountered in the database.  Database recovery is needed.

       GDBM_BAD_HEADER
              This error is set by gdbm_open and gdbm_fd_open, if the first block read  from  the
              database file does not contain a valid GDBM header.

       GDBM_BAD_AVAIL
              The  available  space  stack  is  invalid.   This error can be set by gdbm_open and
              gdbm_fd_open, if the extended database verification was  requested  (GDBM_XVERIFY).
              It is also set by the gdbm_avail_verify function.

              The database needs recovery.

       GDBM_BAD_HASH_TABLE
              Hash  table  in  a  bucket  is  invalid.   This  error  can be set by the following
              functions: gdbm_delete, gdbm_exists, gdbm_fetch, gdbm_firstkey,  gdbm_nextkey,  and
              gdbm_store.

              The database needs recovery.

       GDBM_BAD_DIR_ENTRY
              Bad directory entry found in the bucket.  The database recovery is needed.

       GDBM_FILE_CLOSE_ERROR
              The  gdbm_close  function  was  unable  to close the database file descriptor.  The
              system errno variable contains the corresponding error code.

       GDBM_FILE_SYNC_ERROR
              Cached content couldn't be synchronized to disk.  Examine the errno variable to get
              more info,

              Database recovery is needed.

       GDBM_FILE_TRUNCATE_ERROR
              File cannot be truncated.  Examine the errno variable to get more info.

              This  error  is  set  by gdbm_open and gdbm_fd_open when called with the GDBM_NEWDB
              flag.

       GDBM_BUCKET_CACHE_CORRUPTED
              The bucket cache structure is corrupted.  Database recovery is needed.

       GDBM_BAD_HASH_ENTRY
              This error is set during sequential access (@pxref{Sequential}), if the  next  hash
              table  entry  does  not  contain  the  expected key.  This means that the bucket is
              malformed or corrupted and the database needs recovery.

       GDBM_ERR_SNAPSHOT_CLONE
              Set by the gdbm_failure_atomic function if it was unable to clone the database file
              into a snapshot.  Inspect the system errno variable for the underlying cause of the
              error.  If errno is EINVAL or ENOSYS, crash tolerance settings will be removed from
              the database.

       GDBM_ERR_REALPATH
              Set  by  the  gdbm_failure_atomic function if the call to realpath function failed.
              realpath is used to determine actual path names of the snapshot files.  Examine the
              system errno variable for details.

       GDBM_ERR_USAGE
              Function usage error.  That includes invalid argument values, and the like.

DBM COMPATIBILITY ROUTINES

       GDBM  includes  a  compatibility library libgdbm_compat, for use with programs that expect
       traditional UNIX dbm or ndbm interfaces, such as, e.g. Sendmail.  The library is  optional
       and thus may be absent in some binary distributions.

       As  the detailed discussion of the compatibility API is beyond the scope of this document,
       below we provide only a short reference.   For  details,  see  the  GDBM  Manual,  chapter
       Compatibility with standard dbm and ndbm.

   DBM compatibility routines
       In dbm compatibility mode only one file may be opened at a time.  All users are assumed to
       be writers.  If the database file is read only, it will fail as  a  writer,  but  will  be
       opened  as  a  reader.   All  returned pointers in datum structures point to data that the
       compatibility library will free.  They should be treated as static pointers  (as  standard
       UNIX dbm does).

       The following interfaces are provided:

       #include <dbm.h>

       int dbminit (const char *name);
       int store (datum key, datum content);
       datum fetch (datum key);
       int delete (datum key);
       datum firstkey (void);
       datum nextkey (datum key);
       int dbmclose (void);

   NDBM Compatibility routines:
       In  this  mode, multiple databases can be opened.  Each database is identified by a handle
       of type DBM *.  As in the original NDBM, all returned pointers in datum  structures  point
       to data that will be freed by the compatibility library.  They should be treated as static
       pointers.

       The following interfaces are provided:

       #include <ndbm.h>

       DBM *dbm_open (const char *name, int flags, int mode);
       void dbm_close (DBM *file);
       datum dbm_fetch (DBM *file, datum key);
       int dbm_store (DBM *file, datum key, datum content, int flags);
       int dbm_delete (DBM *file, datum key);
       datum dbm_firstkey (DBM *file);
       datum dbm_nextkey (DBM *file, datum key);
       int dbm_error (DBM *file);
       int dbm_clearerr (DBM *file);
       int dbm_pagfno (DBM *file);
       int dbm_dirfno (DBM *file);
       int dbm_rdonly (DBM *file);

LINKING

       This library is accessed by specifying -lgdbm as the last parameter to the  compile  line,
       e.g.:

            gcc -o prog prog.c -lgdbm

       If  you  wish  to  use  the  dbm  or  ndbm  compatibility  routines,  you must link in the
       gdbm_compat library as well.  For example:

            gcc -o prog proc.c -lgdbm -lgdbm_compat

BUG REPORTS

       Send bug reports to <bug-gdbm@gnu.org>.

SEE ALSO

       gdbm_dump(1), gdbm_load(1), gdbmtool(1).

AUTHORS

       by Philip A. Nelson, Jason Downs and Sergey Poznyakoff; crash tolerance by Terence Kelly.

COPYRIGHT

       Copyright © 1990 - 2021 Free Software Foundation, Inc.

       GDBM is free software; you can redistribute it and/or modify it under the terms of the GNU
       General  Public License as published by the Free Software Foundation; either version 1, or
       (at your option) any later version.

       GDBM 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 General Public License for more details.

       You should have received a copy of the GNU General Public License  along  with  GDBM.   If
       not, see <http://gnu.org/licenses/gpl.html>

CONTACTS

       You may contact the original author by:
          e-mail:  phil@cs.wwu.edu
         us-mail:  Philip A. Nelson
       Computer Science Department
       Western Washington University
       Bellingham, WA 98226

       You may contact the current maintainers by:
          e-mail:  downsj@downsj.com
       and
          e-mail:  gray@gnu.org

       For questions and feedback regarding crash tolerance, you may contact Terence Kelly at:
          e-mail:  tpkelly @ { acm.org, cs.princeton.edu, eecs.umich.edu }