* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*
* Copyright (c) 1998 Nigel Metheringham, Planet Online Ltd
+ * Copyright (c) The Exim Maintainers 2020
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
if ((fileno = Uopen(filename, O_RDONLY, 0)) < 0)
{
- int save_errno = errno;
- *errmsg = string_open_failed(errno, "%s for cdb lookup", filename);
- errno = save_errno;
+ *errmsg = string_open_failed("%s for cdb lookup", filename);
return NULL;
}
if (fstat(fileno, &statbuf) != 0)
{
- int save_errno = errno;
- *errmsg = string_open_failed(errno,
- "fstat(%s) failed - cannot do cdb lookup",
+ *errmsg = string_open_failed("fstat(%s) failed - cannot do cdb lookup",
filename);
- errno = save_errno;
return NULL;
}
if (statbuf.st_size < CDB_HASH_TABLE)
{
- int save_errno = errno;
- *errmsg = string_open_failed(errno,
- "%s too short for cdb lookup",
- filename);
- errno = save_errno;
+ *errmsg = string_open_failed("%s too short for cdb lookup", filename);
return NULL;
}
/* read of hash table failed, oh dear, oh..... time to give up I think....
call the close routine (deallocs the memory), and return NULL */
- *errmsg = string_open_failed(errno,
- "cannot read header from %s for cdb lookup",
+ *errmsg = string_open_failed("cannot read header from %s for cdb lookup",
filename);
cdb_close(cdbp);
return NULL;
static int
cdb_find(void * handle, const uschar * filename, const uschar * keystring,
- int key_len, uschar ** result, uschar ** errmsg, uint * do_cache)
+ int key_len, uschar ** result, uschar ** errmsg, uint * do_cache,
+ const uschar * opts)
{
struct cdb_state * cdbp = handle;
uint32 item_key_len,
hash_offlen,
hash_slotnm;
-/* Keep picky compilers happy */
-do_cache = do_cache;
-
key_hash = cdb_hash(keystring, key_len);
hash_offset_entry = CDB_HASH_ENTRY * (key_hash & CDB_HASH_MASK);
lookup_info cdb_lookup_info = {
- US"cdb", /* lookup name */
- lookup_absfile, /* uses absolute file name */
- cdb_open, /* open function */
- cdb_check, /* check function */
- cdb_find, /* find function */
- cdb_close, /* close function */
- NULL, /* no tidy function */
- NULL, /* no quoting function */
- cdb_version_report /* version reporting */
+ .name = US"cdb", /* lookup name */
+ .type = lookup_absfile, /* absolute file name */
+ .open = cdb_open, /* open function */
+ .check = cdb_check, /* check function */
+ .find = cdb_find, /* find function */
+ .close = cdb_close, /* close function */
+ .tidy = NULL, /* no tidy function */
+ .quote = NULL, /* no quoting function */
+ .version_report = cdb_version_report /* version reporting */
};
#ifdef DYNLOOKUP