wmii

git clone git://oldgit.suckless.org/wmii/
Log | Files | Refs | README | LICENSE

commit be8a984d73237606db239c36612afee07ea76199
parent 0db44d2642e1314a9d5423b2731a1f94d84cc186
Author: Anselm R. Garbe <garbeam@wmii.de>
Date:   Sun, 12 Feb 2006 01:49:33 +0100

removed grab from /ctl, instead use wmiir create


Diffstat:
cmd/wm/fs.c | 29+++++++++++++++++++++++++----
cmd/wmiir.c | 12++++--------
libixp/client.c | 19+++++--------------
libixp/ixp.h | 4++--
rc/wmiirc | 4++--
5 files changed, 38 insertions(+), 30 deletions(-)

diff --git a/cmd/wm/fs.c b/cmd/wm/fs.c @@ -474,6 +474,28 @@ xwalk(IXPConn *c, Fcall *fcall) } static char * +xcreate(IXPConn *c, Fcall *fcall) +{ + IXPMap *m = ixp_server_fid2map(c, fcall->fid); + + if(!(fcall->mode | IXP_OWRITE)) + return Enomode; + if(!m) + return Enofid; + if(!strncmp(fcall->name, ".", 2) || !strncmp(fcall->name, "..", 3)) + return "illegal file name"; + if(qpath_type(m->qid.path) != Dkeys) + return Enoperm; + grab_key(create_key(fcall->name)); + mkqid(&m->qid, fcall->name, &m->qid, False); + fcall->id = RCREATE; + fcall->qid = m->qid; + fcall->iounit = WMII_IOUNIT; + ixp_server_respond_fcall(c, fcall); + return nil; +} + +static char * xopen(IXPConn *c, Fcall *fcall) { IXPMap *m = ixp_server_fid2map(c, fcall->fid); @@ -1042,10 +1064,6 @@ xwrite(IXPConn *c, Fcall *fcall) attach_detached_client(); else if(!strncmp(buf, "select", 6)) select_page(&buf[7]); - else if(!strncmp(buf, "grab ", 5)) { - if(strlen(&buf[5])) - grab_key(create_key(&buf[5])); - } else return Enocommand; break; @@ -1211,6 +1229,8 @@ xwrite(IXPConn *c, Fcall *fcall) } update_bar_geometry(); break; + case Fkey: + break; default: return "invalid write"; break; @@ -1247,6 +1267,7 @@ do_fcall(IXPConn *c) case TVERSION: errstr = xversion(c, &fcall); break; case TATTACH: errstr = xattach(c, &fcall); break; case TWALK: errstr = xwalk(c, &fcall); break; + case TCREATE: errstr = xcreate(c, &fcall); break; case TOPEN: errstr = xopen(c, &fcall); break; case TREMOVE: errstr = xremove(c, &fcall); break; case TREAD: errstr = xread(c, &fcall); break; diff --git a/cmd/wmiir.c b/cmd/wmiir.c @@ -55,9 +55,8 @@ xcreate(char *file) fprintf(stderr, "wmiir: cannot walk to '%s': %s\n", file, c.errstr); return -1; } - /* create */ p++; - if(ixp_client_create(&c, fid, p, (unsigned int) 0xff, IXP_OWRITE) == -1) { + if(ixp_client_create(&c, fid, p, DMWRITE, IXP_OWRITE) == -1) { fprintf(stderr, "wmiir: cannot create file '%s': %s\n", p, c.errstr); return -1; } @@ -169,14 +168,12 @@ xread(char *file) size_t ndircontent = 0; unsigned long long offset = 0; - /* open */ if(ixp_client_open(&c, fid, file, IXP_OREAD) == -1) { fprintf(stderr, "wmiir: cannot open file '%s': %s\n", file, c.errstr); return -1; } is_directory = !c.fcall.nwqid || (c.fcall.qid.type == IXP_QTDIR); - /* read */ while((count = ixp_client_read(&c, fid, offset, result, IXP_MAX_MSG)) > 0) { if(is_directory) { if(ndircontent + count > dircontentsz) { @@ -216,7 +213,6 @@ xremove(char *file) { unsigned int fid; - /* remove */ fid = c.root_fid << 2; if(ixp_client_remove(&c, fid, file) == -1) { fprintf(stderr, "wmiir: cannot remove file '%s': %s\n", file, c.errstr); @@ -259,8 +255,8 @@ main(int argc, char *argv[]) fprintf(stderr, "%s", "wmiir: error: $WMII_ADDRESS not set\n"); usage(); } - /* open socket */ - if(ixp_client_init(&c, address, getpid()) == -1) { + + if(ixp_client_dial(&c, address, getpid()) == -1) { fprintf(stderr, "wmiir: %s\n", c.errstr); exit(1); } @@ -277,7 +273,7 @@ main(int argc, char *argv[]) usage(); /* close socket */ - ixp_client_deinit(&c); + ixp_client_hangup(&c); return 0; } diff --git a/libixp/client.c b/libixp/client.c @@ -36,31 +36,29 @@ ixp_client_do_fcall(IXPClient * c) } int -ixp_client_init(IXPClient *c, char *sockfile, unsigned int rootfid) +ixp_client_dial(IXPClient *c, char *sockfile, unsigned int rootfid) { if((c->fd = ixp_connect_sock(sockfile)) < 0) { c->errstr = "cannot connect server"; return -1; } - /* version */ c->fcall.id = TVERSION; c->fcall.tag = IXP_NOTAG; c->fcall.maxmsg = IXP_MAX_MSG; cext_strlcpy(c->fcall.version, IXP_VERSION, sizeof(c->fcall.version)); if(ixp_client_do_fcall(c) == -1) { fprintf(stderr, "error: %s\n", c->fcall.errstr); - ixp_client_deinit(c); + ixp_client_hangup(c); return -1; } if(strncmp(c->fcall.version, IXP_VERSION, strlen(IXP_VERSION))) { fprintf(stderr, "error: %s\n", c->fcall.errstr); c->errstr = "9P versions differ"; - ixp_client_deinit(c); + ixp_client_hangup(c); return -1; /* we cannot handle this version */ } c->root_fid = rootfid; - /* attach */ c->fcall.id = TATTACH; c->fcall.tag = IXP_NOTAG; c->fcall.fid = c->root_fid; @@ -69,7 +67,7 @@ ixp_client_init(IXPClient *c, char *sockfile, unsigned int rootfid) c->fcall.aname[0] = 0; if(ixp_client_do_fcall(c) == -1) { fprintf(stderr, "error: %s\n", c->fcall.errstr); - ixp_client_deinit(c); + ixp_client_hangup(c); return -1; } c->root_qid = c->fcall.qid; @@ -81,7 +79,6 @@ ixp_client_remove(IXPClient * c, unsigned int newfid, char *filepath) { if(ixp_client_walk(c, newfid, filepath) == -1) return -1; - /* remove */ c->fcall.id = TREMOVE; c->fcall.tag = IXP_NOTAG; c->fcall.fid = newfid; @@ -92,7 +89,6 @@ int ixp_client_create(IXPClient * c, unsigned int dirfid, char *name, unsigned int perm, unsigned char mode) { - /* create */ c->fcall.id = TCREATE; c->fcall.tag = IXP_NOTAG; c->fcall.fid = dirfid; @@ -107,7 +103,6 @@ ixp_client_walk(IXPClient * c, unsigned int newfid, char *filepath) { unsigned int i; char *wname[IXP_MAX_WELEM]; - /* walk */ c->fcall.id = TWALK; c->fcall.fid = c->root_fid; c->fcall.newfid = newfid; @@ -128,7 +123,6 @@ ixp_client_open(IXPClient * c, unsigned int newfid, char *filepath, if(ixp_client_walk(c, newfid, filepath) == -1) return -1; - /* open */ c->fcall.id = TOPEN; c->fcall.tag = IXP_NOTAG; c->fcall.fid = newfid; @@ -142,7 +136,6 @@ ixp_client_read(IXPClient * c, unsigned int fid, unsigned long long offset, { unsigned int bytes = c->fcall.iounit; - /* read */ c->fcall.id = TREAD; c->fcall.tag = IXP_NOTAG; c->fcall.fid = fid; @@ -164,7 +157,6 @@ ixp_client_write(IXPClient * c, unsigned int fid, c->errstr = "iounit exceeded"; return -1; } - /* write */ c->fcall.id = TWRITE; c->fcall.tag = IXP_NOTAG; c->fcall.fid = fid; @@ -179,7 +171,6 @@ ixp_client_write(IXPClient * c, unsigned int fid, int ixp_client_close(IXPClient * c, unsigned int fid) { - /* clunk */ c->fcall.id = TCLUNK; c->fcall.tag = IXP_NOTAG; c->fcall.fid = fid; @@ -187,7 +178,7 @@ ixp_client_close(IXPClient * c, unsigned int fid) } void -ixp_client_deinit(IXPClient * c) +ixp_client_hangup(IXPClient * c) { /* session finished, now shutdown */ if(c->fd) { diff --git a/libixp/ixp.h b/libixp/ixp.h @@ -231,8 +231,8 @@ typedef struct { } IXPClient; /* client.c */ -int ixp_client_init(IXPClient *c, char *address, unsigned int rootfid); -void ixp_client_deinit(IXPClient *c); +int ixp_client_dial(IXPClient *c, char *address, unsigned int rootfid); +void ixp_client_hangup(IXPClient *c); int ixp_client_remove(IXPClient *c, unsigned int newfid, char *filepath); int ixp_client_create(IXPClient *c, unsigned int dirfid, char *name, unsigned int perm, unsigned char mode); diff --git a/rc/wmiirc b/rc/wmiirc @@ -67,10 +67,10 @@ for(i in \ $MODKEY-Shift-h \ $MODKEY-Shift-l \ $MODKEY-Shift-p) - xwrite /ctl 'grab '^$i + echo -n | wmiir create /keys/$i for(i in `{seq 1 9}) - xwrite /ctl 'grab '^$MODKEY^'-Shift-'^$i + echo -n | wmiir create /keys/$MODKEY-$i # BAR CONFIGURATION