Add wpfind.
[doldaconnect.git] / daemon / utils.c
index 216ae77..8f66370 100644 (file)
@@ -533,6 +533,8 @@ char *base64decode(char *data, size_t *datalen)
        c = (int)(unsigned char)*data;
        if(c == '=')
            break;
+       if(c == '\n')
+           continue;
        if(base64rev[c] == -1)
        {
            if(buf != NULL)
@@ -630,6 +632,8 @@ char *base32decode(char *data, size_t *datalen)
        c = (int)(unsigned char)*data;
        if(c == '=')
            break;
+       if(c == '\n')
+           continue;
        if(base32rev[c] == -1)
        {
            if(buf != NULL)
@@ -676,13 +680,19 @@ int _parrlen(void **arr)
 
 char *getetcpath(char *binpath)
 {
+    int f;
     char *etcpath, *p;
     size_t etcpathsize, etcpathdata;
 
     etcpath = NULL;
     etcpathsize = etcpathdata = 0;
+    f = 1;
     do
     {
+       if(f)
+           f = 0;
+       else
+           binpath++;
        for(p = binpath; *p && (*p != ':'); p++);
        for(; (p >= binpath) && (*p != '/'); p--);
        if(p >= binpath)
@@ -735,3 +745,45 @@ char *findfile(char *gname, char *uname, char *homedir)
     }
     return(NULL);
 }
+
+struct wcspair *newwcspair(wchar_t *key, wchar_t *val, struct wcspair **list)
+{
+    struct wcspair *pair;
+    
+    pair = smalloc(sizeof(*pair));
+    memset(pair, 0, sizeof(*pair));
+    if(key != NULL)
+       pair->key = swcsdup(key);
+    if(val != NULL)
+       pair->val = swcsdup(val);
+    if(list == NULL)
+    {
+       pair->next = NULL;
+    } else {
+       pair->next = *list;
+       *list = pair;
+    }
+    return(pair);
+}
+
+void freewcspair(struct wcspair *pair, struct wcspair **list)
+{
+    if(list != NULL)
+    {
+       if(*list == pair)
+           *list = pair->next;
+    }
+    free(pair->key);
+    free(pair->val);
+    free(pair);
+}
+
+wchar_t *wpfind(struct wcspair *list, wchar_t *key)
+{
+    for(; list != NULL; list = list->next)
+    {
+       if(!wcscmp(list->key, key))
+           return(list->val);
+    }
+    return(NULL);
+}