diff options
author | Colin Watson <cjwatson@debian.org> | 2015-04-08 03:33:31 +0100 |
---|---|---|
committer | Colin Watson <cjwatson@debian.org> | 2015-04-08 03:33:46 +0100 |
commit | f2d09f34278c259836851f6290d946fe0b1474e0 (patch) | |
tree | 6b01214b75babacf344ff4d62c7052bae2bb925e /libdb | |
parent | 6b9069b714d3cbc0ee95f8aab0b5a2155789d014 (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.c | 2 | ||||
-rw-r--r-- | libdb/db_lookup.c | 24 | ||||
-rw-r--r-- | libdb/db_storage.h | 17 | ||||
-rw-r--r-- | libdb/db_store.c | 10 | ||||
-rw-r--r-- | libdb/mydbm.h | 1 |
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); |