commit 4beaed1b0e6259e41b7966460afecc874b0a76b3
parent f0356de610ab5793c27f1f43f6f507138dd00a04
Author: Kris Maglione <bsdaemon@wmii.de>
Date: Thu, 8 Jun 2006 16:44:23 -0400
Fixed some linked list issues
Diffstat:
1 file changed, 14 insertions(+), 15 deletions(-)
diff --git a/libixp/server.c b/libixp/server.c
@@ -52,27 +52,24 @@ ixp_server_close_conn(IXPConn *c)
static void
prepare_select(IXPServer *s)
{
- IXPConn *c;
+ IXPConn **c;
FD_ZERO(&s->rd);
- for(c=s->conn; c; c=c->next) {
- if(s->maxfd < c->fd)
- s->maxfd = c->fd;
- if(c->read)
- FD_SET(c->fd, &s->rd);
+ for(c=&s->conn; *c; *c && (c=&(*c)->next)) {
+ if(s->maxfd < (*c)->fd)
+ s->maxfd = (*c)->fd;
+ if((*c)->read)
+ FD_SET((*c)->fd, &s->rd);
}
}
static void
handle_conns(IXPServer *s)
{
- IXPConn *c = s->conn, *n;
- while(c) {
- n = c->next;
- if(FD_ISSET(c->fd, &s->rd) && c->read)
+ IXPConn **c;
+ for(c=&s->conn; *c; *c && (c=&(*c)->next))
+ if(FD_ISSET((*c)->fd, &s->rd) && (*c)->read)
/* call read handler */
- c->read(c);
- c = n;
- }
+ (*c)->read(*c);
}
char *
@@ -148,8 +145,10 @@ ixp_server_respond_error(IXPConn *c, Fcall *fcall, char *errstr)
void
ixp_server_close(IXPServer *s)
{
- IXPConn *c;
- for(c=s->conn; c; c=c->next)
+ IXPConn *c, *next;
+ for(c=s->conn; c; c=next) {
+ next=c->next;
if(c->close)
c->close(c);
+ }
}