X-Git-Url: http://dolda2000.com/gitweb/?a=blobdiff_plain;f=daemon%2Ffnet-dc.c;h=87671aaa3ce041600feb0d292a36b9aa4cbbce6b;hb=0e238ce61a9f8ca240e0081ca1121616d3373030;hp=d93402529956dc73474bdcf3ab6493d8572fb4e6;hpb=dcf7a1a214150f84d51159c9c679b7697cb05298;p=doldaconnect.git diff --git a/daemon/fnet-dc.c b/daemon/fnet-dc.c index d934025..87671aa 100644 --- a/daemon/fnet-dc.c +++ b/daemon/fnet-dc.c @@ -99,12 +99,17 @@ struct qcommand char *string; }; +struct qcmdqueue +{ + struct qcommand *f, *l; +}; + struct dchub { struct socket *sk; char *inbuf; size_t inbufdata, inbufsize; - struct qcommand *queue; + struct qcmdqueue queue; int extended, dcppemu; char *charset; char *nativename; @@ -130,7 +135,7 @@ struct dcpeer off_t curread, totalsize; int freeing; struct timer *timeout; - struct qcommand *queue; + struct qcmdqueue queue; struct transfer *transfer; int state; int ptclose; /* Close after transfer is complete */ @@ -376,26 +381,29 @@ static struct dcexppeer *expectpeer(char *nick, struct fnetnode *fn) return(ep); } -static struct qcommand *newqcmd(struct qcommand **queue, char *string) +static struct qcommand *newqcmd(struct qcmdqueue *queue, char *string) { struct qcommand *new; - while(*queue != NULL) - queue = &(*queue)->next; new = smalloc(sizeof(*new)); new->string = sstrdup(string); - new->next = *queue; - *queue = new; + new->next = NULL; + if(queue->l == NULL) + queue->f = new; + else + queue->l->next = new; + queue->l = new; return(new); } -static struct qcommand *ulqcmd(struct qcommand **queue) +static struct qcommand *ulqcmd(struct qcmdqueue *queue) { struct qcommand *qcmd; - if((qcmd = *queue) == NULL) + if((qcmd = queue->f) == NULL) return(NULL); - *queue = qcmd->next; + if((queue->f = qcmd->next) == NULL) + queue->l = NULL; return(qcmd); } @@ -641,7 +649,7 @@ static int trresumecb(struct transfer *transfer, wchar_t *cmd, wchar_t *arg, str flog(LOG_WARNING, "filter returned no position for \"resume\" on transfer %i", transfer->id); freedcpeer(peer); } else { - transfer->curpos = wcstol(arg, NULL, 10); + transfer->curpos = wcstoll(arg, NULL, 10); peer->hascurpos = 1; requestfile(peer); } @@ -905,10 +913,10 @@ static void cmd_nicklist(struct socket *sk, struct fnetnode *fn, char *cmd, char struct dchub *hub; char *p; wchar_t *buf; - struct fnetpeer *peer, *npeer; + struct fnetpeer *peer; hub = fn->data; - for(peer = fn->peers; peer != NULL; peer = peer->next) + for(peer = btreeiter(fn->peers); peer != NULL; peer = btreeiter(NULL)) peer->flags.b.delete = 1; while((p = strstr(args, "$$")) != NULL) { @@ -924,12 +932,7 @@ static void cmd_nicklist(struct socket *sk, struct fnetnode *fn, char *cmd, char } args = p + 2; } - for(peer = fn->peers; peer != NULL; peer = npeer) - { - npeer = peer->next; - if(peer->flags.b.delete) - fnetdelpeer(peer); - } + fnetpeerdm(fn); hubhandleaction(sk, fn, cmd, args); } @@ -941,7 +944,7 @@ static void cmd_oplist(struct socket *sk, struct fnetnode *fn, char *cmd, char * struct fnetpeer *peer; hub = fn->data; - for(peer = fn->peers; peer != NULL; peer = peer->next) + for(peer = btreeiter(fn->peers); peer != NULL; peer = btreeiter(NULL)) peer->flags.b.op = 0; while((p = strstr(args, "$$")) != NULL) {