From d656f28bef7c69afa93e8187eb3c897e33f72ea0 Mon Sep 17 00:00:00 2001 From: Baptiste Daroussin Date: Tue, 8 Dec 2015 00:02:14 +0100 Subject: 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 Gbp-Pq: Name fix-define-variable.patch --- pkg.c | 4 ++-- pkg.h | 2 +- tuple.c | 30 +++++++++++++++++++++--------- 3 files changed, 24 insertions(+), 12 deletions(-) diff --git a/pkg.c b/pkg.c index 752b7f8..ca3bd9d 100644 --- a/pkg.c +++ b/pkg.c @@ -200,7 +200,7 @@ pkg_new_from_file(const char *filename, FILE *f, unsigned int flags) pkg = calloc(sizeof(pkg_t), 1); pkg->filename = strdup(filename); - pkg_tuple_add(&pkg->vars, "pcfiledir", pkg_get_parent_dir(pkg)); + pkg_tuple_add(&pkg->vars, "pcfiledir", pkg_get_parent_dir(pkg), true); /* make module id */ if ((idptr = strrchr(pkg->filename, PKG_DIR_SEP_S)) != NULL) @@ -265,7 +265,7 @@ pkg_new_from_file(const char *filename, FILE *f, unsigned int flags) pkg_dependency_parse(pkg, &pkg->conflicts, value); break; case '=': - pkg_tuple_add(&pkg->vars, key, value); + pkg_tuple_add(&pkg->vars, key, value, true); break; default: break; diff --git a/pkg.h b/pkg.h index 83add6f..3f963e8 100644 --- a/pkg.h +++ b/pkg.h @@ -171,7 +171,7 @@ void pkg_fragment_free(pkg_list_t *list); char *pkg_fgetline(char *line, size_t size, FILE *stream); /* tuple.c */ -pkg_tuple_t *pkg_tuple_add(pkg_list_t *parent, const char *key, const char *value); +pkg_tuple_t *pkg_tuple_add(pkg_list_t *parent, const char *key, const char *value, bool parse); char *pkg_tuple_find(pkg_list_t *list, const char *key); char *pkg_tuple_parse(pkg_list_t *list, const char *value); void pkg_tuple_free(pkg_list_t *list); diff --git a/tuple.c b/tuple.c index dc2a195..d752730 100644 --- a/tuple.c +++ b/tuple.c @@ -21,7 +21,7 @@ static pkg_list_t pkg_global_var = PKG_LIST_INITIALIZER; void pkg_tuple_add_global(const char *key, const char *value) { - pkg_tuple_add(&pkg_global_var, key, value); + pkg_tuple_add(&pkg_global_var, key, value, false); } char * @@ -63,12 +63,15 @@ out: } pkg_tuple_t * -pkg_tuple_add(pkg_list_t *list, const char *key, const char *value) +pkg_tuple_add(pkg_list_t *list, const char *key, const char *value, bool parse) { pkg_tuple_t *tuple = calloc(sizeof(pkg_tuple_t), 1); tuple->key = strdup(key); - tuple->value = pkg_tuple_parse(list, value); + if (parse) + tuple->value = pkg_tuple_parse(list, value); + else + tuple->value = strdup(value); pkg_node_insert(&tuple->iter, tuple, list); @@ -127,16 +130,25 @@ pkg_tuple_parse(pkg_list_t *vars, const char *value) } ptr += (pptr - ptr); - kv = pkg_tuple_find(vars, varname); - + kv = pkg_tuple_find_global(varname); if (kv != NULL) { - parsekv = pkg_tuple_parse(vars, kv); + strncpy(bptr, kv, PKG_BUFSIZE - (bptr - buf)); + bptr += strlen(kv); + } + else + { + kv = pkg_tuple_find(vars, varname); - strncpy(bptr, parsekv, PKG_BUFSIZE - (bptr - buf)); - bptr += strlen(parsekv); + if (kv != NULL) + { + parsekv = pkg_tuple_parse(vars, kv); + + strncpy(bptr, parsekv, PKG_BUFSIZE - (bptr - buf)); + bptr += strlen(parsekv); - free(parsekv); + free(parsekv); + } } } } -- cgit v1.2.3