From: fredrik Date: Sat, 5 Nov 2005 20:35:09 +0000 (+0000) Subject: Generalize transargs into wcspairs. X-Git-Tag: 0.1~102 X-Git-Url: http://dolda2000.com/gitweb/?p=doldaconnect.git;a=commitdiff_plain;h=9ec790e8b81566b934c056c56ece342ba0a32873 Generalize transargs into wcspairs. git-svn-id: svn+ssh://svn.dolda2000.com/srv/svn/repos/src/doldaconnect@477 959494ce-11ee-0310-bf91-de5d638817bd --- diff --git a/daemon/transfer.c b/daemon/transfer.c index d335b64..b2be0fe 100644 --- a/daemon/transfer.c +++ b/daemon/transfer.c @@ -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; diff --git a/daemon/transfer.h b/daemon/transfer.h index 16cbd49..abdbe9e 100644 --- a/daemon/transfer.h +++ b/daemon/transfer.h @@ -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); diff --git a/daemon/ui.c b/daemon/ui.c index 09a6dcf..7d74fb6 100644 --- a/daemon/ui.c +++ b/daemon/ui.c @@ -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); } } diff --git a/daemon/utils.c b/daemon/utils.c index 8e38459..1175970 100644 --- a/daemon/utils.c +++ b/daemon/utils.c @@ -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); +} diff --git a/daemon/utils.h b/daemon/utils.h index b8b6803..812ccec 100644 --- a/daemon/utils.h +++ b/daemon/utils.h @@ -24,6 +24,12 @@ #include #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))