summaryrefslogtreecommitdiff
path: root/libdb
diff options
context:
space:
mode:
authorColin Watson <cjwatson@debian.org>2022-09-24 13:59:50 +0100
committerColin Watson <cjwatson@debian.org>2022-09-24 13:59:50 +0100
commite304dec4ff0adc89b44cfdfe431f45d4f5646baf (patch)
treeee98db4a9e43942204da7ece675ce703bce61d01 /libdb
parent4a213af168ca05021aa8cd137194b06144ca604a (diff)
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.
Diffstat (limited to 'libdb')
-rw-r--r--libdb/db_lookup.c39
-rw-r--r--libdb/db_storage.h3
-rw-r--r--libdb/db_store.c6
3 files changed, 22 insertions, 26 deletions
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 */