forked from ariadne/pkgconf
tuple: refactor to use pkg_list_t framework
parent
ae063d8922
commit
74e40fd128
|
@ -249,7 +249,7 @@ pkg_dependency_t *
|
||||||
pkg_dependency_parse(pkg_t *pkg, const char *depends)
|
pkg_dependency_parse(pkg_t *pkg, const char *depends)
|
||||||
{
|
{
|
||||||
pkg_dependency_t *list = NULL;
|
pkg_dependency_t *list = NULL;
|
||||||
char *kvdepends = pkg_tuple_parse(pkg->vars, depends);
|
char *kvdepends = pkg_tuple_parse(&pkg->vars, depends);
|
||||||
|
|
||||||
list = pkg_dependency_parse_str(list, kvdepends);
|
list = pkg_dependency_parse_str(list, kvdepends);
|
||||||
free(kvdepends);
|
free(kvdepends);
|
||||||
|
|
|
@ -125,7 +125,7 @@ pkg_fragment_free(pkg_fragment_t *head)
|
||||||
}
|
}
|
||||||
|
|
||||||
pkg_fragment_t *
|
pkg_fragment_t *
|
||||||
pkg_fragment_parse(pkg_fragment_t *head, pkg_tuple_t *vars, const char *value)
|
pkg_fragment_parse(pkg_fragment_t *head, pkg_list_t *vars, const char *value)
|
||||||
{
|
{
|
||||||
int i, argc;
|
int i, argc;
|
||||||
char **argv;
|
char **argv;
|
||||||
|
|
12
main.c
12
main.c
|
@ -142,12 +142,16 @@ print_modversion(pkg_t *pkg, void *unused, unsigned int flags)
|
||||||
static void
|
static void
|
||||||
print_variables(pkg_t *pkg, void *unused, unsigned int flags)
|
print_variables(pkg_t *pkg, void *unused, unsigned int flags)
|
||||||
{
|
{
|
||||||
pkg_tuple_t *node;
|
pkg_node_t *node;
|
||||||
(void) unused;
|
(void) unused;
|
||||||
(void) flags;
|
(void) flags;
|
||||||
|
|
||||||
PKG_FOREACH_LIST_ENTRY(pkg->vars, node)
|
PKG_FOREACH_LIST_ENTRY(pkg->vars.head, node)
|
||||||
printf("%s\n", node->key);
|
{
|
||||||
|
pkg_tuple_t *tuple = node->data;
|
||||||
|
|
||||||
|
printf("%s\n", tuple->key);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -253,7 +257,7 @@ print_variable(pkg_t *pkg, void *data, unsigned int flags)
|
||||||
const char *var;
|
const char *var;
|
||||||
(void) flags;
|
(void) flags;
|
||||||
|
|
||||||
var = pkg_tuple_find(pkg->vars, req->variable);
|
var = pkg_tuple_find(&pkg->vars, req->variable);
|
||||||
if (var != NULL)
|
if (var != NULL)
|
||||||
{
|
{
|
||||||
if (*(req->buf) == '\0')
|
if (*(req->buf) == '\0')
|
||||||
|
|
29
pkg.c
29
pkg.c
|
@ -154,7 +154,7 @@ pkg_new_from_file(const char *filename, FILE *f, unsigned int flags)
|
||||||
|
|
||||||
pkg = calloc(sizeof(pkg_t), 1);
|
pkg = calloc(sizeof(pkg_t), 1);
|
||||||
pkg->filename = strdup(filename);
|
pkg->filename = strdup(filename);
|
||||||
pkg->vars = pkg_tuple_add(pkg->vars, "pcfiledir", pkg_get_parent_dir(pkg));
|
pkg_tuple_add(&pkg->vars, "pcfiledir", pkg_get_parent_dir(pkg));
|
||||||
|
|
||||||
/* make module id */
|
/* make module id */
|
||||||
if ((idptr = strrchr(pkg->filename, PKG_DIR_SEP_S)) != NULL)
|
if ((idptr = strrchr(pkg->filename, PKG_DIR_SEP_S)) != NULL)
|
||||||
|
@ -200,17 +200,17 @@ pkg_new_from_file(const char *filename, FILE *f, unsigned int flags)
|
||||||
{
|
{
|
||||||
case ':':
|
case ':':
|
||||||
if (!strcasecmp(key, "Name"))
|
if (!strcasecmp(key, "Name"))
|
||||||
pkg->realname = pkg_tuple_parse(pkg->vars, value);
|
pkg->realname = pkg_tuple_parse(&pkg->vars, value);
|
||||||
else if (!strcasecmp(key, "Description"))
|
else if (!strcasecmp(key, "Description"))
|
||||||
pkg->description = pkg_tuple_parse(pkg->vars, value);
|
pkg->description = pkg_tuple_parse(&pkg->vars, value);
|
||||||
else if (!strcasecmp(key, "Version"))
|
else if (!strcasecmp(key, "Version"))
|
||||||
pkg->version = pkg_tuple_parse(pkg->vars, value);
|
pkg->version = pkg_tuple_parse(&pkg->vars, value);
|
||||||
else if (!strcasecmp(key, "CFLAGS"))
|
else if (!strcasecmp(key, "CFLAGS"))
|
||||||
pkg->cflags = pkg_fragment_parse(pkg->cflags, pkg->vars, value);
|
pkg->cflags = pkg_fragment_parse(pkg->cflags, &pkg->vars, value);
|
||||||
else if (!strcasecmp(key, "LIBS"))
|
else if (!strcasecmp(key, "LIBS"))
|
||||||
pkg->libs = pkg_fragment_parse(pkg->libs, pkg->vars, value);
|
pkg->libs = pkg_fragment_parse(pkg->libs, &pkg->vars, value);
|
||||||
else if (!strcasecmp(key, "LIBS.private"))
|
else if (!strcasecmp(key, "LIBS.private"))
|
||||||
pkg->libs_private = pkg_fragment_parse(pkg->libs_private, pkg->vars, value);
|
pkg->libs_private = pkg_fragment_parse(pkg->libs_private, &pkg->vars, value);
|
||||||
else if (!strcasecmp(key, "Requires"))
|
else if (!strcasecmp(key, "Requires"))
|
||||||
pkg->requires = pkg_dependency_parse(pkg, value);
|
pkg->requires = pkg_dependency_parse(pkg, value);
|
||||||
else if (!strcasecmp(key, "Requires.private"))
|
else if (!strcasecmp(key, "Requires.private"))
|
||||||
|
@ -220,7 +220,7 @@ pkg_new_from_file(const char *filename, FILE *f, unsigned int flags)
|
||||||
break;
|
break;
|
||||||
case '=':
|
case '=':
|
||||||
if (!(flags & PKGF_MUNGE_SYSROOT_PREFIX) || strcasecmp(key, "prefix"))
|
if (!(flags & PKGF_MUNGE_SYSROOT_PREFIX) || strcasecmp(key, "prefix"))
|
||||||
pkg->vars = pkg_tuple_add(pkg->vars, key, value);
|
pkg_tuple_add(&pkg->vars, key, value);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
char mungebuf[PKG_BUFSIZE];
|
char mungebuf[PKG_BUFSIZE];
|
||||||
|
@ -229,7 +229,7 @@ pkg_new_from_file(const char *filename, FILE *f, unsigned int flags)
|
||||||
strlcpy(mungebuf, sysroot_dir, sizeof mungebuf);
|
strlcpy(mungebuf, sysroot_dir, sizeof mungebuf);
|
||||||
strlcat(mungebuf, value, sizeof mungebuf);
|
strlcat(mungebuf, value, sizeof mungebuf);
|
||||||
|
|
||||||
pkg->vars = pkg_tuple_add(pkg->vars, key, mungebuf);
|
pkg_tuple_add(&pkg->vars, key, mungebuf);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -257,7 +257,7 @@ pkg_free(pkg_t *pkg)
|
||||||
pkg_fragment_free(pkg->libs);
|
pkg_fragment_free(pkg->libs);
|
||||||
pkg_fragment_free(pkg->libs_private);
|
pkg_fragment_free(pkg->libs_private);
|
||||||
|
|
||||||
pkg_tuple_free(pkg->vars);
|
pkg_tuple_free(&pkg->vars);
|
||||||
|
|
||||||
if (pkg->id != NULL)
|
if (pkg->id != NULL)
|
||||||
free(pkg->id);
|
free(pkg->id);
|
||||||
|
@ -629,10 +629,17 @@ static pkg_t pkg_config_virtual = {
|
||||||
.url = PACKAGE_BUGREPORT,
|
.url = PACKAGE_BUGREPORT,
|
||||||
.version = PKG_PKGCONFIG_VERSION_EQUIV,
|
.version = PKG_PKGCONFIG_VERSION_EQUIV,
|
||||||
.flags = PKG_PROPF_VIRTUAL,
|
.flags = PKG_PROPF_VIRTUAL,
|
||||||
.vars = &(pkg_tuple_t){
|
.vars = {
|
||||||
|
.head = &(pkg_node_t){
|
||||||
|
.prev = NULL,
|
||||||
|
.next = NULL,
|
||||||
|
.data = &(pkg_tuple_t){
|
||||||
.key = "pc_path",
|
.key = "pc_path",
|
||||||
.value = PKG_DEFAULT_PATH,
|
.value = PKG_DEFAULT_PATH,
|
||||||
},
|
},
|
||||||
|
},
|
||||||
|
.tail = NULL,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef bool (*pkg_vercmp_res_func_t)(pkg_t *pkg, pkg_dependency_t *pkgdep);
|
typedef bool (*pkg_vercmp_res_func_t)(pkg_t *pkg, pkg_dependency_t *pkgdep);
|
||||||
|
|
15
pkg.h
15
pkg.h
|
@ -68,7 +68,7 @@ struct pkg_dependency_ {
|
||||||
};
|
};
|
||||||
|
|
||||||
struct pkg_tuple_ {
|
struct pkg_tuple_ {
|
||||||
struct pkg_tuple_ *prev, *next;
|
pkg_node_t iter;
|
||||||
|
|
||||||
char *key;
|
char *key;
|
||||||
char *value;
|
char *value;
|
||||||
|
@ -98,7 +98,8 @@ struct pkg_ {
|
||||||
pkg_dependency_t *requires;
|
pkg_dependency_t *requires;
|
||||||
pkg_dependency_t *requires_private;
|
pkg_dependency_t *requires_private;
|
||||||
pkg_dependency_t *conflicts;
|
pkg_dependency_t *conflicts;
|
||||||
pkg_tuple_t *vars;
|
|
||||||
|
pkg_list_t vars;
|
||||||
|
|
||||||
bool uninstalled;
|
bool uninstalled;
|
||||||
|
|
||||||
|
@ -156,7 +157,7 @@ int pkg_argv_split(const char *src, int *argc, char ***argv);
|
||||||
void pkg_argv_free(char **argv);
|
void pkg_argv_free(char **argv);
|
||||||
|
|
||||||
/* fragment.c */
|
/* fragment.c */
|
||||||
pkg_fragment_t *pkg_fragment_parse(pkg_fragment_t *head, pkg_tuple_t *vars, const char *value);
|
pkg_fragment_t *pkg_fragment_parse(pkg_fragment_t *head, pkg_list_t *vars, const char *value);
|
||||||
pkg_fragment_t *pkg_fragment_append(pkg_fragment_t *head, pkg_fragment_t *tail);
|
pkg_fragment_t *pkg_fragment_append(pkg_fragment_t *head, pkg_fragment_t *tail);
|
||||||
pkg_fragment_t *pkg_fragment_add(pkg_fragment_t *head, const char *string);
|
pkg_fragment_t *pkg_fragment_add(pkg_fragment_t *head, const char *string);
|
||||||
pkg_fragment_t *pkg_fragment_copy(pkg_fragment_t *head, pkg_fragment_t *base);
|
pkg_fragment_t *pkg_fragment_copy(pkg_fragment_t *head, pkg_fragment_t *base);
|
||||||
|
@ -168,10 +169,10 @@ void pkg_fragment_free(pkg_fragment_t *head);
|
||||||
char *pkg_fgetline(char *line, size_t size, FILE *stream);
|
char *pkg_fgetline(char *line, size_t size, FILE *stream);
|
||||||
|
|
||||||
/* tuple.c */
|
/* tuple.c */
|
||||||
pkg_tuple_t *pkg_tuple_add(pkg_tuple_t *parent, const char *key, const char *value);
|
pkg_tuple_t *pkg_tuple_add(pkg_list_t *parent, const char *key, const char *value);
|
||||||
char *pkg_tuple_find(pkg_tuple_t *head, const char *key);
|
char *pkg_tuple_find(pkg_list_t *list, const char *key);
|
||||||
char *pkg_tuple_parse(pkg_tuple_t *vars, const char *value);
|
char *pkg_tuple_parse(pkg_list_t *list, const char *value);
|
||||||
void pkg_tuple_free(pkg_tuple_t *head);
|
void pkg_tuple_free(pkg_list_t *list);
|
||||||
void pkg_tuple_add_global(const char *key, const char *value);
|
void pkg_tuple_add_global(const char *key, const char *value);
|
||||||
char *pkg_tuple_find_global(const char *key);
|
char *pkg_tuple_find_global(const char *key);
|
||||||
void pkg_tuple_free_global(void);
|
void pkg_tuple_free_global(void);
|
||||||
|
|
52
tuple.c
52
tuple.c
|
@ -16,23 +16,25 @@
|
||||||
#include "pkg.h"
|
#include "pkg.h"
|
||||||
#include "bsdstubs.h"
|
#include "bsdstubs.h"
|
||||||
|
|
||||||
static pkg_tuple_t *pkg_global_var;
|
static pkg_list_t pkg_global_var = PKG_LIST_INITIALIZER;
|
||||||
|
|
||||||
void
|
void
|
||||||
pkg_tuple_add_global(const char *key, const char *value)
|
pkg_tuple_add_global(const char *key, const char *value)
|
||||||
{
|
{
|
||||||
pkg_global_var = pkg_tuple_add(pkg_global_var, key, value);
|
pkg_tuple_add(&pkg_global_var, key, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
char *
|
char *
|
||||||
pkg_tuple_find_global(const char *key)
|
pkg_tuple_find_global(const char *key)
|
||||||
{
|
{
|
||||||
pkg_tuple_t *node;
|
pkg_node_t *node;
|
||||||
|
|
||||||
PKG_FOREACH_LIST_ENTRY(pkg_global_var, node)
|
PKG_FOREACH_LIST_ENTRY(pkg_global_var.head, node)
|
||||||
{
|
{
|
||||||
if (!strcasecmp(node->key, key))
|
pkg_tuple_t *tuple = node->data;
|
||||||
return node->value;
|
|
||||||
|
if (!strcasecmp(tuple->key, key))
|
||||||
|
return tuple->value;
|
||||||
}
|
}
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -41,7 +43,7 @@ pkg_tuple_find_global(const char *key)
|
||||||
void
|
void
|
||||||
pkg_tuple_free_global(void)
|
pkg_tuple_free_global(void)
|
||||||
{
|
{
|
||||||
pkg_tuple_free(pkg_global_var);
|
pkg_tuple_free(&pkg_global_var);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -61,40 +63,40 @@ out:
|
||||||
}
|
}
|
||||||
|
|
||||||
pkg_tuple_t *
|
pkg_tuple_t *
|
||||||
pkg_tuple_add(pkg_tuple_t *parent, const char *key, const char *value)
|
pkg_tuple_add(pkg_list_t *list, const char *key, const char *value)
|
||||||
{
|
{
|
||||||
pkg_tuple_t *tuple = calloc(sizeof(pkg_tuple_t), 1);
|
pkg_tuple_t *tuple = calloc(sizeof(pkg_tuple_t), 1);
|
||||||
|
|
||||||
tuple->key = strdup(key);
|
tuple->key = strdup(key);
|
||||||
tuple->value = pkg_tuple_parse(parent, value);
|
tuple->value = pkg_tuple_parse(list, value);
|
||||||
|
|
||||||
tuple->next = parent;
|
pkg_node_insert(&tuple->iter, tuple, list);
|
||||||
if (tuple->next != NULL)
|
|
||||||
tuple->next->prev = tuple;
|
|
||||||
|
|
||||||
return tuple;
|
return tuple;
|
||||||
}
|
}
|
||||||
|
|
||||||
char *
|
char *
|
||||||
pkg_tuple_find(pkg_tuple_t *head, const char *key)
|
pkg_tuple_find(pkg_list_t *list, const char *key)
|
||||||
{
|
{
|
||||||
pkg_tuple_t *node;
|
pkg_node_t *node;
|
||||||
char *res;
|
char *res;
|
||||||
|
|
||||||
if ((res = pkg_tuple_find_global(key)) != NULL)
|
if ((res = pkg_tuple_find_global(key)) != NULL)
|
||||||
return res;
|
return res;
|
||||||
|
|
||||||
PKG_FOREACH_LIST_ENTRY(head, node)
|
PKG_FOREACH_LIST_ENTRY(list->head, node)
|
||||||
{
|
{
|
||||||
if (!strcasecmp(node->key, key))
|
pkg_tuple_t *tuple = node->data;
|
||||||
return node->value;
|
|
||||||
|
if (!strcasecmp(tuple->key, key))
|
||||||
|
return tuple->value;
|
||||||
}
|
}
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
char *
|
char *
|
||||||
pkg_tuple_parse(pkg_tuple_t *vars, const char *value)
|
pkg_tuple_parse(pkg_list_t *vars, const char *value)
|
||||||
{
|
{
|
||||||
char buf[PKG_BUFSIZE];
|
char buf[PKG_BUFSIZE];
|
||||||
const char *ptr;
|
const char *ptr;
|
||||||
|
@ -145,14 +147,16 @@ pkg_tuple_parse(pkg_tuple_t *vars, const char *value)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
pkg_tuple_free(pkg_tuple_t *head)
|
pkg_tuple_free(pkg_list_t *list)
|
||||||
{
|
{
|
||||||
pkg_tuple_t *node, *next;
|
pkg_node_t *node, *next;
|
||||||
|
|
||||||
PKG_FOREACH_LIST_ENTRY_SAFE(head, next, node)
|
PKG_FOREACH_LIST_ENTRY_SAFE(list->head, next, node)
|
||||||
{
|
{
|
||||||
free(node->key);
|
pkg_tuple_t *tuple = node->data;
|
||||||
free(node->value);
|
|
||||||
free(node);
|
free(tuple->key);
|
||||||
|
free(tuple->value);
|
||||||
|
free(tuple);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue