Skip to content

Commit 9bcef4d

Browse files
committed
(task_content) content_file_override_set - don't use strtok_r,
no strlen
1 parent dec741f commit 9bcef4d

1 file changed

Lines changed: 41 additions & 39 deletions

File tree

tasks/task_content.c

Lines changed: 41 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -216,58 +216,60 @@ bool content_file_override_set(
216216
{
217217
size_t i;
218218
content_state_t *p_content = content_state_get_ptr();
219-
220219
if (!p_content || !overrides)
221220
return false;
222-
223221
/* Free any existing override list */
224222
content_file_override_free(p_content);
225-
226223
for (i = 0; overrides[i].extensions; i++)
227224
{
228-
char *tok, *save = NULL;
229-
char *overrides_ext_cpy = strdup(overrides[i].extensions);
230-
231-
/* Get list of extensions affected by overrides */
232-
for ( tok = strtok_r(overrides_ext_cpy, "|", &save); tok;
233-
tok = strtok_r(NULL, "|", &save))
225+
const char *ptr = overrides[i].extensions;
226+
while (*ptr)
234227
{
235-
size_t num_entries;
236-
const char *ext = tok;
228+
char ext[32];
229+
size_t num_entries, _len;
237230
content_file_override_t *override = NULL;
238-
239-
/* Check whether extension has already been
240-
* registered */
241-
if ( string_is_empty(ext)
242-
|| content_file_override_get_ext(p_content, ext, NULL))
243-
continue;
244-
245-
/* Add current override to the list */
246-
num_entries = RBUF_LEN(p_content->content_override_list);
247-
248-
if (!RBUF_TRYFIT(p_content->content_override_list,
249-
num_entries + 1))
231+
/* Find next '|' delimiter or end of string */
232+
const char *delim = ptr;
233+
while (*delim && *delim != '|')
234+
delim++;
235+
_len = (size_t)(delim - ptr);
236+
237+
/* Extract extension token */
238+
if (_len > 0 && _len < sizeof(ext))
250239
{
251-
free(overrides_ext_cpy);
252-
return false;
253-
}
240+
memcpy(ext, ptr, _len);
241+
ext[_len] = '\0';
254242

255-
RBUF_RESIZE(p_content->content_override_list,
256-
num_entries + 1);
257-
258-
RARCH_LOG("[Content Override] File Extension: '%3s' - need_fullpath: %s, persistent_data: %s\n",
259-
ext, overrides[i].need_fullpath ? "TRUE" : "FALSE",
260-
overrides[i].persistent_data ? "TRUE" : "FALSE");
243+
/* Check whether extension has already been
244+
* registered */
245+
if (!content_file_override_get_ext(p_content, ext, NULL))
246+
{
247+
/* Add current override to the list */
248+
num_entries = RBUF_LEN(p_content->content_override_list);
249+
if (!RBUF_TRYFIT(p_content->content_override_list,
250+
num_entries + 1))
251+
return false;
252+
253+
RBUF_RESIZE(p_content->content_override_list,
254+
num_entries + 1);
255+
256+
RARCH_LOG("[Content Override] File Extension: '%3s' - need_fullpath: %s, persistent_data: %s\n",
257+
ext, overrides[i].need_fullpath ? "TRUE" : "FALSE",
258+
overrides[i].persistent_data ? "TRUE" : "FALSE");
259+
260+
override = &p_content->content_override_list[num_entries];
261+
override->ext = strdup(ext);
262+
override->need_fullpath = overrides[i].need_fullpath;
263+
override->persistent_data = overrides[i].persistent_data;
264+
}
265+
}
261266

262-
override = &p_content->content_override_list[num_entries];
263-
override->ext = strdup(ext);
264-
override->need_fullpath = overrides[i].need_fullpath;
265-
override->persistent_data = overrides[i].persistent_data;
267+
/* Advance past token and delimiter */
268+
ptr += _len;
269+
if (*ptr == '|')
270+
ptr++;
266271
}
267-
268-
free(overrides_ext_cpy);
269272
}
270-
271273
return true;
272274
}
273275

0 commit comments

Comments
 (0)