cyrus-sasl: synchronize pathtools

Signed-off-by: Markus Mützel <markus.muetzel@gmx.de>
This commit is contained in:
Markus Mützel
2021-11-14 21:11:38 +01:00
parent a3bb8187ed
commit a5850d3716
3 changed files with 81 additions and 20 deletions

View File

@@ -25,7 +25,7 @@ _realname=cyrus-sasl
pkgbase=mingw-w64-${_realname}
pkgname=("${MINGW_PACKAGE_PREFIX}-${_realname}")
pkgver=2.1.27
pkgrel=3
pkgrel=4
pkgdesc="Cyrus Simple Authentication Service Layer (SASL) library (mingw-w64)"
arch=('any')
mingw_arch=('mingw32' 'mingw64' 'ucrt64' 'clang64' 'clang32')
@@ -51,8 +51,8 @@ source=(https://github.com/cyrusimap/${_realname}/releases/download/${_realname}
22-autoconf-prevent-full-path-resolution.patch)
sha256sums=('26866b1549b00ffd020f188a43c258017fa1c382b3ddadd8201536f72efb05d5'
'SKIP'
'6f1016e6647b6340fdceefaf24ff391f4c0ea3c785ddf70c9794ca2356797888'
'6ce4dcf4ef6c4bce48dbcb6f1b5226baf79f74ac76719fb0c06419a0aadb37a3'
'703cd0cb74e714f9e66d26de11c109dd76fab07e723af8dde56a35ea65102e5f'
'4f9d325265ef6f4e90ad637dea41afa6995388c921fe961ad5dc895aca10318b'
'0d0220f721b07f821e14f00c04250c2243620301200f825e7f0532b581d63a7d'
'62fca7407d288e021fac6fed47d8a94ef2775c257ddcb79071428fe7719485f5'
'b8bedacab5fc992eb2afd259ce2e898291d2bec685030108be3f51e6ce30977c'

View File

@@ -466,13 +466,11 @@ split_path_list(char const * path_list, char split_char, char *** arr)
return path_count;
}
char *
get_relocated_path_list(char const * from, char const * to_path_list)
static char *
get_relocated_path_list_ref(char const * from, char const * to_path_list, char *ref_path)
{
char exe_path[MAX_PATH];
char * temp;
get_executable_path (NULL, &exe_path[0], sizeof (exe_path) / sizeof (exe_path[0]));
if ((temp = strrchr (exe_path, '/')) != NULL)
if ((temp = strrchr (ref_path, '/')) != NULL)
{
temp[1] = '\0';
}
@@ -487,16 +485,16 @@ get_relocated_path_list(char const * from, char const * to_path_list)
}
size_t count = split_path_list (to_path_list, split_char, &arr);
int result_size = 1 + (count - 1); /* count - 1 is for ; delim. */
size_t exe_path_size = strlen (exe_path);
size_t ref_path_size = strlen (ref_path);
size_t i;
/* Space required is:
count * (exe_path_size + strlen (rel_to_datadir))
count * (ref_path_size + strlen (rel_to_datadir))
rel_to_datadir upper bound is:
(count * strlen (from)) + (3 * num_slashes (from))
+ strlen(arr[i]) + 1.
.. pathalogically num_slashes (from) is strlen (from)
(from = ////////) */
size_t space_required = (count * (exe_path_size + 4 * strlen (from))) + count - 1;
size_t space_required = (count * (ref_path_size + 4 * strlen (from))) + count - 1;
for (i = 0; i < count; ++i)
{
space_required += strlen (arr[i]);
@@ -509,7 +507,7 @@ get_relocated_path_list(char const * from, char const * to_path_list)
char * rel_to_datadir = get_relative_path (from, arr[i]);
scratch[0] = '\0';
arr[i] = scratch;
strcat (scratch, exe_path);
strcat (scratch, ref_path);
strcat (scratch, rel_to_datadir);
simplify_path (arr[i]);
size_t arr_i_size = strlen (arr[i]);
@@ -538,20 +536,60 @@ get_relocated_path_list(char const * from, char const * to_path_list)
return result;
}
char *
get_relocated_path_list(char const *from, char const *to_path_list)
{
char exe_path[MAX_PATH];
get_executable_path (NULL, &exe_path[0], sizeof (exe_path) / sizeof (exe_path[0]));
return get_relocated_path_list_ref(from, to_path_list, exe_path);
}
char *
get_relocated_path_list_lib(char const *from, char const *to_path_list)
{
char dll_path[PATH_MAX];
get_dll_path (&dll_path[0], sizeof(dll_path)/sizeof(dll_path[0]));
return get_relocated_path_list_ref(from, to_path_list, dll_path);
}
static char *
single_path_relocation_ref(const char *from, const char *to, char *ref_path)
{
#if defined(__MINGW32__)
if (strrchr (ref_path, '/') != NULL)
{
strrchr (ref_path, '/')[1] = '\0';
}
char * rel_to_datadir = get_relative_path (from, to);
strcat (ref_path, rel_to_datadir);
simplify_path (&ref_path[0]);
return malloc_copy_string(ref_path);
#else
return malloc_copy_string(to);
#endif
}
char *
single_path_relocation(const char *from, const char *to)
{
#if defined(__MINGW32__)
char exe_path[PATH_MAX];
get_executable_path (NULL, &exe_path[0], sizeof(exe_path)/sizeof(exe_path[0]));
if (strrchr (exe_path, '/') != NULL)
{
strrchr (exe_path, '/')[1] = '\0';
}
char * rel_to_datadir = get_relative_path (from, to);
strcat (exe_path, rel_to_datadir);
simplify_path (&exe_path[0]);
return malloc_copy_string(exe_path);
return single_path_relocation_ref(from, to, exe_path);
#else
return malloc_copy_string(to);
#endif
}
char *
single_path_relocation_lib(const char *from, const char *to)
{
#if defined(__MINGW32__)
char dll_path[PATH_MAX];
get_dll_path (&dll_path[0], sizeof(dll_path)/sizeof(dll_path[0]));
return single_path_relocation_ref(from, to, dll_path);
#else
return malloc_copy_string(to);
#endif
@@ -576,3 +614,23 @@ pathlist_relocation(const char *from_path, const char *to_path_list)
return (to_path_list);
#endif
}
char *
pathlist_relocation_lib(const char *from_path, const char *to_path_list)
{
#if defined(__MINGW32__)
static char stored_path[PATH_MAX];
static int stored = 0;
if (stored == 0)
{
char const * relocated = get_relocated_path_list_lib(from_path, to_path_list);
strncpy (stored_path, relocated, PATH_MAX);
stored_path[PATH_MAX-1] = '\0';
free ((void *)relocated);
stored = 1;
}
return stored_path;
#else
return (to_path_list);
#endif
}

View File

@@ -50,8 +50,11 @@ strip_n_suffix_folders(char * path, size_t n);
char const * get_relocated_path (char const * from, char const * to, char const * actual_from);
char * get_relocated_path_list(char const * from, char const * to_path_list);
char * get_relocated_path_list_lib(char const * from, char const * to_path_list);
char * single_path_relocation(const char *from, const char *to);
char * single_path_relocation_lib(const char *from, const char *to);
char * pathlist_relocation(const char *from_path, const char *to_path_list);
char * pathlist_relocation_lib(const char *from_path, const char *to_path_list);
#endif /* PATHTOOLS_H */