X-Git-Url: http://git.dolda2000.com/gitweb/?a=blobdiff_plain;f=daemon%2Ftransfer.c;h=066febca6905662b51b2f941453e6cabec8cb77d;hb=a8e6bb8183d91e91e4244d55cc24829db4ce307d;hp=0fea334ddb0c8feb7937d68c81a57f64b82d6b56;hpb=5b193db06069c0d85b1f90f2df23a7091edc8999;p=doldaconnect.git diff --git a/daemon/transfer.c b/daemon/transfer.c index 0fea334..066febc 100644 --- a/daemon/transfer.c +++ b/daemon/transfer.c @@ -80,6 +80,8 @@ void freetransfer(struct transfer *transfer) free(transfer->filterbuf); if(transfer->hash != NULL) freehash(transfer->hash); + if(transfer->exitstatus != NULL) + free(transfer->exitstatus); if(transfer->localend != NULL) { transfer->localend->readcb = NULL; @@ -566,6 +568,17 @@ static char *findfilter(struct passwd *pwd) return(NULL); } +static void handletranscmd(struct transfer *transfer, wchar_t *cmd, wchar_t *arg) +{ + if(!wcscmp(cmd, L"status")) { + if(arg == NULL) + arg = L""; + if(transfer->exitstatus != NULL) + free(transfer->exitstatus); + transfer->exitstatus = swcsdup(arg); + } +} + static void filterread(struct socket *sk, struct transfer *transfer) { char *buf, *p, *p2; @@ -587,8 +600,9 @@ static void filterread(struct socket *sk, struct transfer *transfer) if(p2 != NULL) { if((arg = icmbstowcs(p2, NULL)) == NULL) - flog(LOG_WARNING, "filter sent a string which could not be converted into the local charset: %s: %s", transfer->filterbuf, strerror(errno)); + flog(LOG_WARNING, "filter sent a string which could not be converted into the local charset: %s: %s", p2, strerror(errno)); } + handletranscmd(transfer, cmd, arg); CBCHAINDOCB(transfer, trans_filterout, transfer, cmd, arg); if(arg != NULL) free(arg);