Generalize transargs into wcspairs.
authorfredrik <fredrik@959494ce-11ee-0310-bf91-de5d638817bd>
Sat, 5 Nov 2005 20:35:09 +0000 (20:35 +0000)
committerfredrik <fredrik@959494ce-11ee-0310-bf91-de5d638817bd>
Sat, 5 Nov 2005 20:35:09 +0000 (20:35 +0000)
git-svn-id: svn+ssh://svn.dolda2000.com/srv/svn/repos/src/doldaconnect@477 959494ce-11ee-0310-bf91-de5d638817bd

daemon/transfer.c
daemon/transfer.h
daemon/ui.c
daemon/utils.c
daemon/utils.h

index d335b64..b2be0fe 100644 (file)
@@ -46,8 +46,6 @@ GCBCHAIN(newtransfercb, struct transfer *);
 
 void freetransfer(struct transfer *transfer)
 {
-    struct transarg *ta;
-    
     if(transfer == transfers)
        transfers = transfer->next;
     if(transfer->next != NULL)
@@ -60,13 +58,8 @@ void freetransfer(struct transfer *transfer)
     CBCHAINFREE(transfer, trans_p);
     CBCHAINFREE(transfer, trans_destroy);
     CBCHAINFREE(transfer, trans_filterout);
-    while((ta = transfer->args) != NULL)
-    {
-       transfer->args = ta->next;
-       free(ta->rec);
-       free(ta->val);
-       free(ta);
-    }
+    while(transfer->args != NULL)
+       freewcspair(transfer->args, &transfer->args);
     if(transfer->filter != -1)
        killfilter(transfer);
     if(transfer->etimer != NULL)
@@ -128,17 +121,6 @@ struct transfer *newtransfer(void)
     return(new);
 }
 
-void transferaddarg(struct transfer *transfer, wchar_t *rec, wchar_t *val)
-{
-    struct transarg *ta;
-    
-    ta = smalloc(sizeof(*ta));
-    ta->rec = swcsdup(rec);
-    ta->val = swcsdup(val);
-    ta->next = transfer->args;
-    transfer->args = ta;
-}
-
 void transferattach(struct transfer *transfer, struct transferiface *iface, void *data)
 {
     if(transfer->iface != NULL)
@@ -623,7 +605,7 @@ int forkfilter(struct transfer *transfer)
     char **argv;
     size_t argvsize, argvdata;
     struct socket *insock, *outsock;
-    struct transarg *ta;
+    struct wcspair *ta;
     char *rec, *val;
 
     wfilename = transfer->path;
@@ -697,7 +679,7 @@ int forkfilter(struct transfer *transfer)
        }
        for(ta = transfer->args; ta != NULL; ta = ta->next)
        {
-           if((rec = icwcstombs(ta->rec, NULL)) == NULL)
+           if((rec = icwcstombs(ta->key, NULL)) == NULL)
                continue;
            if((val = icwcstombs(ta->val, NULL)) == NULL)
                continue;
index 16cbd49..abdbe9e 100644 (file)
@@ -50,13 +50,6 @@ struct transferiface
     void (*wantdata)(struct transfer *transfer, void *data);
 };
 
-struct transarg
-{
-    struct transarg *next;
-    wchar_t *rec;
-    wchar_t *val;
-};
-
 struct transfer
 {
     struct transfer *next, *prev;
@@ -84,7 +77,7 @@ struct transfer
     struct fnetnode *fn;
     void *ifacedata;
     struct socket *localend;
-    struct transarg *args;
+    struct wcspair *args;
     pid_t filter;
     struct authhandle *auth;
     struct socket *filterout;
@@ -116,7 +109,6 @@ void transferdetach(struct transfer *transfer);
 void resettransfer(struct transfer *transfer);
 void transfersetlocalend(struct transfer *transfer, struct socket *sk);
 void *transfergetdata(struct transfer *transfer, size_t *size);
-void transferaddarg(struct transfer *transfer, wchar_t *rec, wchar_t *val);
 int forkfilter(struct transfer *transfer);
 void transferputdata(struct transfer *transfer, void *buf, size_t size);
 size_t transferdatasize(struct transfer *transfer);
index 09a6dcf..7d74fb6 100644 (file)
@@ -745,7 +745,7 @@ static void cmd_download(struct socket *sk, struct uidata *data, int argc, wchar
            {
                transfersethash(transfer, parsehash(argv[i + 1]));
            } else {
-               transferaddarg(transfer, argv[i], argv[i + 1]);
+               newwcspair(argv[i], argv[i + 1], &transfer->args);
            }
        }
     }
@@ -1164,7 +1164,7 @@ static void cmd_filtercmd(struct socket *sk, struct uidata *data, int argc, wcha
 static void cmd_lstrarg(struct socket *sk, struct uidata *data, int argc, wchar_t **argv)
 {
     struct transfer *transfer;
-    struct transarg *ta;
+    struct wcspair *ta;
     
     haveargs(2);
     havepriv(PERM_TRANS);
@@ -1183,7 +1183,7 @@ static void cmd_lstrarg(struct socket *sk, struct uidata *data, int argc, wchar_
        sq(sk, 0, L"201", L"Transfer has no arguments", NULL);
     } else {
        for(ta = transfer->args; ta != NULL; ta = ta->next)
-           sq(sk, ta->next != NULL, L"200", L"%%ls", ta->rec, L"%%ls", ta->val, NULL);
+           sq(sk, ta->next != NULL, L"200", L"%%ls", ta->key, L"%%ls", ta->val, NULL);
     }
 }
 
index 8e38459..1175970 100644 (file)
@@ -745,3 +745,35 @@ 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);
+}
index b8b6803..812ccec 100644 (file)
 #include <malloc.h>
 #include "log.h"
 
+struct wcspair {
+    struct wcspair *next;
+    wchar_t *key;
+    wchar_t *val;
+};
+
 /* "Safe" functions */
 #define smalloc(size) ({void *__result__; ((__result__ = malloc(size)) == NULL)?({LOGOOM(size); abort(); (void *)0;}):__result__;})
 #define srealloc(ptr, size) ({void *__result__; ((__result__ = realloc((ptr), (size))) == NULL)?({LOGOOM(size); abort(); (void *)0;}):__result__;})
@@ -59,7 +65,6 @@ char *sprintf2(char *format, ...)
 #if defined(__GNUC__) && 0
     __attribute__ ((format (printf, 1, 2)))
 #endif
-
 ;
 wchar_t *vswprintf2(wchar_t *format, va_list al);
 wchar_t *swprintf2(wchar_t *format, ...);
@@ -84,6 +89,8 @@ char *base32decode(char *data, size_t *datalen);
 void _freeparr(void **arr);
 int _parrlen(void **arr);
 char *findfile(char *gname, char *uname, char *homedir);
+struct wcspair *newwcspair(wchar_t *key, wchar_t *val, struct wcspair **list);
+void freewcspair(struct wcspair *pair, struct wcspair **list);
 
 #define sizebuf(b, bs, rs, es, a) _sizebuf((void **)(b), (bs), (rs), (es), (a))
 #define sizebuf2(b, rs, a) _sizebuf((void **)(&(b)), &(b ## size), (rs), sizeof(*(b)), (a))