A number of fixes + win32 compat #1
5
parse.c
5
parse.c
|
@ -185,7 +185,7 @@ parse_deplist(pkg_t *pkg, const char *depends)
|
|||
char *start = buf;
|
||||
char *ptr = buf;
|
||||
char *vstart = NULL;
|
||||
char *package, *version;
|
||||
char *package = NULL, *version = NULL;
|
||||
|
||||
strlcpy(buf, kvdepends, sizeof buf);
|
||||
strlcat(buf, " ", sizeof buf);
|
||||
|
@ -373,9 +373,6 @@ parse_file(const char *filename, FILE *f)
|
|||
pkg_t *pkg;
|
||||
char readbuf[BUFSIZ];
|
||||
|
||||
if (f == NULL)
|
||||
return NULL;
|
||||
|
||||
pkg = calloc(sizeof(pkg_t), 1);
|
||||
pkg->filename = strdup(filename);
|
||||
|
||||
|
|
54
pkg.c
54
pkg.c
|
@ -27,27 +27,14 @@
|
|||
#define PKG_CONFIG_EXT ".pc"
|
||||
#define PKG_CONFIG_PATH_SZ (65535)
|
||||
|
||||
static inline const char *
|
||||
pkg_get_pkgconfig_path(void)
|
||||
{
|
||||
static bool computed = false;
|
||||
static char path[PKG_CONFIG_PATH_SZ];
|
||||
char *env_path;
|
||||
|
||||
if (computed)
|
||||
return path;
|
||||
|
||||
strlcpy(path, PKG_DEFAULT_PATH, sizeof path);
|
||||
|
||||
env_path = getenv("PKG_CONFIG_PATH");
|
||||
if (env_path != NULL)
|
||||
{
|
||||
strlcat(path, ":", sizeof path);
|
||||
strlcat(path, env_path, sizeof path);
|
||||
}
|
||||
|
||||
return path;
|
||||
}
|
||||
#ifdef _WIN32
|
||||
/* pkg-config uses ';' on win32 as ':' is part of path */
|
||||
#define PKG_CONFIG_PATH_SEP_S ";"
|
||||
#define PKG_CONFIG_PATH_SEP ';'
|
||||
#else
|
||||
#define PKG_CONFIG_PATH_SEP_S ":"
|
||||
#define PKG_CONFIG_PATH_SEP ':'
|
||||
#endif
|
||||
|
||||
pkg_t *
|
||||
pkg_find(const char *name)
|
||||
|
@ -58,12 +45,13 @@ pkg_find(const char *name)
|
|||
int count = 0, pcount = 0;
|
||||
FILE *f;
|
||||
|
||||
bzero(path, BUFSIZ);
|
||||
|
||||
env_path = pkg_get_pkgconfig_path();
|
||||
while (env_path[count] != '\0')
|
||||
/* PKG_CONFIG_PATH has to take precedence */
|
||||
env_path = getenv("PKG_CONFIG_PATH");
|
||||
if (env_path)
|
||||
{
|
||||
if (env_path[count] && env_path[count] != ':')
|
||||
while (1)
|
||||
{
|
||||
if (env_path[count] && env_path[count] != PKG_CONFIG_PATH_SEP)
|
||||
{
|
||||
path[pcount] = env_path[count];
|
||||
pcount++;
|
||||
|
@ -71,24 +59,26 @@ pkg_find(const char *name)
|
|||
else
|
||||
{
|
||||
path[pcount] = '\0';
|
||||
if (path[0] != '\0')
|
||||
{
|
||||
snprintf(locbuf, sizeof locbuf, "%s/%s.pc", path, name);
|
||||
if (f = fopen(locbuf, "r"))
|
||||
return parse_file(locbuf, f);
|
||||
}
|
||||
if (env_path[count] == '\0')
|
||||
break;
|
||||
|
||||
bzero(path, BUFSIZ);
|
||||
pcount = 0;
|
||||
}
|
||||
|
||||
count++;
|
||||
}
|
||||
|
||||
if (path[0] != '\0')
|
||||
{
|
||||
snprintf(locbuf, sizeof locbuf, "%s/%s.pc", path, name);
|
||||
f = fopen(locbuf, "r");
|
||||
}
|
||||
|
||||
snprintf(locbuf, sizeof locbuf, "%s/%s.pc", PKG_DEFAULT_PATH, name);
|
||||
if (f = fopen(locbuf, "r"))
|
||||
return parse_file(locbuf, f);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in New Issue