libpkgconf: pkg: clean up pkgconf_parser interactions (closes #13)

pull/188/head
William Pitcock 2019-01-14 13:11:59 -06:00
parent 059b2f61ec
commit 0ae52182c9
1 changed files with 15 additions and 15 deletions

View File

@ -64,7 +64,7 @@ pkg_get_parent_dir(pkgconf_pkg_t *pkg)
return strdup(buf); return strdup(buf);
} }
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 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, const char *value);
typedef struct { typedef struct {
const char *keyword; const char *keyword;
const pkgconf_pkg_parser_keyword_func_t func; const pkgconf_pkg_parser_keyword_func_t func;
@ -78,7 +78,7 @@ static int pkgconf_pkg_parser_keyword_pair_cmp(const void *key, const void *ptr)
} }
static void static void
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) 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, const char *value)
{ {
(void) keyword; (void) keyword;
(void) lineno; (void) lineno;
@ -88,7 +88,7 @@ pkgconf_pkg_parser_tuple_func(const pkgconf_client_t *client, pkgconf_pkg_t *pkg
} }
static void static void
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_pkg_parser_fragment_func(const pkgconf_client_t *client, pkgconf_pkg_t *pkg, const char *keyword, const size_t lineno, const ptrdiff_t offset, const char *value)
{ {
pkgconf_list_t *dest = (pkgconf_list_t *)((char *) pkg + offset); pkgconf_list_t *dest = (pkgconf_list_t *)((char *) pkg + offset);
bool ret = pkgconf_fragment_parse(client, dest, &pkg->vars, value); bool ret = pkgconf_fragment_parse(client, dest, &pkg->vars, value);
@ -101,7 +101,7 @@ pkgconf_pkg_parser_fragment_func(const pkgconf_client_t *client, pkgconf_pkg_t *
} }
static void static void
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) 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, const char *value)
{ {
(void) keyword; (void) keyword;
(void) lineno; (void) lineno;
@ -112,7 +112,7 @@ pkgconf_pkg_parser_dependency_func(const pkgconf_client_t *client, pkgconf_pkg_t
/* a variant of pkgconf_pkg_parser_dependency_func which colors the dependency node as an "internal" dependency. */ /* a variant of pkgconf_pkg_parser_dependency_func which colors the dependency node as an "internal" dependency. */
static void static void
pkgconf_pkg_parser_internal_dependency_func(const pkgconf_client_t *client, pkgconf_pkg_t *pkg, const char *keyword, const size_t lineno, const ptrdiff_t offset, char *value) pkgconf_pkg_parser_internal_dependency_func(const pkgconf_client_t *client, pkgconf_pkg_t *pkg, const char *keyword, const size_t lineno, const ptrdiff_t offset, const char *value)
{ {
(void) keyword; (void) keyword;
(void) lineno; (void) lineno;
@ -137,18 +137,19 @@ static const pkgconf_pkg_parser_keyword_pair_t pkgconf_pkg_parser_keyword_funcs[
{"Version", pkgconf_pkg_parser_tuple_func, offsetof(pkgconf_pkg_t, version)}, {"Version", pkgconf_pkg_parser_tuple_func, offsetof(pkgconf_pkg_t, version)},
}; };
static bool static void
pkgconf_pkg_parser_keyword_set(pkgconf_pkg_t *pkg, const size_t lineno, const char *keyword, char *value) pkgconf_pkg_parser_keyword_set(void *opaque, const size_t lineno, const char *keyword, const char *value)
{ {
pkgconf_pkg_t *pkg = opaque;
const pkgconf_pkg_parser_keyword_pair_t *pair = bsearch(keyword, const pkgconf_pkg_parser_keyword_pair_t *pair = bsearch(keyword,
pkgconf_pkg_parser_keyword_funcs, PKGCONF_ARRAY_SIZE(pkgconf_pkg_parser_keyword_funcs), pkgconf_pkg_parser_keyword_funcs, PKGCONF_ARRAY_SIZE(pkgconf_pkg_parser_keyword_funcs),
sizeof(pkgconf_pkg_parser_keyword_pair_t), pkgconf_pkg_parser_keyword_pair_cmp); sizeof(pkgconf_pkg_parser_keyword_pair_t), pkgconf_pkg_parser_keyword_pair_cmp);
if (pair == NULL || pair->func == NULL) if (pair == NULL || pair->func == NULL)
return false; return;
pair->func(pkg->owner, pkg, keyword, lineno, pair->offset, value); pair->func(pkg->owner, pkg, keyword, lineno, pair->offset, value);
return true;
} }
static const char * static const char *
@ -235,10 +236,11 @@ is_path_prefix_equal(const char *path1, const char *path2, size_t path2_len)
#endif #endif
} }
static bool static void
pkgconf_pkg_parser_value_set(pkgconf_pkg_t *pkg, const size_t lineno, const char *keyword, char *value) pkgconf_pkg_parser_value_set(void *opaque, const size_t lineno, const char *keyword, const char *value)
{ {
char canonicalized_value[PKGCONF_ITEM_SIZE]; char canonicalized_value[PKGCONF_ITEM_SIZE];
pkgconf_pkg_t *pkg = opaque;
(void) lineno; (void) lineno;
@ -273,8 +275,6 @@ pkgconf_pkg_parser_value_set(pkgconf_pkg_t *pkg, const size_t lineno, const char
else else
pkgconf_tuple_add(pkg->owner, &pkg->vars, keyword, value, true); pkgconf_tuple_add(pkg->owner, &pkg->vars, keyword, value, true);
} }
return true;
} }
typedef struct { typedef struct {
@ -289,8 +289,8 @@ static const pkgconf_pkg_validity_check_t pkgconf_pkg_validations[] = {
}; };
static const pkgconf_parser_operand_func_t pkg_parser_funcs[256] = { static const pkgconf_parser_operand_func_t pkg_parser_funcs[256] = {
[':'] = (pkgconf_parser_operand_func_t) pkgconf_pkg_parser_keyword_set, [':'] = pkgconf_pkg_parser_keyword_set,
['='] = (pkgconf_parser_operand_func_t) pkgconf_pkg_parser_value_set ['='] = pkgconf_pkg_parser_value_set
}; };
static void pkg_warn_func(pkgconf_pkg_t *pkg, const char *fmt, ...) PRINTFLIKE(2, 3); static void pkg_warn_func(pkgconf_pkg_t *pkg, const char *fmt, ...) PRINTFLIKE(2, 3);