Path changes for windows
This commit is contained in:
parent
7c4b1f8c8b
commit
cdd6f9e1a9
151
filename.c
151
filename.c
@ -31,6 +31,8 @@
|
||||
#include "error.h"
|
||||
#include "build-post.h"
|
||||
|
||||
#ifndef WIN32
|
||||
|
||||
/*
|
||||
* Canonicalize `path_name' (UNIX version).
|
||||
* Convert a path name to an absolute path.
|
||||
@ -74,6 +76,104 @@ eb_canonicalize_path_name(char *path_name)
|
||||
return EB_SUCCESS;
|
||||
}
|
||||
|
||||
#else /* WIN32 */
|
||||
|
||||
/*
|
||||
* Canonicalize `path_name' (DOS version).
|
||||
* Convert a path name to an absolute path with drive letter unless
|
||||
* that is an UNC path.
|
||||
*
|
||||
* Original version by KSK Jan/30/1998.
|
||||
* Current version by Motoyuki Kasahara.
|
||||
*/
|
||||
EB_Error_Code
|
||||
eb_canonicalize_path_name(char *path_name)
|
||||
{
|
||||
char cwd[EB_MAX_PATH_LENGTH + 1];
|
||||
char temporary_path_name[EB_MAX_PATH_LENGTH + 1];
|
||||
char *slash;
|
||||
char *last_backslash;
|
||||
|
||||
/*
|
||||
* Replace `/' with `\\'.
|
||||
*/
|
||||
slash = path_name;
|
||||
for (;;) {
|
||||
slash = strchr(slash, '/');
|
||||
if (slash == NULL)
|
||||
break;
|
||||
*slash++ = '\\';
|
||||
}
|
||||
|
||||
if (*path_name == '\\' && *(path_name + 1) == '\\') {
|
||||
/*
|
||||
* `path_name' is UNC path. Nothing to be done.
|
||||
*/
|
||||
} else if (ASCII_ISALPHA(*path_name) && *(path_name + 1) == ':') {
|
||||
/*
|
||||
* `path_name' has a drive letter.
|
||||
* Nothing to be done if it is an absolute path.
|
||||
*/
|
||||
if (*(path_name + 2) != '\\') {
|
||||
/*
|
||||
* `path_name' is a relative path.
|
||||
* Covert the path name to an absolute path.
|
||||
*/
|
||||
if (getdcwd(ASCII_TOUPPER(*path_name) - 'A' + 1, cwd,
|
||||
EB_MAX_PATH_LENGTH + 1) == NULL) {
|
||||
return EB_ERR_FAIL_GETCWD;
|
||||
}
|
||||
if (EB_MAX_PATH_LENGTH < strlen(cwd) + 1 + strlen(path_name + 2))
|
||||
return EB_ERR_TOO_LONG_FILE_NAME;
|
||||
sprintf(temporary_path_name, "%s\\%s", cwd, path_name + 2);
|
||||
strcpy(path_name, temporary_path_name);
|
||||
}
|
||||
} else if (*path_name == '\\') {
|
||||
/*
|
||||
* `path_name' has no drive letter and is an absolute path.
|
||||
* Add a drive letter to the path name.
|
||||
*/
|
||||
if (getcwd(cwd, EB_MAX_PATH_LENGTH + 1) == NULL)
|
||||
return EB_ERR_FAIL_GETCWD;
|
||||
cwd[1] = '\0';
|
||||
if (EB_MAX_PATH_LENGTH < strlen(cwd) + 1 + strlen(path_name))
|
||||
return EB_ERR_TOO_LONG_FILE_NAME;
|
||||
sprintf(temporary_path_name, "%s:%s", cwd, path_name);
|
||||
strcpy(path_name, temporary_path_name);
|
||||
|
||||
} else {
|
||||
/*
|
||||
* `path_name' has no drive letter and is a relative path.
|
||||
* Add a drive letter and convert it to an absolute path.
|
||||
*/
|
||||
if (getcwd(cwd, EB_MAX_PATH_LENGTH + 1) == NULL)
|
||||
return EB_ERR_FAIL_GETCWD;
|
||||
|
||||
if (EB_MAX_PATH_LENGTH < strlen(cwd) + 1 + strlen(path_name))
|
||||
return EB_ERR_TOO_LONG_FILE_NAME;
|
||||
sprintf(temporary_path_name, "%s\\%s", cwd, path_name);
|
||||
strcpy(path_name, temporary_path_name);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Now `path_name' is `X:\...' or `\\...'.
|
||||
* Unless it is "X:\", eliminate `\' in the tail of the path name.
|
||||
*/
|
||||
last_backslash = strrchr(path_name, '\\');
|
||||
if (ASCII_ISALPHA(*path_name)) {
|
||||
if (last_backslash != path_name + 2 && *(last_backslash + 1) == '\0')
|
||||
*last_backslash = '\0';
|
||||
} else {
|
||||
if (last_backslash != path_name + 1 && *(last_backslash + 1) == '\0')
|
||||
*last_backslash = '\0';
|
||||
}
|
||||
|
||||
return EB_SUCCESS;
|
||||
}
|
||||
|
||||
#endif /* WIN32 */
|
||||
|
||||
|
||||
/*
|
||||
* Canonicalize file name.
|
||||
@ -175,7 +275,14 @@ eb_fix_path_name_suffix(char *path_name, const char *suffix)
|
||||
char *dot;
|
||||
char *semicolon;
|
||||
|
||||
#ifndef WIN32
|
||||
base_name = strrchr(path_name, '/');
|
||||
#else
|
||||
if (is_ebnet_url(path_name))
|
||||
base_name = strrchr(path_name, '/');
|
||||
else
|
||||
base_name = strrchr(path_name, '\\');
|
||||
#endif
|
||||
if (base_name == NULL)
|
||||
base_name = path_name;
|
||||
else
|
||||
@ -378,10 +485,19 @@ void
|
||||
eb_compose_path_name(const char *path_name, const char *file_name,
|
||||
char *composed_path_name)
|
||||
{
|
||||
#ifndef WIN32
|
||||
if (strcmp(path_name, "/") == 0)
|
||||
sprintf(composed_path_name, "%s%s", path_name, file_name);
|
||||
else
|
||||
sprintf(composed_path_name, "%s/%s", path_name, file_name);
|
||||
#else
|
||||
if (is_ebnet_url(path_name))
|
||||
sprintf(composed_path_name, "%s/%s", path_name, file_name);
|
||||
else if (ASCII_ISALPHA(*path_name) && strcmp(path_name + 1, ":\\") == 0)
|
||||
sprintf(composed_path_name, "%s%s", path_name, file_name);
|
||||
else
|
||||
sprintf(composed_path_name, "%s\\%s", path_name, file_name);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@ -394,6 +510,7 @@ void
|
||||
eb_compose_path_name2(const char *path_name, const char *sub_directory_name,
|
||||
const char *file_name, char *composed_path_name)
|
||||
{
|
||||
#ifndef WIN32
|
||||
if (strcmp(path_name, "/") == 0) {
|
||||
sprintf(composed_path_name, "%s%s/%s",
|
||||
path_name, sub_directory_name, file_name);
|
||||
@ -401,6 +518,19 @@ eb_compose_path_name2(const char *path_name, const char *sub_directory_name,
|
||||
sprintf(composed_path_name, "%s/%s/%s",
|
||||
path_name, sub_directory_name, file_name);
|
||||
}
|
||||
#else
|
||||
if (is_ebnet_url(path_name)) {
|
||||
sprintf(composed_path_name, "%s/%s/%s",
|
||||
path_name, sub_directory_name, file_name);
|
||||
} else if (ASCII_ISALPHA(*path_name)
|
||||
&& strcmp(path_name + 1, ":\\") == 0) {
|
||||
sprintf(composed_path_name, "%s%s\\%s",
|
||||
path_name, sub_directory_name, file_name);
|
||||
} else {
|
||||
sprintf(composed_path_name, "%s\\%s\\%s",
|
||||
path_name, sub_directory_name, file_name);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@ -414,6 +544,7 @@ eb_compose_path_name3(const char *path_name, const char *sub_directory_name,
|
||||
const char *sub2_directory_name, const char *file_name,
|
||||
char *composed_path_name)
|
||||
{
|
||||
#ifndef WIN32
|
||||
if (strcmp(path_name, "/") == 0) {
|
||||
sprintf(composed_path_name, "%s%s/%s/%s",
|
||||
path_name, sub_directory_name, sub2_directory_name, file_name);
|
||||
@ -421,6 +552,19 @@ eb_compose_path_name3(const char *path_name, const char *sub_directory_name,
|
||||
sprintf(composed_path_name, "%s/%s/%s/%s",
|
||||
path_name, sub_directory_name, sub2_directory_name, file_name);
|
||||
}
|
||||
#else
|
||||
if (is_ebnet_url(path_name)) {
|
||||
sprintf(composed_path_name, "%s/%s/%s/%s",
|
||||
path_name, sub_directory_name, sub2_directory_name, file_name);
|
||||
} else if (ASCII_ISALPHA(*path_name)
|
||||
&& strcmp(path_name + 1, ":\\") == 0) {
|
||||
sprintf(composed_path_name, "%s%s\\%s\\%s",
|
||||
path_name, sub_directory_name, sub2_directory_name, file_name);
|
||||
} else {
|
||||
sprintf(composed_path_name, "%s\\%s\\%s\\%s",
|
||||
path_name, sub_directory_name, sub2_directory_name, file_name);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@ -590,7 +734,14 @@ eb_path_name_zio_code(const char *path_name, Zio_Code default_zio_code,
|
||||
const char *base_name;
|
||||
const char *dot;
|
||||
|
||||
#ifndef WIN32
|
||||
base_name = strrchr(path_name, '/');
|
||||
#else
|
||||
if (is_ebnet_url(path_name))
|
||||
base_name = strrchr(path_name, '/');
|
||||
else
|
||||
base_name = strrchr(path_name, '\\');
|
||||
#endif
|
||||
if (base_name != NULL)
|
||||
base_name++;
|
||||
else
|
||||
|
Loading…
Reference in New Issue
Block a user