From 04323be88be878706bf1afafcc87dab878d077e3 Mon Sep 17 00:00:00 2001 From: "Anselm R. Garbe" Date: Mon, 3 Apr 2006 16:48:41 +0200 Subject: [PATCH] removed libcext/array.c --- cmd/wm/fs.c | 14 ++++++------ libcext/Makefile | 2 +- libcext/array.c | 44 ------------------------------------- libcext/cext.h | 4 ---- libixp/ixp.h | 10 +++++---- libixp/server.c | 56 ++++++++++++++++++++++++++++-------------------- 6 files changed, 46 insertions(+), 84 deletions(-) delete mode 100644 libcext/array.c diff --git a/cmd/wm/fs.c b/cmd/wm/fs.c index 8a659a3d..7e22a3a7 100644 --- a/cmd/wm/fs.c +++ b/cmd/wm/fs.c @@ -575,8 +575,7 @@ xattach(IXPConn *c, Fcall *fcall) IXPMap *new = cext_emallocz(sizeof(IXPMap)); new->qid = root_qid; new->fid = fcall->fid; - c->map = (IXPMap **)cext_array_attach((void **)c->map, new, - sizeof(IXPMap *), &c->mapsz); + cext_vattach(ixp_map2vector(&c->map), new); fcall->id = RATTACH; fcall->qid = root_qid; ixp_server_respond_fcall(c, fcall); @@ -608,8 +607,7 @@ xwalk(IXPConn *c, Fcall *fcall) if(nwqid == fcall->nwname) { if(fcall->fid != fcall->newfid) { m = cext_emallocz(sizeof(IXPMap)); - c->map = (IXPMap **)cext_array_attach((void **)c->map, m, - sizeof(IXPMap *), &c->mapsz); + cext_vattach(ixp_map2vector(&c->map), m); } m->qid = dir; m->fid = fcall->newfid; @@ -680,7 +678,7 @@ xremove(IXPConn *c, Fcall *fcall) if(type != FsDlabel) return Enoperm; /* clunk */ - cext_array_detach((void **)c->map, m, &c->mapsz); + cext_vdetach(ixp_map2vector(&c->map), m); free(m); switch(type) { case FsDlabel: @@ -1363,7 +1361,7 @@ xclunk(IXPConn *c, Fcall *fcall) update_keys(); else if(type == FsFrules) update_rules(); - cext_array_detach((void **)c->map, m, &c->mapsz); + cext_vdetach(ixp_map2vector(&c->map), m); free(m); fcall->id = RCLUNK; ixp_server_respond_fcall(c, fcall); @@ -1403,8 +1401,8 @@ write_event(char *event) { unsigned int i = 0; - for(i = 0; (i < srv.connsz) && srv.conn[i]; i++) { - IXPConn *c = srv.conn[i]; + for(i = 0; i < srv.conn.size; i++) { + IXPConn *c = srv.conn.data[i]; if(c->is_pending) { /* pending reads on /event only, no qid checking */ IXPMap *m = ixp_server_fid2map(c, c->pending.fid); diff --git a/libcext/Makefile b/libcext/Makefile index e303ef03..992163b3 100644 --- a/libcext/Makefile +++ b/libcext/Makefile @@ -3,7 +3,7 @@ include ../config.mk -SRC = array.c emallocz.c estrdup.c strlcat.c strlcpy.c strtonum.c tokenize.c vector.c +SRC = emallocz.c estrdup.c strlcat.c strlcpy.c strtonum.c tokenize.c vector.c OBJ = ${SRC:.c=.o} diff --git a/libcext/array.c b/libcext/array.c deleted file mode 100644 index 4bc08f71..00000000 --- a/libcext/array.c +++ /dev/null @@ -1,44 +0,0 @@ -/* - * (C)opyright MMIV-MMVI Anselm R. Garbe - * See LICENSE file for license details. - */ - -#include - -#include "cext.h" - -void ** -cext_array_attach(void **array, void *p, unsigned int psize, unsigned int *size) -{ - unsigned int i; - if(!array) { - *size = 2; - array = cext_emallocz(psize * (*size)); - } - for(i = 0; (i < (*size)) && array[i]; i++); - if(i >= (*size)) { - void **tmp = array; - unsigned int newsz = (*size) * 2; - array = cext_emallocz(psize * newsz); - for(i = 0; i < (*size); i++) - array[i] = tmp[i]; - free(tmp); - *size = newsz; - } - array[i] = p; - return array; -} - -void -cext_array_detach(void **array, void *p, unsigned int *size) -{ - unsigned int i; - if(!array) - return; - for(i = 0; (i < (*size)) && array[i] && array[i] != p; i++); - if((i >= (*size)) || !array[i]) - return; /* not found */ - for(; (i + 1 < (*size)) && array[i + 1]; i++) - array[i] = array[i + 1]; - array[i] = nil; -} diff --git a/libcext/cext.h b/libcext/cext.h index 16251380..5ebbdb39 100644 --- a/libcext/cext.h +++ b/libcext/cext.h @@ -9,10 +9,6 @@ #define nil (void *)0 #endif -/* array.c */ -void ** cext_array_attach(void **array, void *p, unsigned int psize, unsigned int *size); -void cext_array_detach(void **array, void *p, unsigned int *size); - /* emallocz.c */ void *cext_emallocz(unsigned int size); diff --git a/libixp/ixp.h b/libixp/ixp.h index f3c4d27e..d492c832 100644 --- a/libixp/ixp.h +++ b/libixp/ixp.h @@ -154,21 +154,22 @@ struct IXPMap { Qid qid; }; + +VECTOR(MapVector, IXPMap *); struct IXPConn { int fd; IXPServer *srv; void (*read) (IXPConn *); void (*close) (IXPConn *); - IXPMap **map; - unsigned int mapsz; + MapVector map; Fcall pending; int is_pending; }; +VECTOR(ConnVector, IXPConn *); struct IXPServer { int running; - IXPConn **conn; - unsigned int connsz; + ConnVector conn; int maxfd; fd_set rd; }; @@ -239,6 +240,7 @@ unsigned int ixp_server_receive_fcall(IXPConn *c, Fcall *fcall); int ixp_server_respond_fcall(IXPConn *c, Fcall *fcall); int ixp_server_respond_error(IXPConn *c, Fcall *fcall, char *errstr); void ixp_server_close(IXPServer *s); +Vector *ixp_map2vector(MapVector *mv); /* socket.c */ int ixp_connect_sock(char *address); diff --git a/libixp/server.c b/libixp/server.c index b6f6fb40..4ffe8e3f 100644 --- a/libixp/server.c +++ b/libixp/server.c @@ -18,6 +18,18 @@ static unsigned char *msg[IXP_MAX_MSG]; +static Vector * +conn2vector(ConnVector *cv) +{ + return (Vector *) cv; +} + +Vector * +ixp_map2vector(MapVector *mv) +{ + return (Vector *) mv; +} + IXPConn *ixp_server_open_conn(IXPServer *s, int fd, void (*read)(IXPConn *c), void (*close)(IXPConn *c)) { @@ -26,21 +38,19 @@ IXPConn *ixp_server_open_conn(IXPServer *s, int fd, void (*read)(IXPConn *c), c->srv = s; c->read = read; c->close = close; - s->conn = (IXPConn **)cext_array_attach((void **)s->conn, c, - sizeof(IXPConn *), &s->connsz); + cext_vattach(conn2vector(&s->conn), c); return c; } void ixp_server_close_conn(IXPConn *c) { - unsigned int i; IXPServer *s = c->srv; - cext_array_detach((void **)s->conn, c, &s->connsz); - if(c->map) { - for(i = 0; (i < c->mapsz) && c->map[i]; i++) - free(c->map[i]); - free(c->map); + cext_vdetach(conn2vector(&s->conn), c); + while(c->map.size) { + IXPMap *m = c->map.data[0]; + cext_vdetach(ixp_map2vector(&c->map), m); + free(m); } shutdown(c->fd, SHUT_RDWR); close(c->fd); @@ -52,11 +62,11 @@ prepare_select(IXPServer *s) { int i; FD_ZERO(&s->rd); - for(i = 0; (i < s->connsz) && s->conn[i]; i++) { - if(s->maxfd < s->conn[i]->fd) - s->maxfd = s->conn[i]->fd; - if(s->conn[i]->read) - FD_SET(s->conn[i]->fd, &s->rd); + for(i = 0; i < s->conn.size; i++) { + if(s->maxfd < s->conn.data[i]->fd) + s->maxfd = s->conn.data[i]->fd; + if(s->conn.data[i]->read) + FD_SET(s->conn.data[i]->fd, &s->rd); } } @@ -64,10 +74,10 @@ static void handle_conns(IXPServer *s) { int i; - for(i = 0; (i < s->connsz) && s->conn[i]; i++) - if(FD_ISSET(s->conn[i]->fd, &s->rd) && s->conn[i]->read) + for(i = 0; i < s->conn.size; i++) + if(FD_ISSET(s->conn.data[i]->fd, &s->rd) && s->conn.data[i]->read) /* call read handler */ - s->conn[i]->read(s->conn[i]); + s->conn.data[i]->read(s->conn.data[i]); } char * @@ -77,7 +87,7 @@ ixp_server_loop(IXPServer *s) s->running = 1; /* main loop */ - while(s->running && s->conn) { + while(s->running) { prepare_select(s); r = select(s->maxfd + 1, &s->rd, 0, 0, 0); @@ -95,9 +105,9 @@ IXPMap * ixp_server_fid2map(IXPConn *c, unsigned int fid) { unsigned int i; - for(i = 0; (i < c->mapsz) && c->map[i]; i++) - if(c->map[i]->fid == fid) - return c->map[i]; + for(i = 0; i < c->map.size; i++) + if(c->map.data[i]->fid == fid) + return c->map.data[i]; return nil; } @@ -146,7 +156,7 @@ void ixp_server_close(IXPServer *s) { unsigned int i; - for(i = 0; (i < s->connsz) && s->conn[i]; i++) - if(s->conn[i]->close) - s->conn[i]->close(s->conn[i]); + for(i = 0; i < s->conn.size; i++) + if(s->conn.data[i]->close) + s->conn.data[i]->close(s->conn.data[i]); }