mirror of
https://github.com/0intro/wmii
synced 2025-03-18 04:32:54 +03:00
removed libcext/array.c
This commit is contained in:
parent
41f9a57ba6
commit
04323be88b
14
cmd/wm/fs.c
14
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);
|
||||
|
@ -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}
|
||||
|
||||
|
@ -1,44 +0,0 @@
|
||||
/*
|
||||
* (C)opyright MMIV-MMVI Anselm R. Garbe <garbeam at gmail dot com>
|
||||
* See LICENSE file for license details.
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#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;
|
||||
}
|
@ -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);
|
||||
|
||||
|
10
libixp/ixp.h
10
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);
|
||||
|
@ -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]);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user