From e304dec4ff0adc89b44cfdfe431f45d4f5646baf Mon Sep 17 00:00:00 2001 From: Colin Watson Date: Sat, 24 Sep 2022 13:59:50 +0100 Subject: Simplify split_content interface Now that `struct mandata` is always allocated on the heap, we might as well just have `split_content` return a freshly-allocated `struct mandata` rather than taking a pointer to one as a parameter. * libdb/db_lookup.c (split_content): Allocate and return a `struct mandata`; remove `pinfo` parameter. Update all callers. * libdb/db_storage.h (split_content): Update prototype. --- libdb/db_lookup.c | 39 +++++++++++++++++++-------------------- libdb/db_storage.h | 3 +-- libdb/db_store.c | 6 ++---- 3 files changed, 22 insertions(+), 26 deletions(-) (limited to 'libdb') diff --git a/libdb/db_lookup.c b/libdb/db_lookup.c index 54ae7e7b..2cacdb73 100644 --- a/libdb/db_lookup.c +++ b/libdb/db_lookup.c @@ -189,25 +189,28 @@ static char **split_data (MYDBM_FILE dbf, char *content, char *start[]) } /* Parse the db-returned data and put it into a mandata format */ -void split_content (MYDBM_FILE dbf, char *cont_ptr, struct mandata *pinfo) +struct mandata *split_content (MYDBM_FILE dbf, char *cont_ptr) { + struct mandata *info; char *start[FIELDS]; char **data; data = split_data (dbf, cont_ptr, start); - pinfo->name = copy_if_set (*(data++)); - pinfo->ext = *(data++); - pinfo->sec = *(data++); - pinfo->mtime.tv_sec = (time_t) atol (*(data++)); - pinfo->mtime.tv_nsec = atol (*(data++)); - pinfo->id = **(data++); /* single char id */ - pinfo->pointer = *(data++); - pinfo->filter = *(data++); - pinfo->comp = *(data++); - pinfo->whatis = *(data); - - pinfo->addr = cont_ptr; + info = XZALLOC (struct mandata); + info->name = copy_if_set (*(data++)); + info->ext = *(data++); + info->sec = *(data++); + info->mtime.tv_sec = (time_t) atol (*(data++)); + info->mtime.tv_nsec = atol (*(data++)); + info->id = **(data++); /* single char id */ + info->pointer = *(data++); + info->filter = *(data++); + info->comp = *(data++); + info->whatis = *(data); + + info->addr = cont_ptr; + return info; } bool ATTRIBUTE_PURE name_ext_equals (const void *elt1, const void *elt2) @@ -292,8 +295,7 @@ static gl_list_t dblookup (MYDBM_FILE dbf, const char *page, else if (*MYDBM_DPTR (cont) != '\t') { /* Just one entry */ bool matches = false; - info = XZALLOC (struct mandata); - split_content (dbf, MYDBM_DPTR (cont), info); + info = split_content (dbf, MYDBM_DPTR (cont)); if (!info->name) info->name = xstrdup (page); if (!(flags & MATCH_CASE) || STREQ (info->name, page)) { @@ -359,8 +361,7 @@ static gl_list_t dblookup (MYDBM_FILE dbf, const char *page, MYDBM_FREE_DPTR (key); /* Allocate info struct and add it to the list. */ - info = XZALLOC (struct mandata); - split_content (dbf, MYDBM_DPTR (multi_cont), info); + info = split_content (dbf, MYDBM_DPTR (multi_cont)); if (!info->name) info->name = xstrdup (ref->name); gl_list_add_last (infos, info); @@ -430,8 +431,6 @@ gl_list_t dblookup_pattern (MYDBM_FILE dbf, const char *pattern, char *tab; bool got_match; - info = XZALLOC (struct mandata); - if (!MYDBM_DPTR (cont)) { debug ("key was %s\n", MYDBM_DPTR (key)); @@ -454,7 +453,7 @@ gl_list_t dblookup_pattern (MYDBM_FILE dbf, const char *pattern, /* a real page */ - split_content (dbf, MYDBM_DPTR (cont), info); + info = split_content (dbf, MYDBM_DPTR (cont)); /* If there's a section given, does it match either the * section or extension of this page? diff --git a/libdb/db_storage.h b/libdb/db_storage.h index 00e2c6bf..f02beb70 100644 --- a/libdb/db_storage.h +++ b/libdb/db_storage.h @@ -67,8 +67,7 @@ extern gl_list_t dblookup_pattern (MYDBM_FILE dbf, const char *page, 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 split_content (MYDBM_FILE dbf, char *cont_ptr, - struct mandata *pinfo); +extern struct mandata *split_content (MYDBM_FILE dbf, char *cont_ptr); extern int compare_ids (char a, char b, int promote_links); /* local to db routines */ diff --git a/libdb/db_store.c b/libdb/db_store.c index 85bf49f9..92926dc7 100644 --- a/libdb/db_store.c +++ b/libdb/db_store.c @@ -275,8 +275,7 @@ int dbstore (MYDBM_FILE dbf, struct mandata *in, const char *base) MYDBM_FREE_DPTR (oldcont); cont = MYDBM_FETCH (dbf, newkey); - info = XZALLOC (struct mandata); - split_content (dbf, MYDBM_DPTR (cont), info); + info = split_content (dbf, MYDBM_DPTR (cont)); ret = replace_if_necessary (dbf, in, info, newkey, newcont); /* MYDBM_FREE_DPTR (cont); */ @@ -326,8 +325,7 @@ int dbstore (MYDBM_FILE dbf, struct mandata *in, const char *base) /* Extract the old singular reference */ - old = XZALLOC (struct mandata); - split_content (dbf, MYDBM_DPTR (oldcont), old); + old = split_content (dbf, MYDBM_DPTR (oldcont)); /* Create multi keys for both old and new items, create new content */ -- cgit v1.2.3