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/pkg.c | 42 +++++++++++++++++++++++++++--------------- 1 file changed, 27 insertions(+), 15 deletions(-) (limited to 'libpkgconf/pkg.c') diff --git a/libpkgconf/pkg.c b/libpkgconf/pkg.c index d366fd3..ce3921b 100644 --- a/libpkgconf/pkg.c +++ b/libpkgconf/pkg.c @@ -125,7 +125,7 @@ pkgconf_pkg_dir_list_build(pkgconf_client_t *client) } } -typedef void (*pkgconf_pkg_parser_keyword_func_t)(const pkgconf_client_t *client, pkgconf_pkg_t *pkg, const ptrdiff_t offset, char *value); +typedef void (*pkgconf_pkg_parser_keyword_func_t)(const pkgconf_client_t *client, pkgconf_pkg_t *pkg, const char *keyword, const size_t lineno, const ptrdiff_t offset, char *value); typedef struct { const char *keyword; const pkgconf_pkg_parser_keyword_func_t func; @@ -139,22 +139,34 @@ static int pkgconf_pkg_parser_keyword_pair_cmp(const void *key, const void *ptr) } static void -pkgconf_pkg_parser_tuple_func(const pkgconf_client_t *client, pkgconf_pkg_t *pkg, const ptrdiff_t offset, char *value) +pkgconf_pkg_parser_tuple_func(const pkgconf_client_t *client, pkgconf_pkg_t *pkg, const char *keyword, const size_t lineno, const ptrdiff_t offset, char *value) { + (void) keyword; + (void) lineno; + char **dest = (char **)((char *) pkg + offset); *dest = pkgconf_tuple_parse(client, &pkg->vars, value); } static void -pkgconf_pkg_parser_fragment_func(const pkgconf_client_t *client, pkgconf_pkg_t *pkg, const ptrdiff_t offset, char *value) +pkgconf_pkg_parser_fragment_func(const pkgconf_client_t *client, pkgconf_pkg_t *pkg, const char *keyword, const size_t lineno, const ptrdiff_t offset, char *value) { pkgconf_list_t *dest = (pkgconf_list_t *)((char *) pkg + offset); - pkgconf_fragment_parse(client, dest, &pkg->vars, value); + bool ret = pkgconf_fragment_parse(client, dest, &pkg->vars, value); + + if (!ret) + { + pkgconf_warn(client, "%s:" SIZE_FMT_SPECIFIER ": warning: unable to parse field '%s' into an argument vector, value [%s]\n", pkg->filename, + lineno, keyword, value); + } } static void -pkgconf_pkg_parser_dependency_func(const pkgconf_client_t *client, pkgconf_pkg_t *pkg, const ptrdiff_t offset, char *value) +pkgconf_pkg_parser_dependency_func(const pkgconf_client_t *client, pkgconf_pkg_t *pkg, const char *keyword, const size_t lineno, const ptrdiff_t offset, char *value) { + (void) keyword; + (void) lineno; + pkgconf_list_t *dest = (pkgconf_list_t *)((char *) pkg + offset); pkgconf_dependency_parse(client, pkg, dest, value); } @@ -175,7 +187,7 @@ static const pkgconf_pkg_parser_keyword_pair_t pkgconf_pkg_parser_keyword_funcs[ }; static bool -pkgconf_pkg_parser_keyword_set(const pkgconf_client_t *client, pkgconf_pkg_t *pkg, const char *keyword, char *value) +pkgconf_pkg_parser_keyword_set(const pkgconf_client_t *client, pkgconf_pkg_t *pkg, const size_t lineno, const char *keyword, char *value) { const pkgconf_pkg_parser_keyword_pair_t *pair = bsearch(keyword, pkgconf_pkg_parser_keyword_funcs, PKGCONF_ARRAY_SIZE(pkgconf_pkg_parser_keyword_funcs), @@ -184,7 +196,7 @@ pkgconf_pkg_parser_keyword_set(const pkgconf_client_t *client, pkgconf_pkg_t *pk if (pair == NULL || pair->func == NULL) return false; - pair->func(client, pkg, pair->offset, value); + pair->func(client, pkg, keyword, lineno, pair->offset, value); return true; } @@ -274,7 +286,7 @@ pkgconf_pkg_new_from_file(pkgconf_client_t *client, const char *filename, FILE * { pkgconf_pkg_t *pkg; char readbuf[PKGCONF_BUFSIZE]; - char pathbuf[PKGCONF_SBUFSIZE]; + char pathbuf[PKGCONF_ITEM_SIZE]; char *idptr; size_t lineno = 0; @@ -353,7 +365,7 @@ pkgconf_pkg_new_from_file(pkgconf_client_t *client, const char *filename, FILE * switch (op) { case ':': - pkgconf_pkg_parser_keyword_set(client, pkg, key, value); + pkgconf_pkg_parser_keyword_set(client, pkg, lineno, key, value); break; case '=': if (strcmp(key, client->prefix_varname) || !(client->flags & PKGCONF_PKG_PKGF_REDEFINE_PREFIX)) @@ -495,8 +507,8 @@ pkgconf_pkg_try_specific_path(pkgconf_client_t *client, const char *path, const { pkgconf_pkg_t *pkg = NULL; FILE *f; - char locbuf[PKGCONF_SBUFSIZE]; - char uninst_locbuf[PKGCONF_SBUFSIZE]; + char locbuf[PKGCONF_ITEM_SIZE]; + char uninst_locbuf[PKGCONF_ITEM_SIZE]; PKGCONF_TRACE(client, "trying path: %s for %s", path, name); @@ -533,7 +545,7 @@ pkgconf_pkg_scan_dir(pkgconf_client_t *client, const char *path, void *data, pkg for (dirent = readdir(dir); dirent != NULL; dirent = readdir(dir)) { - char filebuf[PKGCONF_SBUFSIZE]; + char filebuf[PKGCONF_ITEM_SIZE]; pkgconf_pkg_t *pkg; FILE *f; @@ -620,7 +632,7 @@ pkgconf_pkg_find_in_registry_key(pkgconf_client_t *client, HKEY hkey, const char while (RegEnumValue(key, i++, buf, &bufsize, NULL, NULL, NULL, NULL) == ERROR_SUCCESS) { - char pathbuf[PKGCONF_SBUFSIZE]; + char pathbuf[PKGCONF_ITEM_SIZE]; DWORD type; DWORD pathbuflen = sizeof pathbuf; @@ -655,7 +667,7 @@ pkgconf_pkg_find_in_registry_key(pkgconf_client_t *client, HKEY hkey, const char pkgconf_pkg_t * pkgconf_pkg_find(pkgconf_client_t *client, const char *name) { - char pathbuf[PKGCONF_SBUFSIZE]; + char pathbuf[PKGCONF_ITEM_SIZE]; pkgconf_pkg_t *pkg = NULL; pkgconf_node_t *n; FILE *f; @@ -735,7 +747,7 @@ int pkgconf_compare_version(const char *a, const char *b) { char oldch1, oldch2; - char buf1[PKGCONF_SBUFSIZE], buf2[PKGCONF_SBUFSIZE]; + char buf1[PKGCONF_ITEM_SIZE], buf2[PKGCONF_ITEM_SIZE]; char *str1, *str2; char *one, *two; int ret; -- cgit v1.1