forked from ariadne/pkgconf
path: add new pkgconf_path_relocate() API which is a stub when path
relocation is not neededfeature/tap-sh
parent
7f6a185977
commit
1369f558c6
|
@ -277,5 +277,6 @@ size_t pkgconf_path_split(const char *text, pkgconf_list_t *dirlist, bool filter
|
|||
size_t pkgconf_path_build_from_environ(const char *environ, const char *fallback, pkgconf_list_t *dirlist, bool filter);
|
||||
bool pkgconf_path_match_list(const char *path, const pkgconf_list_t *dirlist);
|
||||
void pkgconf_path_free(pkgconf_list_t *dirlist);
|
||||
bool pkgconf_path_relocate(char *buf, size_t buflen);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -16,6 +16,10 @@
|
|||
#include <libpkgconf/libpkgconf.h>
|
||||
#include <libpkgconf/config.h>
|
||||
|
||||
#ifdef HAVE_CYGWIN_CONV_PATH
|
||||
# include <sys/cygwin.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_SYS_STAT_H
|
||||
# include <sys/stat.h>
|
||||
# define PKGCONF_CACHE_INODES
|
||||
|
@ -214,3 +218,32 @@ pkgconf_path_free(pkgconf_list_t *dirlist)
|
|||
free(pnode);
|
||||
}
|
||||
}
|
||||
|
||||
bool
|
||||
pkgconf_path_relocate(char *buf, size_t buflen)
|
||||
{
|
||||
#ifdef HAVE_CYGWIN_CONV_PATH
|
||||
ssize_t size;
|
||||
char *tmpbuf, *ti;
|
||||
|
||||
size = cygwin_conv_path(CCP_POSIX_TO_WIN_A, buf, NULL, 0);
|
||||
if (size < 0 || (size_t) size > buflen)
|
||||
return false;
|
||||
|
||||
tmpbuf = malloc(size);
|
||||
if (cygwin_conv_path(CCP_POSIX_TO_WIN_A, buf, tmpbuf, size))
|
||||
return false;
|
||||
|
||||
pkgconf_strlcpy(buf, tmpbuf, buflen);
|
||||
free(tmpbuf);
|
||||
|
||||
/* rewrite any backslash arguments for best compatibility */
|
||||
for (ti = buf; *ti != '\0'; ti++)
|
||||
{
|
||||
if (*ti == '\\')
|
||||
*ti = '/';
|
||||
}
|
||||
#endif
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue