aboutsummaryrefslogtreecommitdiff
path: root/libpkgconf/pkg.c
diff options
context:
space:
mode:
Diffstat (limited to 'libpkgconf/pkg.c')
-rw-r--r--libpkgconf/pkg.c42
1 files changed, 27 insertions, 15 deletions
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;