aboutsummaryrefslogtreecommitdiff
path: root/libpkgconf/fragment.c
diff options
context:
space:
mode:
Diffstat (limited to 'libpkgconf/fragment.c')
-rw-r--r--libpkgconf/fragment.c34
1 files changed, 27 insertions, 7 deletions
diff --git a/libpkgconf/fragment.c b/libpkgconf/fragment.c
index 22d6d04..7646f31 100644
--- a/libpkgconf/fragment.c
+++ b/libpkgconf/fragment.c
@@ -122,7 +122,7 @@ pkgconf_fragment_munge(const pkgconf_client_t *client, char *buf, size_t buflen,
static inline char *
pkgconf_fragment_copy_munged(const pkgconf_client_t *client, const char *source)
{
- char mungebuf[PKGCONF_SBUFSIZE];
+ char mungebuf[PKGCONF_ITEM_SIZE];
pkgconf_fragment_munge(client, mungebuf, sizeof mungebuf, source, client->sysroot_dir);
return strdup(mungebuf);
}
@@ -158,7 +158,7 @@ pkgconf_fragment_add(const pkgconf_client_t *client, pkgconf_list_t *list, const
}
else
{
- char mungebuf[PKGCONF_SBUFSIZE];
+ char mungebuf[PKGCONF_ITEM_SIZE];
if (list->tail != NULL && list->tail->data != NULL)
{
@@ -600,7 +600,7 @@ pkgconf_fragment_free(pkgconf_list_t *list)
/*
* !doc
*
- * .. c:function:: void pkgconf_fragment_parse(const pkgconf_client_t *client, pkgconf_list_t *list, pkgconf_list_t *vars, const char *value)
+ * .. c:function:: bool pkgconf_fragment_parse(const pkgconf_client_t *client, pkgconf_list_t *list, pkgconf_list_t *vars, const char *value)
*
* Parse a string into a `fragment list`.
*
@@ -608,20 +608,40 @@ pkgconf_fragment_free(pkgconf_list_t *list)
* :param pkgconf_list_t* list: The `fragment list` to add the fragment entries to.
* :param pkgconf_list_t* vars: A list of variables to use for variable substitution.
* :param char* value: The string to parse into fragments.
- * :return: nothing
+ * :return: true on success, false on parse error
*/
-void
+bool
pkgconf_fragment_parse(const pkgconf_client_t *client, pkgconf_list_t *list, pkgconf_list_t *vars, const char *value)
{
- int i, argc;
+ int i, ret, argc;
char **argv;
char *repstr = pkgconf_tuple_parse(client, vars, value);
- pkgconf_argv_split(repstr, &argc, &argv);
+ PKGCONF_TRACE(client, "post-subst: [%s] -> [%s]", value, repstr);
+
+ ret = pkgconf_argv_split(repstr, &argc, &argv);
+ if (ret < 0)
+ {
+ PKGCONF_TRACE(client, "unable to parse fragment string [%s]", repstr);
+ free(repstr);
+ return false;
+ }
for (i = 0; i < argc; i++)
+ {
+ if (argv[i] == NULL)
+ {
+ PKGCONF_TRACE(client, "parsed fragment string is inconsistent: argc = %d while argv[%d] == NULL", argc, i);
+ pkgconf_argv_free(argv);
+ free(repstr);
+ return false;
+ }
+
pkgconf_fragment_add(client, list, argv[i]);
+ }
pkgconf_argv_free(argv);
free(repstr);
+
+ return true;
}