00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include <stdlib.h>
00023 #include <stdarg.h>
00024 #include <unistd.h>
00025 #include <string.h>
00026
00027 #include "xmmsc/xmmsc_strlist.h"
00028
00029
00030
00031
00032
00033
00034
00035
00036 char **
00037 xmms_valist_to_strlist (const char *first, va_list ap)
00038 {
00039 const char *cur = first;
00040 char **ret = NULL;
00041 int i, size = sizeof (char *);
00042
00043 if (first == NULL)
00044 abort ();
00045
00046 for (i = 0; cur != NULL; i++) {
00047 size += sizeof (char *);
00048 ret = realloc (ret, size);
00049 ret[i] = strdup (cur);
00050 cur = va_arg (ap, char *);
00051 }
00052 ret[i] = NULL;
00053
00054 return ret;
00055 }
00056
00057
00058
00059
00060
00061
00062
00063
00064 char **
00065 xmms_vargs_to_strlist (const char *first, ...)
00066 {
00067 va_list ap;
00068 char **ret = NULL;
00069
00070 if (first == NULL)
00071 abort ();
00072
00073 va_start (ap, first);
00074 ret = xmms_valist_to_strlist (first, ap);
00075 va_end (ap);
00076
00077 return ret;
00078 }
00079
00080
00081
00082
00083
00084
00085
00086 int
00087 xmms_strlist_len (char **data)
00088 {
00089 int i;
00090 if (data == NULL)
00091 abort ();
00092 for (i = 0; data[i] != NULL; i++);
00093 return i;
00094 }
00095
00096
00097
00098
00099
00100 void
00101 xmms_strlist_destroy (char **data)
00102 {
00103 int i;
00104 if (data == NULL)
00105 abort ();
00106 for (i = 0; data[i] != NULL; i++) {
00107 free (data[i]);
00108 }
00109 free (data);
00110 }
00111
00112
00113
00114
00115
00116
00117
00118 char **
00119 xmms_strlist_prepend_copy (char **data, char *newstr) {
00120 int i;
00121 char **ret;
00122
00123 ret = malloc ((xmms_strlist_len (data) + 2) * sizeof (char *));
00124 ret[0] = strdup (newstr);
00125
00126 for (i = 0; data[i] != NULL; i++)
00127 ret[i+1] = strdup (data[i]);
00128 ret[i+1] = NULL;
00129
00130 return ret;
00131 }
00132
00133
00134
00135
00136
00137
00138 char **
00139 xmms_strlist_copy (char **strlist)
00140 {
00141 char **ret;
00142 int i;
00143
00144 ret = malloc ((xmms_strlist_len (strlist) + 1) * sizeof (char *));
00145
00146 for (i = 0; strlist[i] != NULL; i++) {
00147 ret[i] = strdup (strlist[i]);
00148 }
00149
00150 ret[i] = NULL;
00151
00152 return ret;
00153 }