const char* path_translate(const char* path, const char* type) { if (working != path) strcpy(working, path); path_translateInPlace(working, type); return working; }
int io_rmdir(const char* path, const char* dir) { strcpy(buffer, path); if (strlen(buffer) > 0) strcat(buffer, "/"); strcat(buffer, dir); path_translateInPlace(buffer, NULL); return platform_rmdir(buffer); }
const char* path_absolute(const char* path) { char relative[8192]; char* ptr; strcpy(relative, path); if (strlen(relative) == 0) strcpy(relative, "."); path_translateInPlace(relative, "posix"); /* If the directory is already absolute I don't have to do anything */ if (platform_isAbsolutePath(relative)) return path; /* Figure out where I am currently */ platform_getcwd(working, 8192); path_translateInPlace(working, "posix"); /* Split the target path and add it in piece by piece */ ptr = relative; while (ptr != NULL) { char* end = strchr(ptr, '/'); if (end != NULL) *end = '\0'; if (matches(ptr, "..")) { char* sep = strrchr(working, '/'); if (sep != NULL) *sep = '\0'; } else if (!matches(ptr, ".")) { strcat(working, "/"); strcat(working, ptr); } ptr = (end != NULL) ? end + 1 : NULL; } return working; }
const char* path_combine(const char* path0, const char* path1) { strcpy(working, ""); if (!matches(path0, ".") && !matches(path0, "./")) strcat(working, path0); path_translateInPlace(working, "posix"); if (!matches(path1, "") && !matches(path1, ".") && !matches(path1, "./")) { if (strlen(working) > 0 && working[strlen(working) - 1] != '/') strcat(working, "/"); strcat(working, path1); } path_translateInPlace(working, "posix"); return working; }
const char* path_getname(const char* path) { char* ptr; if (path == NULL) return NULL; strcpy(forpart, path); path_translateInPlace(forpart, "posix"); ptr = strrchr(forpart, '/'); return (ptr) ? ++ptr : forpart; }
const char* path_getdir(const char* path) { char* ptr; if (path != NULL) { /* Convert path to neutral separators */ strcpy(forpart, path); path_translateInPlace(forpart, "posix"); /* Now split at last separator */ ptr = strrchr(forpart, '/'); if (ptr != NULL) { *ptr = '\0'; return forpart; } } return ""; }
const char* vs_list_refpaths(const char* name) { char* path = (char*)path_absolute(name); path_translateInPlace(path, "windows"); return path; }