use last_slash in file_path

This commit is contained in:
libretroadmin 2025-07-16 00:31:09 +02:00
parent d37068cfb8
commit 047f926540
1 changed files with 15 additions and 43 deletions

View File

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