/*
stringlists: creation of paired string lists for one-time consumption
copyright 2015 by the mpg123 project
free software under the terms of the LGPL 2.1
see COPYING and AUTHORS files in distribution or http://mpg123.org
initially written by Thomas Orgis
Thomas did not want to introduce a list type complete with management
functions just for returning driver module lists.
*/
#include "compat.h"
/* Construction helper for paired string lists.
Returns 0 on success. */
int stringlists_add( char ***alist, char ***blist
, const char *atext, const char *btext, int *count)
{
char *atextcopy = NULL;
char *btextcopy = NULL;
char **morealist = NULL;
char **moreblist = NULL;
/* If one of these succeeded, the old memory is gone, so always overwrite
the old pointer, worst case is wasted but not leaked memory in an
out-of-memory situation. */
if((morealist = safe_realloc(*alist, sizeof(char*)*(*count+1))))
*alist = morealist;
if((moreblist = safe_realloc(*blist, sizeof(char*)*(*count+1))))
*blist = moreblist;
if(!morealist || !moreblist)
return -1;
if(
(atextcopy = compat_strdup(atext))
&& (btextcopy = compat_strdup(btext))
)
{
(*alist)[*count] = atextcopy;
(*blist)[*count] = btextcopy;
++*count;
return 0;
}
else
{
free(atextcopy);
return -1;
}
}