Move stirng_list_clone to libretro-common

This commit is contained in:
twinaphex 2019-06-09 06:10:28 +02:00
parent aea55f9c2d
commit 77e7bc7a1c
3 changed files with 48 additions and 36 deletions

View File

@ -155,6 +155,8 @@ void string_list_join_concat(char *buffer, size_t size,
void string_list_set(struct string_list *list, unsigned idx,
const char *str);
struct string_list *string_list_clone(const struct string_list *src);
RETRO_END_DECLS
#endif

View File

@ -315,3 +315,49 @@ bool string_list_find_elem_prefix(const struct string_list *list,
return false;
}
struct string_list *string_list_clone(
const struct string_list *src)
{
unsigned i;
struct string_list_elem *elems = NULL;
struct string_list *dest = (struct string_list*)
calloc(1, sizeof(struct string_list));
if (!dest)
return NULL;
dest->size = src->size;
dest->cap = src->cap;
if (dest->cap < dest->size)
dest->cap = dest->size;
elems = (struct string_list_elem*)
calloc(dest->cap, sizeof(struct string_list_elem));
if (!elems)
{
free(dest);
return NULL;
}
dest->elems = elems;
for (i = 0; i < src->size; i++)
{
const char *_src = src->elems[i].data;
size_t len = _src ? strlen(_src) : 0;
dest->elems[i].data = NULL;
dest->elems[i].attr = src->elems[i].attr;
if (len != 0)
{
char *result = (char*)malloc(len + 1);
strcpy(result, _src);
dest->elems[i].data = result;
}
}
return dest;
}

View File

@ -45,42 +45,6 @@ static struct retro_game_info* clone_retro_game_info(const
return dest;
}
static struct string_list *string_list_clone(
const struct string_list *src)
{
unsigned i;
struct string_list_elem *elems = NULL;
struct string_list *dest = (struct string_list*)
calloc(1, sizeof(struct string_list));
if (!dest)
return NULL;
dest->size = src->size;
dest->cap = src->cap;
if (dest->cap < dest->size)
dest->cap = dest->size;
elems = (struct string_list_elem*)
calloc(dest->cap, sizeof(struct string_list_elem));
if (!elems)
{
free(dest);
return NULL;
}
dest->elems = elems;
for (i = 0; i < src->size; i++)
{
dest->elems[i].data = strcpy_alloc(src->elems[i].data);
dest->elems[i].attr = src->elems[i].attr;
}
return dest;
}
#if 0
/* for cloning the Special field, however, attempting
* to use this feature crashes retroarch */