1 #include "config.h"
2
3 #include <razorback/debug.h>
4 #include <razorback/log.h>
5 #include <razorback/list.h>
6 #include <razorback/string_list.h>
7 #include <stdlib.h>
8 #include <string.h>
9
10
11
12 static int
StringList_ItemSize(const char * item,uint32_t * counter)13 StringList_ItemSize(const char *item, uint32_t *counter)
14 {
15 *counter += strlen(item)+1;
16 return LIST_EACH_OK;
17 }
18
19 SO_PUBLIC uint32_t
StringList_Size(struct List * list)20 StringList_Size (struct List * list)
21 {
22 uint32_t size = 0;
23
24 ASSERT (list != NULL);
25 if (list == NULL)
26 return 0;
27
28 List_ForEach(list, (int (*)(void *, void *))StringList_ItemSize, &size);
29
30 return size + sizeof (uint32_t);
31 }
32
33 static int
String_KeyCmp(void * a,void * id)34 String_KeyCmp(void *a, void *id)
35 {
36 char *item = a;
37 char *key = id;
38 if (key == item)
39 return 0;
40
41 return strcmp(item,key);
42 }
43
44 static int
String_Cmp(void * a,void * b)45 String_Cmp(void *a, void *b)
46 {
47 char *iA = a;
48 char *iB = b;
49 if (a == b)
50 return 0;
51 return strcmp(iA, iB);
52 }
53
54 static void
String_Delete(void * a)55 String_Delete(void *a)
56 {
57 char *item = a;
58 free(item);
59 }
60
61 void *
String_Clone(void * o)62 String_Clone(void *o)
63 {
64 char *item;
65 char *orig = o;
66 if ((item = calloc(strlen(orig)+1, sizeof(char))) == NULL)
67 return NULL;
68 strcpy (item, orig);
69 return item;
70 }
71
72
73 SO_PUBLIC struct List *
StringList_Create(void)74 StringList_Create (void)
75 {
76 return List_Create(LIST_MODE_GENERIC,
77 String_Cmp,
78 String_KeyCmp,
79 String_Delete,
80 String_Clone, NULL, NULL);
81 }
82
83 SO_PUBLIC bool
StringList_Add(struct List * p_pList,const char * string)84 StringList_Add (struct List *p_pList, const char *string)
85 {
86 char *new;
87 if (( new = calloc(strlen(string)+1, sizeof(char))) == NULL)
88 return false;
89 strcpy(new,string);
90 List_Push(p_pList, new);
91 return true;
92 }
93
94