summaryrefslogtreecommitdiff
path: root/libdb
diff options
context:
space:
mode:
authorColin Watson <cjwatson@debian.org>2015-04-08 03:33:31 +0100
committerColin Watson <cjwatson@debian.org>2015-04-08 03:33:46 +0100
commitf2d09f34278c259836851f6290d946fe0b1474e0 (patch)
tree6b01214b75babacf344ff4d62c7052bae2bb925e /libdb
parent6b9069b714d3cbc0ee95f8aab0b5a2155789d014 (diff)
Stop storing the database handle in a global variable
Fixes Ubuntu bug #1304261. * libdb/db_delete.c (dbdelete): Take a dbf parameter. Update all callers and prototypes. * libdb/db_lookup.c (dblookup, dblookup_all, dblookup_exact, dblookup_pattern): Likewise. * libdb/db_store.c (replace_if_necessary, dbstore): Likewise. * src/check_mandirs.c (test_manfile, add_dir_entries, sanity_check_db, purge_pointers, purge_normal, purge_whatis): Likewise. * src/descriptions_store.c (store_descriptions): Likewise. * src/straycats.c (check_for_stray, open_catdir): Likewise. * src/whatis.c (resolve_pointers, display, do_whatis_section, do_whatis, do_apropos): Likewise. * src/accessdb.c (main): Declare dbf here rather than at file scope. * src/catman.c (parse_for_sec): Likewise. * src/check_mandirs.c (testmandirs, update_db_time, update_db, purge_missing): Likewise. * src/man.c (dbdelete_wrapper, try_db): Likewise. * src/mandb.c (update_one_file): Likewise. * src/straycats.c (straycats): Likewise. * src/whatis.c (search): Likewise. * libdb/mydbm.h (dbf): Remove. * src/catman.c (dbf): Rename to ... (dbf_close_post_fork): ... this. (rdopen_db): Merge into ... (parse_for_sec): ... here.
Diffstat (limited to 'libdb')
-rw-r--r--libdb/db_delete.c2
-rw-r--r--libdb/db_lookup.c24
-rw-r--r--libdb/db_storage.h17
-rw-r--r--libdb/db_store.c10
-rw-r--r--libdb/mydbm.h1
5 files changed, 29 insertions, 25 deletions
diff --git a/libdb/db_delete.c b/libdb/db_delete.c
index fae94187..37a9e5af 100644
--- a/libdb/db_delete.c
+++ b/libdb/db_delete.c
@@ -53,7 +53,7 @@
#define NO_ENTRY 1;
-int dbdelete (const char *name, struct mandata *info)
+int dbdelete (MYDBM_FILE dbf, const char *name, struct mandata *info)
{
datum key, cont;
diff --git a/libdb/db_lookup.c b/libdb/db_lookup.c
index 41cdeca5..303db067 100644
--- a/libdb/db_lookup.c
+++ b/libdb/db_lookup.c
@@ -266,8 +266,8 @@ int list_extensions (char *data, char ***names, char ***ext)
2) One data item exists. Item is returned as first in set of structures.
3) Many items exist. They are all returned, in a multiple structure set.
*/
-static struct mandata *dblookup (const char *page, const char *section,
- int flags)
+static struct mandata *dblookup (MYDBM_FILE dbf, const char *page,
+ const char *section, int flags)
{
struct mandata *info = NULL;
datum key, cont;
@@ -365,21 +365,23 @@ static struct mandata *dblookup (const char *page, const char *section,
}
}
-struct mandata *dblookup_all (const char *page, const char *section,
- int match_case)
+struct mandata *dblookup_all (MYDBM_FILE dbf, const char *page,
+ const char *section, int match_case)
{
- return dblookup (page, section, ALL | (match_case ? MATCH_CASE : 0));
+ return dblookup (dbf, page, section,
+ ALL | (match_case ? MATCH_CASE : 0));
}
-struct mandata *dblookup_exact (const char *page, const char *section,
- int match_case)
+struct mandata *dblookup_exact (MYDBM_FILE dbf, const char *page,
+ const char *section, int match_case)
{
- return dblookup (page, section, EXACT | (match_case ? MATCH_CASE : 0));
+ return dblookup (dbf, page, section,
+ EXACT | (match_case ? MATCH_CASE : 0));
}
-struct mandata *dblookup_pattern (const char *pattern, const char *section,
- int match_case, int pattern_regex,
- int try_descriptions)
+struct mandata *dblookup_pattern (MYDBM_FILE dbf, const char *pattern,
+ const char *section, int match_case,
+ int pattern_regex, int try_descriptions)
{
struct mandata *ret = NULL, *tail = NULL;
datum key, cont;
diff --git a/libdb/db_storage.h b/libdb/db_storage.h
index caf31690..6db37bb7 100644
--- a/libdb/db_storage.h
+++ b/libdb/db_storage.h
@@ -72,15 +72,16 @@ struct mandata {
};
/* used by the world */
-extern struct mandata *dblookup_all (const char *page, const char *section,
- int match_case);
-extern struct mandata *dblookup_exact (const char *page, const char *section,
- int match_case);
-extern struct mandata *dblookup_pattern (const char *page, const char *section,
- int match_case, int pattern_regex,
+extern struct mandata *dblookup_all (MYDBM_FILE dbf, const char *page,
+ const char *section, int match_case);
+extern struct mandata *dblookup_exact (MYDBM_FILE dbf, const char *page,
+ const char *section, int match_case);
+extern struct mandata *dblookup_pattern (MYDBM_FILE dbf, const char *page,
+ const char *section, int match_case,
+ int pattern_regex,
int try_descriptions);
-extern int dbstore (struct mandata *in, const char *base);
-extern int dbdelete (const char *name, struct mandata *in);
+extern int dbstore (MYDBM_FILE dbf, struct mandata *in, const char *base);
+extern int dbdelete (MYDBM_FILE dbf, const char *name, struct mandata *in);
extern void dbprintf (const struct mandata *info);
extern void free_mandata_elements (struct mandata *pinfo);
extern void free_mandata_struct (struct mandata *pinfo);
diff --git a/libdb/db_store.c b/libdb/db_store.c
index b87c3b68..7b3747f7 100644
--- a/libdb/db_store.c
+++ b/libdb/db_store.c
@@ -79,7 +79,8 @@ int compare_ids (char a, char b, int promote_links)
* be replaced with some new contents. Check that names and section
* extensions match before calling this.
*/
-static int replace_if_necessary (struct mandata *newdata,
+static int replace_if_necessary (MYDBM_FILE dbf,
+ struct mandata *newdata,
struct mandata *olddata,
datum newkey, datum newcont)
{
@@ -189,7 +190,7 @@ static datum make_content (struct mandata *in)
return errorcode or 0 on success.
*/
-int dbstore (struct mandata *in, const char *base)
+int dbstore (MYDBM_FILE dbf, struct mandata *in, const char *base)
{
datum oldkey, oldcont;
@@ -243,7 +244,7 @@ int dbstore (struct mandata *in, const char *base)
MYDBM_FREE (MYDBM_DPTR (oldcont));
cont = MYDBM_FETCH (dbf, newkey);
split_content (MYDBM_DPTR (cont), &info);
- ret = replace_if_necessary (in, &info,
+ ret = replace_if_necessary (dbf, in, &info,
newkey, newcont);
/* MYDBM_FREE (MYDBM_DPTR (cont)); */
free_mandata_elements (&info);
@@ -305,7 +306,8 @@ int dbstore (struct mandata *in, const char *base)
if (!STREQ (base, MYDBM_DPTR (oldkey)))
in->name = xstrdup (base);
newcont = make_content (in);
- ret = replace_if_necessary (in, &old, oldkey, newcont);
+ ret = replace_if_necessary (dbf, in, &old,
+ oldkey, newcont);
/* MYDBM_FREE (MYDBM_DPTR (oldcont)); */
free_mandata_elements (&old);
free (MYDBM_DPTR (newcont));
diff --git a/libdb/mydbm.h b/libdb/mydbm.h
index 62311d51..f021b0e0 100644
--- a/libdb/mydbm.h
+++ b/libdb/mydbm.h
@@ -180,7 +180,6 @@ extern void btree_set_time(DB *db, const struct timespec time);
#define MYDBM_SET(d, value) do { MYDBM_SET_DPTR(d, value); MYDBM_RESET_DSIZE(d); } while (0)
extern char *database;
-extern MYDBM_FILE dbf;
/* db_lookup.c */
extern datum copy_datum (datum dat);