SPDX: Mass-update to GPL-2.0-or-later
[exim.git] / src / src / hintsdb.h
index de3e6e4aac5a515f66af1f2dfb4d6b7fcb414264..2d7199edab4d44d76259413e1a233b1d025ce1d6 100644 (file)
@@ -2,9 +2,10 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) University of Cambridge 1995 - 2018 */
 /* Copyright (c) The Exim Maintainers 2020 - 2022 */
+/* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
+/* SPDX-License-Identifier: GPL-2.0-or-later */
 
 /* This header file contains macro definitions so that a variety of DBM
 libraries can be used by Exim. Nigel Metheringham provided the original set for
@@ -45,7 +46,7 @@ tdb_traverse to be called) */
 /* Access functions */
 
 /* EXIM_DBOPEN - return pointer to an EXIM_DB, NULL if failed */
-static EXIM_DB *
+static inline EXIM_DB *
 exim_dbopen__(const uschar * name, const uschar * dirname, int flags,
   unsigned mode)
 {
@@ -53,7 +54,7 @@ return tdb_open(CS name, 0, TDB_DEFAULT, flags, mode);
 }
 
 /* EXIM_DBGET - returns TRUE if successful, FALSE otherwise */
-static BOOL
+static inline BOOL
 exim_dbget(EXIM_DB * dbp, EXIM_DATUM * key, EXIM_DATUM * res)
 {
 *res = tdb_fetch(dbp, *key);   /* A struct arg and return!! */
@@ -61,12 +62,12 @@ return res->dptr != NULL;
 }
 
 /* EXIM_DBPUT - returns nothing useful, assumes replace mode */
-static int
+static inline int
 exim_dbput(EXIM_DB * dbp, EXIM_DATUM * key, EXIM_DATUM * data)
 { return tdb_store(dbp, *key, *data, TDB_REPLACE); }
 
 /* EXIM_DBPUTB - non-overwriting for use by dbmbuild */
-static int
+static inline int
 exim_dbputb(EXIM_DB * dbp, EXIM_DATUM * key, EXIM_DATUM * data)
 { return tdb_store(dbp, *key, *data, TDB_INSERT); }
 
@@ -76,12 +77,12 @@ exim_dbputb(EXIM_DB * dbp, EXIM_DATUM * key, EXIM_DATUM * data)
 # define EXIM_DBPUTB_DUP (-1)
 
 /* EXIM_DBDEL */
-static int
+static inline int
 exim_dbdel(EXIM_DB * dbp, EXIM_DATUM * key)
 { return tdb_delete(dbp, *key); }
 
 /* EXIM_DBCREATE_CURSOR - initialize for scanning operation */
