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