The following commit has been merged in the master branch:
commit 4f36d67a83687a7ecd10293c9e0d919050672d43
Author: Guillem Jover <[email protected]>
Date: Sun Feb 20 05:19:41 2011 +0100
libdpkg: Refactor convert_string into parse_nv_next and parse_nv_last
This clarifies the function name and its usage from the call sites, also
avoids passing unneeded arguments.
diff --git a/lib/dpkg/fields.c b/lib/dpkg/fields.c
index 5ff7697..ad1d26c 100644
--- a/lib/dpkg/fields.c
+++ b/lib/dpkg/fields.c
@@ -34,11 +34,11 @@
#include <dpkg/triglib.h>
static int
-convert_string(struct parsedb_state *ps, const struct pkginfo *pigp,
- const char *what, const struct namevalue *ivip,
- const char *startp, const char **endpp)
+parse_nv_next(struct parsedb_state *ps, const struct pkginfo *pigp,
+ const char *what, const struct namevalue *ivip,
+ const char **strp)
{
- const char *ep;
+ const char *startp = *strp, *ep;
const struct namevalue *nvip;
if (!*startp)
@@ -51,12 +51,25 @@ convert_string(struct parsedb_state *ps, const struct
pkginfo *pigp,
ep = startp + nvip->length;
while (isspace(*ep))
ep++;
- if (*ep && !endpp)
- parse_error(ps, pigp, _("junk after %s"), what);
- if (endpp) *endpp= ep;
+ *strp = ep;
+
return nvip->value;
}
+static int
+parse_nv_last(struct parsedb_state *ps, const struct pkginfo *pkg,
+ const char *what, const struct namevalue *nv_head,
+ const char *str)
+{
+ int value;
+
+ value = parse_nv_next(ps, pkg, what, nv_head, &str);
+ if (str[0] != '\0')
+ parse_error(ps, pkg, _("junk after %s"), what);
+
+ return value;
+}
+
void
f_name(struct pkginfo *pigp, struct pkgbin *pifp,
struct parsedb_state *ps,
@@ -133,8 +146,8 @@ f_boolean(struct pkginfo *pigp, struct pkgbin *pifp,
if (!*value)
return;
- boolean = convert_string(ps, pigp, _("yes/no in boolean field"),
- booleaninfos, value, NULL);
+ boolean = parse_nv_last(ps, pigp, _("yes/no in boolean field"),
+ booleaninfos, value);
PKGPFIELD(pifp, fip->integer, bool) = boolean;
}
@@ -153,8 +166,8 @@ f_priority(struct pkginfo *pigp, struct pkgbin *pifp,
const char *value, const struct fieldinfo *fip)
{
if (!*value) return;
- pigp->priority = convert_string(ps, pigp, _("word in `priority' field"),
- priorityinfos, value, NULL);
+ pigp->priority = parse_nv_last(ps, pigp, _("word in `priority' field"),
+ priorityinfos, value);
if (pigp->priority == pri_other) pigp->otherpriority= nfstrsave(value);
}
@@ -163,23 +176,21 @@ f_status(struct pkginfo *pigp, struct pkgbin *pifp,
struct parsedb_state *ps,
const char *value, const struct fieldinfo *fip)
{
- const char *ep;
-
if (ps->flags & pdb_rejectstatus)
parse_error(ps, pigp,
_("value for `status' field not allowed in this context"));
if (ps->flags & pdb_recordavailable)
return;
- pigp->want = convert_string(ps, pigp,
- _("first (want) word in `status' field"),
- wantinfos, value, &ep);
- pigp->eflag = convert_string(ps, pigp,
- _("second (error) word in `status' field"),
- eflaginfos, ep, &ep);
- pigp->status = convert_string(ps, pigp,
- _("third (status) word in `status' field"),
- statusinfos, ep, NULL);
+ pigp->want = parse_nv_next(ps, pigp,
+ _("first (want) word in `status' field"),
+ wantinfos, &value);
+ pigp->eflag = parse_nv_next(ps, pigp,
+ _("second (error) word in `status' field"),
+ eflaginfos, &value);
+ pigp->status = parse_nv_last(ps, pigp,
+ _("third (status) word in `status' field"),
+ statusinfos, value);
}
void
--
dpkg's main repository
--
To UNSUBSCRIBE, email to [email protected]
with a subject of "unsubscribe". Trouble? Contact [email protected]