@@ -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