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)
{
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