aboutsummaryrefslogtreecommitdiff
path: root/libpkgconf/pkg.c.orig
diff options
context:
space:
mode:
Diffstat (limited to 'libpkgconf/pkg.c.orig')
-rw-r--r--libpkgconf/pkg.c.orig72
1 files changed, 41 insertions, 31 deletions
diff --git a/libpkgconf/pkg.c.orig b/libpkgconf/pkg.c.orig
index 27bc3c7..1a2f6b4 100644
--- a/libpkgconf/pkg.c.orig
+++ b/libpkgconf/pkg.c.orig
@@ -13,6 +13,7 @@
* from the use of this software.
*/
+#include <libpkgconf/stdinc.h>
#include <libpkgconf/config.h>
#include <libpkgconf/libpkgconf.h>
@@ -50,10 +51,9 @@ str_has_suffix(const char *str, const char *suffix)
}
static inline const char *
-get_default_pkgconfig_path(void)
+get_default_pkgconfig_path(char *outbuf, size_t outlen)
{
#ifdef _WIN32
- static char outbuf[MAX_PATH];
char namebuf[MAX_PATH];
char *p;
@@ -69,27 +69,29 @@ get_default_pkgconfig_path(void)
return PKG_DEFAULT_PATH;
*p = '\0';
- pkgconf_strlcpy(outbuf, namebuf, sizeof outbuf);
- pkgconf_strlcat(outbuf, "/", sizeof outbuf);
- pkgconf_strlcat(outbuf, "../lib/pkgconfig", sizeof outbuf);
- pkgconf_strlcat(outbuf, ";", sizeof outbuf);
- pkgconf_strlcat(outbuf, namebuf, sizeof outbuf);
- pkgconf_strlcat(outbuf, "/", sizeof outbuf);
- pkgconf_strlcat(outbuf, "../share/pkgconfig", sizeof outbuf);
+ pkgconf_strlcpy(outbuf, namebuf, outlen);
+ pkgconf_strlcat(outbuf, "/", outlen);
+ pkgconf_strlcat(outbuf, "../lib/pkgconfig", outlen);
+ pkgconf_strlcat(outbuf, ";", outlen);
+ pkgconf_strlcat(outbuf, namebuf, outlen);
+ pkgconf_strlcat(outbuf, "/", outlen);
+ pkgconf_strlcat(outbuf, "../share/pkgconfig", outlen);
return outbuf;
+#else
+ (void) outbuf;
+ (void) outlen;
#endif
return PKG_DEFAULT_PATH;
}
static const char *
-pkg_get_parent_dir(pkgconf_pkg_t *pkg)
+pkg_get_parent_dir(pkgconf_pkg_t *pkg, char *buf, size_t buflen)
{
- static char buf[PKGCONF_BUFSIZE];
char *pathbuf;
- pkgconf_strlcpy(buf, pkg->filename, sizeof buf);
+ pkgconf_strlcpy(buf, pkg->filename, buflen);
pathbuf = strrchr(buf, PKG_DIR_SEP_S);
if (pathbuf == NULL)
pathbuf = strrchr(buf, '/');
@@ -117,7 +119,11 @@ pkgconf_pkg_dir_list_build(pkgconf_client_t *client)
pkgconf_path_build_from_environ("PKG_CONFIG_PATH", NULL, &client->dir_list, true);
if (!(client->flags & PKGCONF_PKG_PKGF_ENV_ONLY))
- pkgconf_path_build_from_environ("PKG_CONFIG_LIBDIR", get_default_pkgconfig_path(), &client->dir_list, true);
+ {
+ char pathbuf[PKGCONF_BUFSIZE];
+
+ pkgconf_path_build_from_environ("PKG_CONFIG_LIBDIR", get_default_pkgconfig_path(pathbuf, sizeof pathbuf), &client->dir_list, true);
+ }
}
typedef void (*pkgconf_pkg_parser_keyword_func_t)(const pkgconf_client_t *client, pkgconf_pkg_t *pkg, const ptrdiff_t offset, char *value);
@@ -184,13 +190,12 @@ pkgconf_pkg_parser_keyword_set(const pkgconf_client_t *client, pkgconf_pkg_t *pk
}
static const char *
-determine_prefix(const pkgconf_pkg_t *pkg)
+determine_prefix(const pkgconf_pkg_t *pkg, char *buf, size_t buflen)
{
- static char buf[PKGCONF_BUFSIZE];
char *pathiter;
- pkgconf_strlcpy(buf, pkg->filename, sizeof buf);
- pkgconf_path_relocate(buf, sizeof buf);
+ pkgconf_strlcpy(buf, pkg->filename, buflen);
+ pkgconf_path_relocate(buf, buflen);
pathiter = strrchr(buf, PKG_DIR_SEP_S);
if (pathiter == NULL)
@@ -270,12 +275,14 @@ pkgconf_pkg_new_from_file(pkgconf_client_t *client, const char *filename, FILE *
{
pkgconf_pkg_t *pkg;
char readbuf[PKGCONF_BUFSIZE];
+ char pathbuf[PKGCONF_BUFSIZE];
+ char prefixbuf[PKGCONF_BUFSIZE];
char *idptr;
size_t lineno = 0;
pkg = calloc(sizeof(pkgconf_pkg_t), 1);
pkg->filename = strdup(filename);
- pkgconf_tuple_add(client, &pkg->vars, "pcfiledir", pkg_get_parent_dir(pkg), true);
+ pkgconf_tuple_add(client, &pkg->vars, "pcfiledir", pkg_get_parent_dir(pkg, pathbuf, sizeof pathbuf), true);
/* make module id */
if ((idptr = strrchr(pkg->filename, PKG_DIR_SEP_S)) != NULL)
@@ -299,7 +306,7 @@ pkgconf_pkg_new_from_file(pkgconf_client_t *client, const char *filename, FILE *
lineno++;
- PKGCONF_TRACE(client, "%s:%zu > [%s]", filename, lineno, readbuf);
+ PKGCONF_TRACE(client, "%s:" SIZE_FMT_SPECIFIER " > [%s]", filename, lineno, readbuf);
p = readbuf;
while (*p && (isalpha((unsigned int)*p) || isdigit((unsigned int)*p) || *p == '_' || *p == '.'))
@@ -313,7 +320,7 @@ pkgconf_pkg_new_from_file(pkgconf_client_t *client, const char *filename, FILE *
{
if (!warned_key_whitespace)
{
- pkgconf_warn(client, "%s:%zu: warning: whitespace encountered while parsing key section\n",
+ pkgconf_warn(client, "%s:" SIZE_FMT_SPECIFIER ": warning: whitespace encountered while parsing key section\n",
pkg->filename, lineno);
warned_key_whitespace = true;
}
@@ -336,7 +343,7 @@ pkgconf_pkg_new_from_file(pkgconf_client_t *client, const char *filename, FILE *
{
if (!warned_value_whitespace && op == '=')
{
- pkgconf_warn(client, "%s:%zu: warning: trailing whitespace encountered while parsing value section\n",
+ pkgconf_warn(client, "%s:" SIZE_FMT_SPECIFIER ": warning: trailing whitespace encountered while parsing value section\n",
pkg->filename, lineno);
warned_value_whitespace = true;
}
@@ -355,7 +362,7 @@ pkgconf_pkg_new_from_file(pkgconf_client_t *client, const char *filename, FILE *
pkgconf_tuple_add(client, &pkg->vars, key, value, true);
else
{
- const char *relvalue = determine_prefix(pkg);
+ const char *relvalue = determine_prefix(pkg, prefixbuf, sizeof prefixbuf);
if (relvalue != NULL)
{
pkgconf_tuple_add(client, &pkg->vars, "orig_prefix", value, true);
@@ -398,7 +405,10 @@ pkgconf_pkg_new_from_file(pkgconf_client_t *client, const char *filename, FILE *
void
pkgconf_pkg_free(pkgconf_client_t *client, pkgconf_pkg_t *pkg)
{
- if (pkg == NULL || pkg->flags & PKGCONF_PKG_PROPF_STATIC)
+ if (pkg == NULL)
+ return;
+
+ if (pkg->flags & PKGCONF_PKG_PROPF_STATIC && !(pkg->flags & PKGCONF_PKG_PROPF_VIRTUAL))
return;
pkgconf_cache_remove(client, pkg);
@@ -415,6 +425,9 @@ pkgconf_pkg_free(pkgconf_client_t *client, pkgconf_pkg_t *pkg)
pkgconf_tuple_free(&pkg->vars);
+ if (pkg->flags & PKGCONF_PKG_PROPF_VIRTUAL)
+ return;
+
if (pkg->id != NULL)
free(pkg->id);
@@ -522,7 +535,7 @@ pkgconf_pkg_scan_dir(pkgconf_client_t *client, const char *path, void *data, pkg
for (dirent = readdir(dir); dirent != NULL; dirent = readdir(dir))
{
- static char filebuf[PKGCONF_BUFSIZE];
+ char filebuf[PKGCONF_BUFSIZE];
pkgconf_pkg_t *pkg;
FILE *f;
@@ -644,6 +657,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_BUFSIZE];
pkgconf_pkg_t *pkg = NULL;
pkgconf_node_t *n;
FILE *f;
@@ -662,7 +676,7 @@ pkgconf_pkg_find(pkgconf_client_t *client, const char *name)
pkg = pkgconf_pkg_new_from_file(client, name, f);
if (pkg != NULL)
{
- pkgconf_path_add(pkg_get_parent_dir(pkg), &client->dir_list, true);
+ pkgconf_path_add(pkg_get_parent_dir(pkg, pathbuf, sizeof pathbuf), &client->dir_list, true);
return pkg;
}
}
@@ -681,8 +695,6 @@ pkgconf_pkg_find(pkgconf_client_t *client, const char *name)
if ((pkg = pkgconf_cache_lookup(client, name)) != NULL)
{
PKGCONF_TRACE(client, "%s is cached", name);
-
- pkg->flags |= PKGCONF_PKG_PROPF_CACHED;
return pkg;
}
}
@@ -1291,16 +1303,14 @@ pkgconf_pkg_verify_graph(pkgconf_client_t *client, pkgconf_pkg_t *root, int dept
static unsigned int
pkgconf_pkg_report_graph_error(pkgconf_client_t *client, pkgconf_pkg_t *parent, pkgconf_pkg_t *pkg, pkgconf_dependency_t *node, unsigned int eflags)
{
- static bool already_sent_notice = false;
-
if (eflags & PKGCONF_PKG_ERRF_PACKAGE_NOT_FOUND)
{
- if (!(client->flags & PKGCONF_PKG_PKGF_SIMPLIFY_ERRORS) & !already_sent_notice)
+ if (!(client->flags & PKGCONF_PKG_PKGF_SIMPLIFY_ERRORS) & !client->already_sent_notice)
{
pkgconf_error(client, "Package %s was not found in the pkg-config search path.\n", node->package);
pkgconf_error(client, "Perhaps you should add the directory containing `%s.pc'\n", node->package);
pkgconf_error(client, "to the PKG_CONFIG_PATH environment variable\n");
- already_sent_notice = true;
+ client->already_sent_notice = true;
}
pkgconf_error(client, "Package '%s', required by '%s', not found\n", node->package, parent->id);