blob: 184e6fc14b895af40de8b6cc326b8404a784fea2 [file] [log] [blame] [edit]
/*
.Some useful path tools.
Written by Ray Donnelly in 2014.
Licensed under CC0. No warranty.
*/
#include "pathtools.h"
#if defined(_WIN32)
/* All this just for MAX_PATH */
#define WIN32_MEAN_AND_LEAN
#include <windows.h>
#else
#include <limits.h>
#endif
char const *
msys2_get_relocated_single_path(char const * unix_path)
{
char * unix_part = (char *) strip_n_prefix_folders (unix_path, 1);
char win_part[MAX_PATH];
get_executable_path (NULL, &win_part[0], MAX_PATH);
strip_n_suffix_folders (&win_part[0], 2); /* 2 because the file name is present. */
char * new_path = (char *) malloc (strlen (unix_part) + strlen (win_part) + 1);
strcpy (new_path, win_part);
strcat (new_path, unix_part);
return new_path;
}
char *
msys2_get_relocated_path_list(char const * paths)
{
char win_part[MAX_PATH];
get_executable_path (NULL, &win_part[0], MAX_PATH);
strip_n_suffix_folders (&win_part[0], 2); /* 2 because the file name is present. */
char **arr = NULL;
size_t count = split_path_list (paths, ':', &arr);
int result_size = 1 + (count - 1); /* count - 1 is for ; delim. */
size_t i;
for (i = 0; i < count; ++i)
{
arr[i] = (char *) strip_n_prefix_folders (arr[i], 1);
result_size += strlen (arr[i]) + strlen (win_part);
}
char * result = (char *) malloc (result_size);
if (result == NULL)
{
return NULL;
}
result[0] = '\0';
for (i = 0; i < count; ++i)
{
strcat (result, win_part);
strcat (result, arr[i]);
if (i != count-1)
{
#if defined(_WIN32)
strcat (result, ";");
#else
strcat (result, ":");
#endif
}
}
free ((void*)arr);
return result;
}