-static EXIM_CURSOR *
+static inline EXIM_CURSOR *
 exim_dbcreate_cursor(EXIM_DB * dbp)
 {
 EXIM_CURSOR * c = store_malloc(sizeof(TDB_DATA));
@@ -92,7 +93,7 @@ return c;
 /* EXIM_DBSCAN - This is complicated because we have to free the last datum
 free() must not die when passed NULL */
 
-static BOOL
+static inline BOOL
 exim_dbscan(EXIM_DB * dbp, EXIM_DATUM * key, EXIM_DATUM * res, BOOL first,
   EXIM_CURSOR * cursor)
 {
@@ -103,40 +104,40 @@ return key->dptr != NULL;
 }
 
 /* EXIM_DBDELETE_CURSOR - terminate scanning operation. */
-static void
+static inline void
 exim_dbdelete_cursor(EXIM_CURSOR * cursor)
 { store_free(cursor); }
 
 /* EXIM_DBCLOSE */
-static void
+static inline void
 exim_dbclose__(EXIM_DB * db)
 { tdb_close(db); }
 
 /* Datum access */
 
-static uschar *
+static inline uschar *
 exim_datum_data_get(EXIM_DATUM * dp)
 { return US dp->dptr; }
-static void
+static inline void
 exim_datum_data_set(EXIM_DATUM * dp, void * s)
 { dp->dptr = s; }
 
-static unsigned
+static inline unsigned
 exim_datum_size_get(EXIM_DATUM * dp)
 { return dp->dsize; }
-static void
+static inline void
 exim_datum_size_set(EXIM_DATUM * dp, unsigned n)
 { dp->dsize = n; }
 
 /* No initialization is needed. */
 
-static void
+static inline void
 exim_datum_init(EXIM_DATUM * d)
 { }
 
 /* Free the stuff inside the datum. */
 
-static void
+static inline void
 exim_datum_free(EXIM_DATUM * d)
 {
 free(d->dptr);
@@ -201,9 +202,13 @@ errors. This should help with debugging strange DB problems, e.g. getting "File
 exists" when you try to open a db file. The API for this function was changed
 at DB release 4.3. */
 
-static void
+static inline void
 dbfn_bdb_error_callback(const DB_ENV * dbenv, const char * pfx, const char * msg)
-{ log_write(0, LOG_MAIN, "Berkeley DB error: %s", msg); }
+{
+#ifndef MACRO_PREDEF 
+log_write(0, LOG_MAIN, "Berkeley DB error: %s", msg);
+#endif
+}
 
 
 
@@ -215,7 +220,7 @@ specified working dir, to avoid the DBCONFIG file trap. */
 
 #   define ENV_TO_DB(env) ((DB *)(((EXIM_DB *)env)->app_private))
 
-static EXIM_DB *
+static inline EXIM_DB *
 exim_dbopen__(const uschar * name, const uschar * dirname, int flags,
   unsigned mode)
 {
@@ -243,7 +248,7 @@ return NULL;
 }
 
 /* EXIM_DBGET - returns TRUE if successful, FALSE otherwise */
-static BOOL
+static inline BOOL
 exim_dbget(EXIM_DB * dbp, EXIM_DATUM * key, EXIM_DATUM * res)
 {
 DB * b = ENV_TO_DB(dbp);
@@ -251,7 +256,7 @@ return b->get(b, NULL, key, res, 0) == 0;
 }
 
 /* EXIM_DBPUT - returns nothing useful, assumes replace mode */
-static int
+static inline int
 exim_dbput(EXIM_DB * dbp, EXIM_DATUM * key, EXIM_DATUM * data)
 {
 DB * b = ENV_TO_DB(dbp);
@@ -259,7 +264,7 @@ return b->put(b, NULL, key, data, 0);
 }
 
 /* EXIM_DBPUTB - non-overwriting for use by dbmbuild */
-static int
+static inline int
 exim_dbputb(EXIM_DB * dbp, EXIM_DATUM * key, EXIM_DATUM * data)
 {
 DB * b = ENV_TO_DB(dbp);
@@ -272,7 +277,7 @@ return b->put(b, NULL, key, data, DB_NOOVERWRITE);
 #   define EXIM_DBPUTB_DUP DB_KEYEXIST
 
 /* EXIM_DBDEL */
-static int
+static inline int
 exim_dbdel(EXIM_DB * dbp, EXIM_DATUM * key)
 {
 DB * b = ENV_TO_DB(dbp);
@@ -281,7 +286,7 @@ return b->del(b, NULL, key, 0);
 
 /* EXIM_DBCREATE_CURSOR - initialize for scanning operation */
 
-static EXIM_CURSOR *
+static inline EXIM_CURSOR *
 exim_dbcreate_cursor(EXIM_DB * dbp)
 {
 DB * b = ENV_TO_DB(dbp);
@@ -291,7 +296,7 @@ return c;
 }
 
 /* EXIM_DBSCAN - returns TRUE if data is returned, FALSE at end */
-static BOOL
+static inline BOOL
 exim_dbscan(EXIM_DB * dbp, EXIM_DATUM * key, EXIM_DATUM * data, BOOL first,
   EXIM_CURSOR * cursor)
 {
@@ -299,12 +304,12 @@ return cursor->c_get(cursor, key, data, first ? DB_FIRST : DB_NEXT) == 0;
 }
 
 /* EXIM_DBDELETE_CURSOR - terminate scanning operation */
-static void
+static inline void
 exim_dbdelete_cursor(EXIM_CURSOR * cursor)
 { cursor->c_close(cursor); }
 
 /* EXIM_DBCLOSE */
-static void
+static inline void
 exim_dbclose__(EXIM_DB * dbp_o)
 {
 DB_ENV * dbp = dbp_o;
@@ -315,28 +320,28 @@ dbp->close(dbp, DB_FORCESYNC);
 
 /* Datum access */
 
-static uschar *
+static inline uschar *
 exim_datum_data_get(EXIM_DATUM * dp)
 { return dp->data; }
-static void
+static inline void
 exim_datum_data_set(EXIM_DATUM * dp, void * s)
 { dp->data = s; }
 
-static unsigned
+static inline unsigned
 exim_datum_size_get(EXIM_DATUM * dp)
 { return dp->size; }
-static void
+static inline void
 exim_datum_size_set(EXIM_DATUM * dp, unsigned n)
 { dp->size = n; }
 
 /* The whole datum structure contains other fields that must be cleared
 before use, but we don't have to free anything after reading data. */
 
-static void
+static inline void
 exim_datum_init(EXIM_DATUM * d)
 { memset(d, 0, sizeof(*d)); }
 
-static void
+static inline void
 exim_datum_free(EXIM_DATUM * d)
 { }
 
@@ -356,7 +361,7 @@ exim_datum_free(EXIM_DATUM * d)
 /* Access functions */
 
 /* EXIM_DBOPEN - return pointer to an EXIM_DB, NULL if failed */
-static EXIM_DB *
+static inline EXIM_DB *
 exim_dbopen__(const uschar * name, const uschar * dirname, int flags,
   unsigned mode)
 {
@@ -372,17 +377,17 @@ return db_create(&dbp, NULL, 0) == 0
 }
 
 /* EXIM_DBGET - returns TRUE if successful, FALSE otherwise */
-static BOOL
+static inline BOOL
 exim_dbget(EXIM_DB * dbp, EXIM_DATUM * key, EXIM_DATUM * res)
 { return dbp->get(dbp, NULL, key, res, 0) == 0; }
 
 /* EXIM_DBPUT - returns nothing useful, assumes replace mode */
-static int
+static inline int
 exim_dbput(EXIM_DB * dbp, EXIM_DATUM * key, EXIM_DATUM * data)
 { return dbp->put(dbp, NULL, key, data, 0); }
 
 /* EXIM_DBPUTB - non-overwriting for use by dbmbuild */
-static int
+static inline int
 exim_dbputb(EXIM_DB * dbp, EXIM_DATUM * key, EXIM_DATUM * data)
 { return dbp->put(dbp, NULL, key, data, DB_NOOVERWRITE); }
 
@@ -392,13 +397,13 @@ exim_dbputb(EXIM_DB * dbp, EXIM_DATUM * key, EXIM_DATUM * data)
 #   define EXIM_DBPUTB_DUP DB_KEYEXIST
 
 /* EXIM_DBDEL */
-static int
+static inline int
 exim_dbdel(EXIM_DB * dbp, EXIM_DATUM * key)
 { return dbp->del(dbp, NULL, key, 0); }
 
 /* EXIM_DBCREATE_CURSOR - initialize for scanning operation */
 
-static EXIM_CURSOR *
+static inline EXIM_CURSOR *
 exim_dbcreate_cursor(EXIM_DB * dbp)
 {
 EXIM_CURSOR * c;
@@ -407,7 +412,7 @@ return c;
 }
 
 /* EXIM_DBSCAN - returns TRUE if data is returned, FALSE at end */
-static BOOL
+static inline BOOL
 exim_dbscan(EXIM_DB * dbp, EXIM_DATUM * key, EXIM_DATUM * data, BOOL first,
   EXIM_CURSOR * cursor)
 {
@@ -415,39 +420,39 @@ return cursor->c_get(cursor, key, data, first ? DB_FIRST : DB_NEXT) == 0;
 }
 
 /* EXIM_DBDELETE_CURSOR - terminate scanning operation */
-static void
+static inline void
 exim_dbdelete_cursor(EXIM_CURSOR * cursor)
 { cursor->c_close(cursor); }
 
 /* EXIM_DBCLOSE */
-static void
+static inline void
 exim_dbclose__(EXIM_DB * dbp)
 { dbp->close(dbp, 0); }
 
 /* Datum access */
 
-static uschar *
+static inline uschar *
 exim_datum_data_get(EXIM_DATUM * dp)
 { return US dp->dptr; }
-static void
+static inline void
 exim_datum_data_set(EXIM_DATUM * dp, void * s)
 { dp->dptr = s; }
 
-static uschar *
+static inline uschar *
 exim_datum_size_get(EXIM_DATUM * dp)
 { return US dp->size; }
-static void
+static inline void
 exim_datum_size_set(EXIM_DATUM * dp, uschar * s)
 { dp->size = CS s; }
 
 /* The whole datum structure contains other fields that must be cleared
 before use, but we don't have to free anything after reading data. */
 
-static void
+static inline void
 exim_datum_init(EXIM_DATUM * d)
 { memset(d, 0, sizeof(*d)); }
 
-static void
+static inline void
 exim_datum_free(EXIM_DATUM * d)
 { }
 
@@ -498,7 +503,7 @@ typedef struct {
 /* Access functions */
 
 /* EXIM_DBOPEN - return pointer to an EXIM_DB, NULL if failed */
-static EXIM_DB *
+static inline EXIM_DB *
 exim_dbopen__(const uschar * name, const uschar * dirname, int flags,
   unsigned mode)
 {
@@ -518,7 +523,7 @@ return NULL;
 }
 
 /* EXIM_DBGET - returns TRUE if successful, FALSE otherwise */
-static BOOL
+static inline BOOL
 exim_dbget(EXIM_DB * dbp, EXIM_DATUM * key, EXIM_DATUM * res)
 {
 *res = gdbm_fetch(dbp->gdbm, *key);    /* A struct arg & return! */
@@ -526,12 +531,12 @@ return res->dptr != NULL;
 }
 
 /* EXIM_DBPUT - returns nothing useful, assumes replace mode */
-static int
+static inline int
 exim_dbput(EXIM_DB * dbp, EXIM_DATUM * key, EXIM_DATUM * data)
 { return gdbm_store(dbp->gdbm, *key, *data, GDBM_REPLACE); }
 
 /* EXIM_DBPUTB - non-overwriting for use by dbmbuild */
-static int
+static inline int
 exim_dbputb(EXIM_DB * dbp, EXIM_DATUM * key, EXIM_DATUM * data)
 { return gdbm_store(dbp->gdbm, *key, *data, GDBM_INSERT); }
 
@@ -541,17 +546,17 @@ exim_dbputb(EXIM_DB * dbp, EXIM_DATUM * key, EXIM_DATUM * data)
 # define EXIM_DBPUTB_DUP 1
 
 /* EXIM_DBDEL */
-static int
+static inline int
 exim_dbdel(EXIM_DB * dbp, EXIM_DATUM * key)
 { return gdbm_delete(dbp->gdbm, *key); }
 
 /* EXIM_DBCREATE_CURSOR - initialize for scanning operation (null) */
-static EXIM_CURSOR *
+static inline EXIM_CURSOR *
 exim_dbcreate_cursor(EXIM_DB * dbp)
 { return NULL; }
 
 /* EXIM_DBSCAN */
-static BOOL
+static inline BOOL
 exim_dbscan(EXIM_DB * dbp, EXIM_DATUM * key, EXIM_DATUM * data, BOOL first,
   EXIM_CURSOR * cursor)
 {
@@ -563,12 +568,12 @@ return key->dptr != NULL;
 }
 
 /* EXIM_DBDELETE_CURSOR - terminate scanning operation (null). */
-static void
+static inline void
 exim_dbdelete_cursor(EXIM_CURSOR * cursor)
 { }
 
 /* EXIM_DBCLOSE */
-static void
+static inline void
 exim_dbclose__(EXIM_DB * dbp)
 {
 char * s;
@@ -579,28 +584,28 @@ free(dbp);
 
 /* Datum access types */
 
-static uschar *
+static inline uschar *
 exim_datum_data_get(EXIM_DATUM * dp)
 { return US dp->dptr; }
-static void
+static inline void
 exim_datum_data_set(EXIM_DATUM * dp, void * s)
 { dp->dptr = s; }
 
-static unsigned
+static inline unsigned
 exim_datum_size_get(EXIM_DATUM * dp)
 { return dp->dsize; }
-static void
+static inline void
 exim_datum_size_set(EXIM_DATUM * dp, unsigned n)
 { dp->dsize = n; }
 
 /* There's no clearing required before use, but we have to free the dptr
 after reading data. */
 
-static void
+static inline void
 exim_datum_init(EXIM_DATUM * d)
 { }
 
-static void
+static inline void
 exim_datum_free(EXIM_DATUM * d)
 { free(d->dptr); }
 
@@ -643,7 +648,7 @@ interface */
 a directory name; otherwise we would create the name.pag and
 name.dir files in the directory's parent. */
 
-static EXIM_DB *
+static inline EXIM_DB *
 exim_dbopen__(const uschar * name, const uschar * dirname, int flags,
   unsigned mode)
 {
@@ -658,7 +663,7 @@ return NULL;
 }
 
 /* EXIM_DBGET - returns TRUE if successful, FALSE otherwise */
-static BOOL
+static inline BOOL
 exim_dbget(EXIM_DB * dbp, EXIM_DATUM * key, EXIM_DATUM * res)
 {
 *res = dbm_fetch(dbp, *key);   /* A struct arg & return! */
@@ -666,12 +671,12 @@ return res->dptr != NULL;
 }
 
 /* EXIM_DBPUT - returns nothing useful, assumes replace mode */
-static int
+static inline int
 exim_dbput(EXIM_DB * dbp, EXIM_DATUM * key, EXIM_DATUM * data)
 { return dbm_store(dbp, *key, *data, DBM_REPLACE); }
 
 /* EXIM_DBPUTB - non-overwriting for use by dbmbuild */
-static int
+static inline int
 exim_dbputb(EXIM_DB * dbp, EXIM_DATUM * key, EXIM_DATUM * data)
 { return dbm_store(dbp, *key, *data, DBM_INSERT); }
 
@@ -681,17 +686,17 @@ exim_dbputb(EXIM_DB * dbp, EXIM_DATUM * key, EXIM_DATUM * data)
 # define EXIM_DBPUTB_DUP 1
 
 /* EXIM_DBDEL */
-static int
+static inline int
 exim_dbdel(EXIM_DB * dbp, EXIM_DATUM * key)
 { return dbm_delete(dbp, *key); }
 
 /* EXIM_DBCREATE_CURSOR - initialize for scanning operation (null) */
-static EXIM_CURSOR *
+static inline EXIM_CURSOR *
 exim_dbcreate_cursor(EXIM_DB * dbp)
 { return NULL; }
 
 /* EXIM_DBSCAN */
-static BOOL
+static inline BOOL
 exim_dbscan(EXIM_DB * dbp, EXIM_DATUM * key, EXIM_DATUM * data, BOOL first,
   EXIM_CURSOR * cursor)
 {
@@ -700,39 +705,39 @@ return key->dptr != NULL;
 }
 
 /* EXIM_DBDELETE_CURSOR - terminate scanning operation (null). */
-static void
+static inline void
 exim_dbdelete_cursor(EXIM_CURSOR * cursor)
 { }
 
 /* EXIM_DBCLOSE */
-static void
+static inline void
 exim_dbclose__(EXIM_DB * dbp)
 { dbm_close(dbp); }
 
 /* Datum access types */
 
-static uschar *
+static inline uschar *
 exim_datum_data_get(EXIM_DATUM * dp)
 { return US dp->dptr; }
-static void
+static inline void
 exim_datum_data_set(EXIM_DATUM * dp, void * s)
 { dp->dptr = s; }
 
-static unsigned
+static inline unsigned
 exim_datum_size_get(EXIM_DATUM * dp)
 { return dp->dsize; }
-static void
+static inline void
 exim_datum_size_set(EXIM_DATUM * dp, unsigned n)
 { dp->dsize = n; }
 
 /* There's no clearing required before use, and we don't have to free anything
 after reading data. */
 
-static void
+static inline void
 exim_datum_init(EXIM_DATUM * d)
 { }
 
-static void
+static inline void
 exim_datum_free(EXIM_DATUM * d)
 { }
 
@@ -748,24 +753,25 @@ exim_datum_free(EXIM_DATUM * d)
 
 #if defined(COMPILE_UTILITY) || defined(MACRO_PREDEF)
 
-static EXIM_DB *
+static inline EXIM_DB *
 exim_dbopen(const uschar * name, const uschar * dirname, int flags,
   unsigned mode)
 {
 return exim_dbopen__(name, dirname, flags, mode);
 }
 
-static void
+static inline void
 exim_dbclose(EXIM_DB * dbp)
 { exim_dbclose__(dbp); }
 
-#else
+#else  /*  exim mainline code */
+
 /* Wrappers for open/close with debug tracing */
 
 extern void debug_printf_indent(const char *, ...);
-static BOOL is_tainted(const void *);
+static inline BOOL is_tainted(const void *);
 
-static EXIM_DB *
+static inline EXIM_DB *
 exim_dbopen(const uschar * name, const uschar * dirname, int flags,
   unsigned mode)
 {
@@ -789,14 +795,14 @@ DEBUG(D_hints_lookup) debug_printf_indent("returned from EXIM_DBOPEN: %p\n", dbp
 return dbp;
 }
 
-static void
+static inline void
 exim_dbclose(EXIM_DB * dbp)
 {
 DEBUG(D_hints_lookup) debug_printf_indent("EXIM_DBCLOSE(%p)\n", dbp);
 exim_dbclose__(dbp);
 }
 
-# endif
+# endif                /* defined(COMPILE_UTILITY) || defined(MACRO_PREDEF) */
 
 /********************* End of dbm library definitions **********************/