From 1fe91b914cb7981395cd4445a221e2570d248146 Mon Sep 17 00:00:00 2001 From: Baptiste Daroussin Date: Tue, 8 Dec 2015 00:02:14 +0100 Subject: [PATCH] Do not parse the global variables This fixes an incompatibility with pkg-confing 0.29 Found by Thomas Klausner when building gupnp-igd-0.2.3 with introspection support --- libpkgconf/libpkgconf.h | 2 +- libpkgconf/pkg.c | 4 ++-- libpkgconf/tuple.c | 30 +++++++++++++++++++++--------- 3 files changed, 24 insertions(+), 12 deletions(-) diff --git a/libpkgconf/libpkgconf.h b/libpkgconf/libpkgconf.h index f0f9b0f..3643abf 100644 --- a/libpkgconf/libpkgconf.h +++ b/libpkgconf/libpkgconf.h @@ -182,7 +182,7 @@ void pkgconf_fragment_free(pkgconf_list_t *list); char *pkgconf_fgetline(char *line, size_t size, FILE *stream); /* tuple.c */ -pkgconf_tuple_t *pkgconf_tuple_add(pkgconf_list_t *parent, const char *key, const char *value); +pkgconf_tuple_t *pkgconf_tuple_add(pkgconf_list_t *parent, const char *key, const char *value, bool parse); char *pkgconf_tuple_find(pkgconf_list_t *list, const char *key); char *pkgconf_tuple_parse(pkgconf_list_t *list, const char *value); void pkgconf_tuple_free(pkgconf_list_t *list); diff --git a/libpkgconf/pkg.c b/libpkgconf/pkg.c index e7e39a4..076ccff 100644 --- a/libpkgconf/pkg.c +++ b/libpkgconf/pkg.c @@ -208,7 +208,7 @@ pkgconf_pkg_new_from_file(const char *filename, FILE *f, unsigned int flags) pkg = calloc(sizeof(pkgconf_pkg_t), 1); pkg->filename = strdup(filename); - pkgconf_tuple_add(&pkg->vars, "pcfiledir", pkg_get_parent_dir(pkg)); + pkgconf_tuple_add(&pkg->vars, "pcfiledir", pkg_get_parent_dir(pkg), true); /* make module id */ if ((idptr = strrchr(pkg->filename, PKG_DIR_SEP_S)) != NULL) @@ -273,7 +273,7 @@ pkgconf_pkg_new_from_file(const char *filename, FILE *f, unsigned int flags) pkgconf_dependency_parse(pkg, &pkg->conflicts, value); break; case '=': - pkgconf_tuple_add(&pkg->vars, key, value); + pkgconf_tuple_add(&pkg->vars, key, value, true); break; default: break; diff --git a/libpkgconf/tuple.c b/libpkgconf/tuple.c index 89b65ac..7900eac 100644 --- a/libpkgconf/tuple.c +++ b/libpkgconf/tuple.c @@ -20,7 +20,7 @@ static pkgconf_list_t pkg_global_var = PKGCONF_LIST_INITIALIZER; void pkgconf_tuple_add_global(const char *key, const char *value) { - pkgconf_tuple_add(&pkg_global_var, key, value); + pkgconf_tuple_add(&pkg_global_var, key, value, false); } char * @@ -62,12 +62,15 @@ out: } pkgconf_tuple_t * -pkgconf_tuple_add(pkgconf_list_t *list, const char *key, const char *value) +pkgconf_tuple_add(pkgconf_list_t *list, const char *key, const char *value, bool parse) { pkgconf_tuple_t *tuple = calloc(sizeof(pkgconf_tuple_t), 1); tuple->key = strdup(key); - tuple->value = pkgconf_tuple_parse(list, value); + if (parse) + tuple->value = pkgconf_tuple_parse(list, value); + else + tuple->value = strdup(value); pkgconf_node_insert(&tuple->iter, tuple, list); @@ -126,16 +129,25 @@ pkgconf_tuple_parse(pkgconf_list_t *vars, const char *value) } ptr += (pptr - ptr); - kv = pkgconf_tuple_find(vars, varname); - + kv = pkgconf_tuple_find_global(varname); if (kv != NULL) { - parsekv = pkgconf_tuple_parse(vars, kv); + strncpy(bptr, kv, PKGCONF_BUFSIZE - (bptr - buf)); + bptr += strlen(kv); + } + else + { + kv = pkgconf_tuple_find(vars, varname); - strncpy(bptr, parsekv, PKGCONF_BUFSIZE - (bptr - buf)); - bptr += strlen(parsekv); + if (kv != NULL) + { + parsekv = pkgconf_tuple_parse(vars, kv); - free(parsekv); + strncpy(bptr, parsekv, PKGCONF_BUFSIZE - (bptr - buf)); + bptr += strlen(parsekv); + + free(parsekv); + } } } }