string_replace_substring - move out implicit strlen

This commit is contained in:
libretroadmin 2024-12-23 00:40:09 +01:00
parent b90c2d440c
commit ca7e53e3ca
6 changed files with 72 additions and 70 deletions

View File

@ -63,21 +63,21 @@
enum wildcard_type enum wildcard_type
{ {
RARCH_WILDCARD_CONTENT_DIR = 0, RARCH_WC_CONTENT_DIR = 0,
RARCH_WILDCARD_CORE, RARCH_WC_CORE,
RARCH_WILDCARD_GAME, RARCH_WC_GAME,
RARCH_WILDCARD_VIDEO_DRIVER, RARCH_WC_VIDEO_DRIVER,
RARCH_WILDCARD_VIDEO_USER_ROTATION, RARCH_WC_VIDEO_USER_ROTATION,
RARCH_WILDCARD_VIDEO_ALLOW_CORE_ROTATION, RARCH_WC_VIDEO_ALLOW_CORE_ROTATION,
RARCH_WILDCARD_CORE_REQUESTED_ROTATION, RARCH_WC_CORE_REQUESTED_ROTATION,
RARCH_WILDCARD_VIDEO_FINAL_ROTATION, RARCH_WC_VIDEO_FINAL_ROTATION,
RARCH_WILDCARD_SCREEN_ORIENTATION, RARCH_WC_SCREEN_ORIENTATION,
RARCH_WILDCARD_VIEWPORT_ASPECT_ORIENTATION, RARCH_WC_VIEWPORT_ASPECT_ORIENTATION,
RARCH_WILDCARD_CORE_ASPECT_ORIENTATION, RARCH_WC_CORE_ASPECT_ORIENTATION,
RARCH_WILDCARD_PRESET_DIR, RARCH_WC_PRESET_DIR,
RARCH_WILDCARD_PRESET, RARCH_WC_PRESET,
RARCH_WILDCARD_VIDEO_DRIVER_SHADER_EXT, RARCH_WC_VIDEO_DRIVER_SHADER_EXT,
RARCH_WILDCARD_VIDEO_DRIVER_PRESET_EXT RARCH_WC_VIDEO_DRIVER_PRESET_EXT
}; };
struct wildcard_token struct wildcard_token
@ -87,24 +87,6 @@ struct wildcard_token
size_t token_size; size_t token_size;
}; };
static struct wildcard_token wildcard_tokens[SHADER_NUM_WILDCARDS] = {
{RARCH_WILDCARD_CONTENT_DIR, "$CONTENT-DIR$", STRLEN_CONST("$CONTENT-DIR$")},
{RARCH_WILDCARD_CORE, "$CORE$", STRLEN_CONST("$CORE$")},
{RARCH_WILDCARD_GAME, "$GAME$", STRLEN_CONST("$GAME$")},
{RARCH_WILDCARD_VIDEO_DRIVER, "$VID-DRV$", STRLEN_CONST("$VID-DRV$")},
{RARCH_WILDCARD_VIDEO_DRIVER_PRESET_EXT, "$VID-DRV-PRESET-EXT$", STRLEN_CONST("$VID-DRV-PRESET-EXT$")},
{RARCH_WILDCARD_VIDEO_DRIVER_SHADER_EXT, "$VID-DRV-SHADER-EXT$", STRLEN_CONST("$VID-DRV-SHADER-EXT$")},
{RARCH_WILDCARD_CORE_REQUESTED_ROTATION, "$CORE-REQ-ROT$", STRLEN_CONST("$CORE-REQ-ROT$")},
{RARCH_WILDCARD_VIDEO_ALLOW_CORE_ROTATION, "$VID-ALLOW-CORE-ROT$", STRLEN_CONST("$VID-ALLOW-CORE-ROT$")},
{RARCH_WILDCARD_VIDEO_USER_ROTATION, "$VID-USER-ROT$", STRLEN_CONST("$VID-USER-ROT$")},
{RARCH_WILDCARD_VIDEO_FINAL_ROTATION, "$VID-FINAL-ROT$", STRLEN_CONST("$VID-FINAL-ROT$")},
{RARCH_WILDCARD_SCREEN_ORIENTATION, "$SCREEN-ORIENT$", STRLEN_CONST("$SCREEN-ORIENT$")},
{RARCH_WILDCARD_VIEWPORT_ASPECT_ORIENTATION, "$VIEW-ASPECT-ORIENT$", STRLEN_CONST("$VIEW-ASPECT-ORIENT$")},
{RARCH_WILDCARD_CORE_ASPECT_ORIENTATION, "$CORE-ASPECT-ORIENT$", STRLEN_CONST("$CORE-ASPECT-ORIENT$")},
{RARCH_WILDCARD_PRESET_DIR, "$PRESET-DIR$", STRLEN_CONST("$PRESET-DIR$")},
{RARCH_WILDCARD_PRESET, "$PRESET$", STRLEN_CONST("$PRESET$")},
};
/* TODO/FIXME - global state - perhaps move outside this file */ /* TODO/FIXME - global state - perhaps move outside this file */
static path_change_data_t *file_change_data = NULL; static path_change_data_t *file_change_data = NULL;
@ -222,20 +204,39 @@ static void fill_pathname_expanded_and_absolute(
**/ **/
static void video_shader_replace_wildcards(char *s, size_t len, char *in_preset_path) static void video_shader_replace_wildcards(char *s, size_t len, char *in_preset_path)
{ {
int i = 0; static struct wildcard_token wildcard_tokens[SHADER_NUM_WILDCARDS] = {
{RARCH_WC_CONTENT_DIR, "$CONTENT-DIR$", STRLEN_CONST("$CONTENT-DIR$")},
{RARCH_WC_CORE, "$CORE$", STRLEN_CONST("$CORE$")},
{RARCH_WC_GAME, "$GAME$", STRLEN_CONST("$GAME$")},
{RARCH_WC_VIDEO_DRIVER, "$VID-DRV$", STRLEN_CONST("$VID-DRV$")},
{RARCH_WC_VIDEO_DRIVER_PRESET_EXT, "$VID-DRV-PRESET-EXT$", STRLEN_CONST("$VID-DRV-PRESET-EXT$")},
{RARCH_WC_VIDEO_DRIVER_SHADER_EXT, "$VID-DRV-SHADER-EXT$", STRLEN_CONST("$VID-DRV-SHADER-EXT$")},
{RARCH_WC_CORE_REQUESTED_ROTATION, "$CORE-REQ-ROT$", STRLEN_CONST("$CORE-REQ-ROT$")},
{RARCH_WC_VIDEO_ALLOW_CORE_ROTATION, "$VID-ALLOW-CORE-ROT$", STRLEN_CONST("$VID-ALLOW-CORE-ROT$")},
{RARCH_WC_VIDEO_USER_ROTATION, "$VID-USER-ROT$", STRLEN_CONST("$VID-USER-ROT$")},
{RARCH_WC_VIDEO_FINAL_ROTATION, "$VID-FINAL-ROT$", STRLEN_CONST("$VID-FINAL-ROT$")},
{RARCH_WC_SCREEN_ORIENTATION, "$SCREEN-ORIENT$", STRLEN_CONST("$SCREEN-ORIENT$")},
{RARCH_WC_VIEWPORT_ASPECT_ORIENTATION, "$VIEW-ASPECT-ORIENT$", STRLEN_CONST("$VIEW-ASPECT-ORIENT$")},
{RARCH_WC_CORE_ASPECT_ORIENTATION, "$CORE-ASPECT-ORIENT$", STRLEN_CONST("$CORE-ASPECT-ORIENT$")},
{RARCH_WC_PRESET_DIR, "$PRESET-DIR$", STRLEN_CONST("$PRESET-DIR$")},
{RARCH_WC_PRESET, "$PRESET$", STRLEN_CONST("$PRESET$")},
};
int i;
size_t _len;
settings_t *settings; settings_t *settings;
char replaced_path[PATH_MAX_LENGTH]; char replaced_path[PATH_MAX_LENGTH];
if (!strstr(s, RARCH_WILDCARD_DELIMITER)) if (!strstr(s, RARCH_WC_DELIMITER))
return; return;
settings = config_get_ptr(); settings = config_get_ptr();
strlcpy(replaced_path, s, sizeof(replaced_path)); _len = strlcpy(replaced_path, s, sizeof(replaced_path));
/* Step through the wildcards while we can still find the /* Step through the wildcards while we can still find the
* delimiter in the replaced path * delimiter in the replaced path
*/ */
for (i = 0; (i < SHADER_NUM_WILDCARDS) && (strstr(replaced_path, RARCH_WILDCARD_DELIMITER)); i++) for (i = 0; (i < SHADER_NUM_WILDCARDS) && (strstr(replaced_path, RARCH_WC_DELIMITER)); i++)
{ {
/* If the wildcard text is in the path then process it */ /* If the wildcard text is in the path then process it */
if (strstr(replaced_path, wildcard_tokens[i].token_name)) if (strstr(replaced_path, wildcard_tokens[i].token_name))
@ -245,7 +246,7 @@ static void video_shader_replace_wildcards(char *s, size_t len, char *in_preset_
switch (wildcard_tokens[i].token_id) switch (wildcard_tokens[i].token_id)
{ {
case RARCH_WILDCARD_CONTENT_DIR: case RARCH_WC_CONTENT_DIR:
{ {
char content_dir_name[DIR_MAX_LENGTH] = ""; char content_dir_name[DIR_MAX_LENGTH] = "";
const char *rarch_path_basename = path_get(RARCH_PATH_BASENAME); const char *rarch_path_basename = path_get(RARCH_PATH_BASENAME);
@ -261,10 +262,10 @@ static void video_shader_replace_wildcards(char *s, size_t len, char *in_preset_
replace_text[0] = '\0'; replace_text[0] = '\0';
} }
break; break;
case RARCH_WILDCARD_CORE: case RARCH_WC_CORE:
replace_len = strlcpy(replace_text, runloop_state_get_ptr()->system.info.library_name, sizeof(replace_text)); replace_len = strlcpy(replace_text, runloop_state_get_ptr()->system.info.library_name, sizeof(replace_text));
break; break;
case RARCH_WILDCARD_GAME: case RARCH_WC_GAME:
{ {
const char *rarch_path_basename = path_get(RARCH_PATH_BASENAME); const char *rarch_path_basename = path_get(RARCH_PATH_BASENAME);
if (rarch_path_basename) if (rarch_path_basename)
@ -275,10 +276,10 @@ static void video_shader_replace_wildcards(char *s, size_t len, char *in_preset_
replace_text[0] = '\0'; replace_text[0] = '\0';
} }
break; break;
case RARCH_WILDCARD_VIDEO_DRIVER: case RARCH_WC_VIDEO_DRIVER:
replace_len = strlcpy(replace_text, settings->arrays.video_driver, sizeof(replace_text)); replace_len = strlcpy(replace_text, settings->arrays.video_driver, sizeof(replace_text));
break; break;
case RARCH_WILDCARD_CORE_REQUESTED_ROTATION: case RARCH_WC_CORE_REQUESTED_ROTATION:
replace_len = strlcpy(replace_text, "CORE-REQ-ROT-", replace_len = strlcpy(replace_text, "CORE-REQ-ROT-",
sizeof(replace_text)); sizeof(replace_text));
replace_len += snprintf( replace_len += snprintf(
@ -287,7 +288,7 @@ static void video_shader_replace_wildcards(char *s, size_t len, char *in_preset_
"%d", "%d",
retroarch_get_core_requested_rotation() * 90); retroarch_get_core_requested_rotation() * 90);
break; break;
case RARCH_WILDCARD_VIDEO_ALLOW_CORE_ROTATION: case RARCH_WC_VIDEO_ALLOW_CORE_ROTATION:
replace_len = strlcpy(replace_text, "VID-ALLOW-CORE-ROT-O", replace_len = strlcpy(replace_text, "VID-ALLOW-CORE-ROT-O",
sizeof(replace_text)); sizeof(replace_text));
if (settings->bools.video_allow_rotate) if (settings->bools.video_allow_rotate)
@ -297,7 +298,7 @@ static void video_shader_replace_wildcards(char *s, size_t len, char *in_preset_
replace_len += strlcpy(replace_text + replace_len, "FF", replace_len += strlcpy(replace_text + replace_len, "FF",
sizeof(replace_text) - replace_len); sizeof(replace_text) - replace_len);
break; break;
case RARCH_WILDCARD_VIDEO_USER_ROTATION: case RARCH_WC_VIDEO_USER_ROTATION:
replace_len = strlcpy(replace_text, "VID-USER-ROT-", replace_len = strlcpy(replace_text, "VID-USER-ROT-",
sizeof(replace_text)); sizeof(replace_text));
replace_len += snprintf( replace_len += snprintf(
@ -306,7 +307,7 @@ static void video_shader_replace_wildcards(char *s, size_t len, char *in_preset_
"%d", "%d",
settings->uints.video_rotation * 90); settings->uints.video_rotation * 90);
break; break;
case RARCH_WILDCARD_VIDEO_FINAL_ROTATION: case RARCH_WC_VIDEO_FINAL_ROTATION:
replace_len = strlcpy(replace_text, replace_len = strlcpy(replace_text,
"VID-FINAL-ROT-", "VID-FINAL-ROT-",
sizeof(replace_text)); sizeof(replace_text));
@ -316,7 +317,7 @@ static void video_shader_replace_wildcards(char *s, size_t len, char *in_preset_
"%d", "%d",
settings->uints.video_rotation * 90); settings->uints.video_rotation * 90);
break; break;
case RARCH_WILDCARD_SCREEN_ORIENTATION: case RARCH_WC_SCREEN_ORIENTATION:
replace_len = strlcpy(replace_text, replace_len = strlcpy(replace_text,
"SCREEN-ORIENT-", "SCREEN-ORIENT-",
sizeof(replace_text)); sizeof(replace_text));
@ -326,7 +327,7 @@ static void video_shader_replace_wildcards(char *s, size_t len, char *in_preset_
"%d", "%d",
settings->uints.screen_orientation * 90); settings->uints.screen_orientation * 90);
break; break;
case RARCH_WILDCARD_CORE_ASPECT_ORIENTATION: case RARCH_WC_CORE_ASPECT_ORIENTATION:
{ {
int requested_rotation; int requested_rotation;
replace_len = strlcpy(replace_text, replace_len = strlcpy(replace_text,
@ -339,7 +340,7 @@ static void video_shader_replace_wildcards(char *s, size_t len, char *in_preset_
sizeof(replace_text) - replace_len); sizeof(replace_text) - replace_len);
} }
break; break;
case RARCH_WILDCARD_VIEWPORT_ASPECT_ORIENTATION: case RARCH_WC_VIEWPORT_ASPECT_ORIENTATION:
{ {
unsigned viewport_width = 0; unsigned viewport_width = 0;
unsigned viewport_height = 0; unsigned viewport_height = 0;
@ -353,7 +354,7 @@ static void video_shader_replace_wildcards(char *s, size_t len, char *in_preset_
sizeof(replace_text) - replace_len); sizeof(replace_text) - replace_len);
} }
break; break;
case RARCH_WILDCARD_PRESET_DIR: case RARCH_WC_PRESET_DIR:
{ {
char preset_dir_name[DIR_MAX_LENGTH]; char preset_dir_name[DIR_MAX_LENGTH];
fill_pathname_parent_dir_name(preset_dir_name, in_preset_path, sizeof(preset_dir_name)); fill_pathname_parent_dir_name(preset_dir_name, in_preset_path, sizeof(preset_dir_name));
@ -365,7 +366,7 @@ static void video_shader_replace_wildcards(char *s, size_t len, char *in_preset_
replace_text[0] = '\0'; replace_text[0] = '\0';
} }
break; break;
case RARCH_WILDCARD_PRESET: case RARCH_WC_PRESET:
{ {
char preset_name[NAME_MAX_LENGTH]; char preset_name[NAME_MAX_LENGTH];
fill_pathname(preset_name, fill_pathname(preset_name,
@ -377,7 +378,7 @@ static void video_shader_replace_wildcards(char *s, size_t len, char *in_preset_
replace_text[0] = '\0'; replace_text[0] = '\0';
} }
break; break;
case RARCH_WILDCARD_VIDEO_DRIVER_SHADER_EXT: case RARCH_WC_VIDEO_DRIVER_SHADER_EXT:
{ {
gfx_ctx_flags_t flags; gfx_ctx_flags_t flags;
flags.flags = 0; flags.flags = 0;
@ -393,7 +394,7 @@ static void video_shader_replace_wildcards(char *s, size_t len, char *in_preset_
replace_text[0] = '\0'; replace_text[0] = '\0';
} }
break; break;
case RARCH_WILDCARD_VIDEO_DRIVER_PRESET_EXT: case RARCH_WC_VIDEO_DRIVER_PRESET_EXT:
{ {
gfx_ctx_flags_t flags; gfx_ctx_flags_t flags;
flags.flags = 0; flags.flags = 0;
@ -414,11 +415,10 @@ static void video_shader_replace_wildcards(char *s, size_t len, char *in_preset_
break; break;
} }
{ {
char *replace_output = string_replace_substring(replaced_path, char *replace_output = string_replace_substring(
wildcard_tokens[i].token_name, replaced_path, _len,
wildcard_tokens[i].token_size, wildcard_tokens[i].token_name, wildcard_tokens[i].token_size,
replace_text, replace_text, replace_len);
replace_len);
strlcpy(replaced_path, replace_output, sizeof(replaced_path)); strlcpy(replaced_path, replace_output, sizeof(replaced_path));

View File

@ -42,7 +42,7 @@
#define GFX_MAX_FRAME_HISTORY 128 #define GFX_MAX_FRAME_HISTORY 128
#endif #endif
#define RARCH_WILDCARD_DELIMITER "$" #define RARCH_WC_DELIMITER "$"
/** /**
* video_shader_parse_type: * video_shader_parse_type:

View File

@ -35,12 +35,12 @@ struct logiqx_dat
/* List of HTML formatting codes that must /* List of HTML formatting codes that must
* be replaced when parsing XML data */ * be replaced when parsing XML data */
const char *logiqx_dat_html_code_list[][2] = { const char *logiqx_dat_html_code_list[][2] = {
{"&amp;", "&"}, {"&amp;", "&"},
{"&apos;", "'"}, {"&apos;", "'"},
{"&gt;", ">"}, {"&gt;", ">"},
{"&lt;", "<"}, {"&lt;", "<"},
{"&quot;", "\""} {"&quot;", "\""}
}; };
#define LOGIQX_DAT_HTML_CODE_LIST_SIZE 5 #define LOGIQX_DAT_HTML_CODE_LIST_SIZE 5
@ -53,7 +53,7 @@ const char *logiqx_dat_html_code_list[][2] = {
* Also provides access to file size (DAT files can * Also provides access to file size (DAT files can
* be very large, so it is useful to have this information * be very large, so it is useful to have this information
* on hand - i.e. so we can check that the system has * on hand - i.e. so we can check that the system has
* enough free memory to load the file). */ * enough free memory to load the file). */
bool logiqx_dat_path_is_valid(const char *path, uint64_t *file_size) bool logiqx_dat_path_is_valid(const char *path, uint64_t *file_size)
{ {
const char *file_ext = NULL; const char *file_ext = NULL;
@ -254,7 +254,7 @@ static void logiqx_dat_sanitise_element_data(
if (strstr(sanitised_data, find_string)) if (strstr(sanitised_data, find_string))
{ {
char *tmp = string_replace_substring( char *tmp = string_replace_substring(
sanitised_data, sanitised_data, strlen(sanitised_data),
find_string, strlen(find_string), find_string, strlen(find_string),
replace_string, strlen(replace_string)); replace_string, strlen(replace_string));

View File

@ -159,8 +159,9 @@ char *string_to_lower(char *s);
char *string_ucwords(char *s); char *string_ucwords(char *s);
char *string_replace_substring(const char *in, char *string_replace_substring(
const char *pattern, size_t pattern_len, const char *in, size_t in_len,
const char *pattern, size_t pattern_len,
const char *replacement, size_t replacement_len); const char *replacement, size_t replacement_len);
/** /**

View File

@ -77,8 +77,9 @@ char *string_ucwords(char *s)
return s; return s;
} }
char *string_replace_substring(const char *in, char *string_replace_substring(
const char *pattern, size_t pattern_len, const char *in, size_t in_len,
const char *pattern, size_t pattern_len,
const char *replacement, size_t replacement_len) const char *replacement, size_t replacement_len)
{ {
size_t outlen; size_t outlen;
@ -101,7 +102,7 @@ char *string_replace_substring(const char *in,
numhits++; numhits++;
} }
outlen = strlen(in) - pattern_len*numhits + replacement_len*numhits; outlen = in_len - pattern_len * numhits + replacement_len*numhits;
if (!(out = (char *)malloc(outlen+1))) if (!(out = (char *)malloc(outlen+1)))
return NULL; return NULL;

View File

@ -42,7 +42,7 @@ int msg_hash_get_help_enum(enum msg_hash_enums msg, char *s, size_t len)
{ {
int ret = msg_hash_get_help_us_enum(msg, s, len); int ret = msg_hash_get_help_us_enum(msg, s, len);
/* Replace line-breaks with "empty line-breaks" for readability */ /* Replace line-breaks with "empty line-breaks" for readability */
const char *temp = string_replace_substring(s, const char *temp = string_replace_substring(s, strlen(s),
"\n", STRLEN_CONST("\n"), "\n", STRLEN_CONST("\n"),
"\n \n", STRLEN_CONST("\n \n")); "\n \n", STRLEN_CONST("\n \n"));
@ -972,6 +972,6 @@ const char *msg_hash_get_wideglyph_str(void)
break; break;
} }
#endif #endif
return NULL; return NULL;
} }