diff --git a/libretro-common/file/file_path.c b/libretro-common/file/file_path.c index 9b7def5796..2b2a54cfae 100644 --- a/libretro-common/file/file_path.c +++ b/libretro-common/file/file_path.c @@ -369,9 +369,7 @@ char *find_last_slash(const char *str) **/ size_t fill_pathname_slash(char *s, size_t len) { - const char *slash = strrchr(s, '/'); - const char *backslash = strrchr(s, '\\'); - char *last_slash = (!slash || (backslash > slash)) ? (char*)backslash : (char*)slash; + char *last_slash = find_last_slash(s); if (!last_slash) return strlcat(s, PATH_DEFAULT_SLASH(), len); len = strlen(s); @@ -460,33 +458,26 @@ size_t fill_pathname_basedir(char *s, const char *in_path, size_t len) **/ size_t fill_pathname_parent_dir_name(char *s, const char *in_dir, size_t len) { - size_t _len = 0; - char *tmp = strdup(in_dir); - const char *slash = strrchr(tmp, '/'); - const char *backslash = strrchr(tmp, '\\'); - char *last_slash = (!slash || (backslash > slash)) ? (char*)backslash : (char*)slash; + size_t _len = 0; + char *tmp = strdup(in_dir); + char *last_slash = find_last_slash(tmp); if (last_slash && last_slash[1] == 0) { - *last_slash = '\0'; - slash = strrchr(tmp, '/'); - backslash = strrchr(tmp, '\\'); - last_slash = (!slash || (backslash > slash)) ? (char*)backslash : (char*)slash; + *last_slash = '\0'; + last_slash = find_last_slash(tmp); } /* Cut the last part of the string (the filename) after the slash, leaving the directory name (or nested directory names) only. */ if (last_slash) - *last_slash = '\0'; + *last_slash = '\0'; /* Point in_dir to the address of the last slash. * If in_dir is NULL, it means there was no slash in tmp, * so use tmp as-is. */ - slash = strrchr(tmp, '/'); - backslash = strrchr(tmp, '\\'); - in_dir = (!slash || (backslash > slash)) ? (char*)backslash : (char*)slash; - if (!in_dir) - in_dir = tmp; + if (!(in_dir = find_last_slash(tmp))) + in_dir = tmp; if (in_dir && in_dir[1]) { @@ -592,14 +583,10 @@ size_t fill_str_dated_filename(char *s, **/ size_t path_basedir(char *s) { - const char *slash; - const char *backslash; char *last_slash = NULL; if (!s || s[0] == '\0' || s[1] == '\0') return (s && s[0] != '\0') ? 1 : 0; - slash = strrchr(s, '/'); - backslash = strrchr(s, '\\'); - last_slash = (!slash || (backslash > slash)) ? (char*)backslash : (char*)slash; + last_slash = find_last_slash(s); if (last_slash) { last_slash[1] = '\0'; @@ -630,15 +617,10 @@ size_t path_parent_dir(char *s, size_t len) if (len && PATH_CHAR_IS_SLASH(s[len - 1])) { char *last_slash; - const char *slash; - const char *backslash; bool was_absolute = path_is_absolute(s); s[len - 1] = '\0'; - - slash = strrchr(s, '/'); - backslash = strrchr(s, '\\'); - last_slash = (!slash || (backslash > slash)) ? (char*)backslash : (char*)slash; + last_slash = find_last_slash(s); if (was_absolute && !last_slash) { @@ -667,9 +649,7 @@ const char *path_basename(const char *path) /* We cut either at the first compression-related hash, * or we cut at the last slash */ const char *ptr = NULL; - const char *slash = strrchr(path, '/'); - const char *backslash = strrchr(path, '\\'); - char *last_slash = (!slash || (backslash > slash)) ? (char*)backslash : (char*)slash; + char *last_slash = find_last_slash(path); return ((ptr = path_get_archive_delim(path)) || (ptr = last_slash)) ? (ptr + 1) : path; } @@ -687,9 +667,7 @@ const char *path_basename(const char *path) const char *path_basename_nocompression(const char *path) { /* We cut at the last slash */ - const char *slash = strrchr(path, '/'); - const char *backslash = strrchr(path, '\\'); - char *last_slash = (!slash || (backslash > slash)) ? (char*)backslash : (char*)slash; + char *last_slash = find_last_slash(path); return (last_slash) ? (last_slash + 1) : path; } @@ -999,9 +977,7 @@ size_t fill_pathname_join_special(char *s, if (*s) { - const char *slash = strrchr(s, '/'); - const char *backslash = strrchr(s, '\\'); - char *last_slash = (!slash || (backslash > slash)) ? (char*)backslash : (char*)slash; + char *last_slash = find_last_slash(s); if (last_slash) { /* Try to preserve slash type. */ @@ -1327,8 +1303,6 @@ size_t fill_pathname_abbreviated_or_relative(char *s, **/ void path_basedir_wrapper(char *s) { - const char *slash; - const char *backslash; char *last_slash = NULL; if (!s || s[0] == '\0' || s[1] == '\0') return; @@ -1337,9 +1311,7 @@ void path_basedir_wrapper(char *s) if ((last_slash = (char*)path_get_archive_delim(s))) *last_slash = '\0'; #endif - slash = strrchr(s, '/'); - backslash = strrchr(s, '\\'); - last_slash = (!slash || (backslash > slash)) ? (char*)backslash : (char*)slash; + last_slash = find_last_slash(s); if (last_slash) last_slash[1] = '\0'; else