Dolda2000 GitWeb
/
doldaconnect.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fixed a bug in btreenext.
[doldaconnect.git]
/
daemon
/
fnet-dc.c
diff --git
a/daemon/fnet-dc.c
b/daemon/fnet-dc.c
index
c4d81c6
..
87671aa
100644
(file)
--- a/
daemon/fnet-dc.c
+++ b/
daemon/fnet-dc.c
@@
-99,12
+99,17
@@
struct qcommand
char *string;
};
char *string;
};
+struct qcmdqueue
+{
+ struct qcommand *f, *l;
+};
+
struct dchub
{
struct socket *sk;
char *inbuf;
size_t inbufdata, inbufsize;
struct dchub
{
struct socket *sk;
char *inbuf;
size_t inbufdata, inbufsize;
- struct qc
ommand *
queue;
+ struct qc
mdqueue
queue;
int extended, dcppemu;
char *charset;
char *nativename;
int extended, dcppemu;
char *charset;
char *nativename;
@@
-130,7
+135,7
@@
struct dcpeer
off_t curread, totalsize;
int freeing;
struct timer *timeout;
off_t curread, totalsize;
int freeing;
struct timer *timeout;
- struct qc
ommand *
queue;
+ struct qc
mdqueue
queue;
struct transfer *transfer;
int state;
int ptclose; /* Close after transfer is complete */
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);
}
return(ep);
}
-static struct qcommand *newqcmd(struct qc
ommand *
*queue, char *string)
+static struct qcommand *newqcmd(struct qc
mdqueue
*queue, char *string)
{
struct qcommand *new;
{
struct qcommand *new;
- while(*queue != NULL)
- queue = &(*queue)->next;
new = smalloc(sizeof(*new));
new->string = sstrdup(string);
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);
}
return(new);
}
-static struct qcommand *ulqcmd(struct qc
ommand *
*queue)
+static struct qcommand *ulqcmd(struct qc
mdqueue
*queue)
{
struct qcommand *qcmd;
{
struct qcommand *qcmd;
- if((qcmd =
*queue
) == NULL)
+ if((qcmd =
queue->f
) == NULL)
return(NULL);
return(NULL);
- *queue = qcmd->next;
+ if((queue->f = qcmd->next) == NULL)
+ queue->l = NULL;
return(qcmd);
}
return(qcmd);
}
@@
-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 dchub *hub;
char *p;
wchar_t *buf;
- struct fnetpeer *peer
, *npeer
;
+ struct fnetpeer *peer;
hub = fn->data;
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)
{
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;
}
}
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);
}
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;
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)
{
peer->flags.b.op = 0;
while((p = strstr(args, "$$")) != NULL)
{