From 598b0256a354cb2e65ea240e50662d4378f5462c Mon Sep 17 00:00:00 2001 From: Karen Arutyunov Date: Sat, 14 Oct 2017 00:05:03 +0300 Subject: Merge with latest original package version (master branch) --- libpkgconf/fragment.c | 34 +++++++++++++++++++++++++++------- 1 file changed, 27 insertions(+), 7 deletions(-) (limited to 'libpkgconf/fragment.c') 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; } -- cgit v1.1