wmii

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

commit 311e369da192a5ee2c3c524f1f3450f5d04f6f90
parent d6775bce8938cc9f60ae20fa25166ba0967f123c
Author: Anselm R. Garbe <garbeam@wmii.de>
Date:   Sat, 11 Mar 2006 01:07:19 +0100

removed /tags namespace, instead changed it to a file which contains all tags which are in use


Diffstat:
cmd/wm/fs.c | 131++++++++++++++++++++++++++++++++++++++++++-------------------------------------
cmd/wm/tag.c | 20++++++++++----------
cmd/wm/wm.h | 4+---
3 files changed, 80 insertions(+), 75 deletions(-)

diff --git a/cmd/wm/fs.c b/cmd/wm/fs.c @@ -26,6 +26,7 @@ static char Enofile[] = "file not found"; static char Enomode[] = "mode not supported"; static char Enofunc[] = "function not supported"; static char Enocommand[] = "command not supported"; +static char Ebadvalue[] = "bad value"; #define WMII_IOUNIT 2048 @@ -40,8 +41,7 @@ static char Enocommand[] = "command not supported"; * /def/normcolors FsFnormcolors normal colors * /def/rules FsFrules rules * /def/keys FsFkeys keys - * /tags/ FsDtags - * /tags/foo FsFtags + * /tags FsFtags * /bar/ FsDbar * /bar/expand FsFexpand id of expandable label * /bar/lab/ FsDlabel @@ -148,7 +148,6 @@ qid2name(Qid *qid) switch(type) { case FsDroot: return "/"; break; case FsDdef: return "def"; break; - case FsDtags: return "tags"; break; case FsDclients: return "clients"; break; case FsDbar: return "bar"; break; case FsDws: @@ -233,7 +232,7 @@ qid2name(Qid *qid) case FsFtags: if((qid->dir_type == FsDclient) && (i1 == -1 || i2 == -1 || i3 == -1)) return nil; - else if(i1 == -1) + else if((qid->dir_type == FsDGclient) && (i1 == -1)) return nil; return "tags"; break; @@ -253,13 +252,8 @@ name2type(char *name, unsigned char dir_type) unsigned int i; if(!name || !name[0] || !strncmp(name, "/", 2) || !strncmp(name, "..", 3)) return FsDroot; - if(!strncmp(name, "tags", 5)) { - switch(dir_type) { - case FsDroot: return FsDtags; break; - case FsDGclient: - case FsDclient: return FsFtags; break; - } - } + if(!strncmp(name, "tags", 5)) + return FsFtags; if(!strncmp(name, "clients", 8)) return FsDclients; if(!strncmp(name, "ws", 3) && (dir_type == FsDroot)) @@ -304,8 +298,6 @@ name2type(char *name, unsigned char dir_type) return FsFtag; if((dir_type == FsDbar) && name2label(name)) return FsDlabel; - if((dir_type == FsDtags) && istag(ctag, name, nctag)) - return FsFtag; if(!strncmp(name, "sel", 4)) goto dyndir; i = (unsigned short) cext_strtonum(name, 0, 0xffff, &err); @@ -339,7 +331,6 @@ mkqid(Qid *dir, char *wname, Qid *new) *new = root_qid; break; case FsDdef: - case FsDtags: case FsDclients: case FsDbar: if(dir_type != FsDroot) @@ -426,9 +417,8 @@ mkqid(Qid *dir, char *wname, Qid *new) case FsFtags: if((dir_type == FsDclient) && ((dir_i1 == -1 || dir_i2 == -1 || dir_i3 == -1))) return -1; - else if(dir_i1 == -1 && dir_type != FsDGclient) + else if((dir_type == FsDGclient) && (dir_i1 == -1)) return -1; - else if((dir_type != FsDGclient) && (dir_type != FsDclient)) new->type = IXP_QTFILE; new->path = mkqpath(type, qpath_i1id(dir->path), qpath_i2id(dir->path), qpath_i3id(dir->path)); break; @@ -483,7 +473,6 @@ type2stat(Stat *stat, char *wname, Qid *dir) case FsDarea: case FsDws: case FsDdef: - case FsDtags: case FsDclients: case FsDlabel: case FsDroot: @@ -536,12 +525,23 @@ type2stat(Stat *stat, char *wname, Qid *dir) return mkstat(stat, dir, wname, strlen(client[dir_i1]->name), DMREAD); break; case FsFtags: - if(dir_type == FsDclient) { + switch(dir_type) { + case FsDclient: f = tag[dir_i1]->area[dir_i2]->frame[dir_i3]; return mkstat(stat, dir, wname, strlen(f->client->tags), DMREAD | DMWRITE); - } - else + break; + case FsDGclient: return mkstat(stat, dir, wname, strlen(client[dir_i1]->tags), DMREAD | DMWRITE); + break; + default: + { + unsigned int i, len = 0; + for(i = 0; i < nctag; i++) + len += strlen(ctag[i]) + 1; + return mkstat(stat, dir, wname, len, DMREAD); + } + break; + } break; case FsFtag: if(dir_type == FsDws) @@ -743,24 +743,6 @@ xread(IXPConn *c, Fcall *fcall) fcall->count = 0; if(fcall->offset) { switch (type) { - case FsDtags: - /* jump to offset */ - len = 0; - for(i = 0; i < nctag; i++) { - len += type2stat(&stat, ctag[i], &m->qid); - if(len <= fcall->offset) - continue; - break; - } - /* offset found, proceeding */ - for(; i < nctag; i++) { - len = type2stat(&stat, ctag[i], &m->qid); - if(fcall->count + len > fcall->iounit) - break; - fcall->count += len; - p = ixp_enc_stat(p, &stat); - } - break; case FsDclients: /* jump to offset */ len = 0; @@ -887,6 +869,26 @@ xread(IXPConn *c, Fcall *fcall) else if(fcall->count) memcpy(p, def.rules + fcall->offset, fcall->count); break; + case FsFtags: + if(m->qid.dir_type != FsDroot) + return Enoperm; + len = 0; + /* jump to offset */ + for(i = 0; i < nctag; i++) { + len += strlen(ctag[i]) + 1; + if(len <= fcall->offset) + continue; + } + /* offset found, proceeding */ + for(; i < nctag; i++) { + len = strlen(ctag[i]) + 1; + if(fcall->count + len > fcall->iounit) + break; + memcpy(p + fcall->count, ctag[i], len - 1); + memcpy(p + fcall->count + len - 1, "\n", 1); + fcall->count += len; + } + break; default: break; } @@ -919,15 +921,6 @@ xread(IXPConn *c, Fcall *fcall) p = ixp_enc_stat(p, &stat); } break; - case FsDtags: - for(i = 0; i < nctag; i++) { - len = type2stat(&stat, ctag[i], &m->qid); - if(fcall->count + len > fcall->iounit) - break; - fcall->count += len; - p = ixp_enc_stat(p, &stat); - } - break; case FsDbar: fcall->count = type2stat(&stat, "expand", &m->qid); p = ixp_enc_stat(p, &stat); @@ -1064,13 +1057,25 @@ xread(IXPConn *c, Fcall *fcall) } break; case FsFtags: - if(m->qid.dir_type == FsDclient) { + switch(m->qid.dir_type) { + case FsDclient: if((fcall->count = strlen(tag[i1]->area[i2]->frame[i3]->client->tags))) memcpy(p, tag[i1]->area[i2]->frame[i3]->client->tags, fcall->count); - } - else { + break; + case FsDGclient: if((fcall->count = strlen(client[i1]->tags))) memcpy(p, client[i1]->tags, fcall->count); + break; + default: + for(i = 0; i < nctag; i++) { + len = strlen(ctag[i]) + 1; + if(fcall->count + len > fcall->iounit) + break; + memcpy(p + fcall->count, ctag[i], len - 1); + memcpy(p + fcall->count + len - 1, "\n", 1); + fcall->count += len; + } + break; } break; case FsFexpand: @@ -1131,7 +1136,7 @@ xread(IXPConn *c, Fcall *fcall) memcpy(p, buf, fcall->count); break; default: - return "invalid read"; + return Enoperm; break; } } @@ -1217,28 +1222,30 @@ xwrite(IXPConn *c, Fcall *fcall) break; case FsFsnap: if(fcall->count > sizeof(buf)) - return "snap value out of range 0x0000,..,0xffff"; + return Ebadvalue; memcpy(buf, fcall->data, fcall->count); buf[fcall->count] = 0; i = cext_strtonum(buf, 0, 0xffff, &err); if(err) - return "snap value out of range 0x0000,..,0xffff"; + return Ebadvalue; def.snap = i; break; case FsFborder: if(fcall->count > sizeof(buf)) - return "border value out of range 0x0000,..,0xffff"; + return Ebadvalue; memcpy(buf, fcall->data, fcall->count); buf[fcall->count] = 0; i = cext_strtonum(buf, 0, 0xffff, &err); if(err) - return "border value out of range 0x0000,..,0xffff"; + return Ebadvalue; def.border = i; resize_all_clients(); break; case FsFtags: + if(m->qid.dir_type == FsDroot) + return Enoperm; if(fcall->count > sizeof(buf)) - return "tags value too long"; + return Ebadvalue; memcpy(buf, fcall->data, fcall->count); buf[fcall->count] = 0; if(m->qid.dir_type == FsDclient) { @@ -1251,7 +1258,7 @@ xwrite(IXPConn *c, Fcall *fcall) break; case FsFgeom: if(fcall->count > sizeof(buf)) - return "geometry values out of range"; + return Ebadvalue; memcpy(buf, fcall->data, fcall->count); buf[fcall->count] = 0; if(m->qid.dir_type == FsDclient) { @@ -1282,7 +1289,7 @@ xwrite(IXPConn *c, Fcall *fcall) || (fcall->data[0] != '#') || (fcall->data[8] != '#') || (fcall->data[16] != '#') ) - return "wrong color format"; + return Ebadvalue; memcpy(label[i1]->colstr, fcall->data, fcall->count); label[i1]->colstr[fcall->count] = 0; blitz_loadcolor(dpy, screen, label[i1]->colstr, &label[i1]->color); @@ -1293,7 +1300,7 @@ xwrite(IXPConn *c, Fcall *fcall) || (fcall->data[0] != '#') || (fcall->data[8] != '#') || (fcall->data[16] != '#') ) - return "wrong color format"; + return Ebadvalue; memcpy(def.selcolor, fcall->data, fcall->count); def.selcolor[fcall->count] = 0; blitz_loadcolor(dpy, screen, def.selcolor, &def.sel); @@ -1307,7 +1314,7 @@ xwrite(IXPConn *c, Fcall *fcall) || (fcall->data[0] != '#') || (fcall->data[8] != '#') || (fcall->data[16] != '#') ) - return "wrong color format"; + return Ebadvalue; memcpy(def.normcolor, fcall->data, fcall->count); def.normcolor[fcall->count] = 0; blitz_loadcolor(dpy, screen, def.normcolor, &def.norm); @@ -1360,12 +1367,12 @@ xwrite(IXPConn *c, Fcall *fcall) memcpy(buf, fcall->data, fcall->count); buf[fcall->count] = 0; if((i = str2mode(buf)) == -1) - return "invalid area mode"; + return Ebadvalue; tag[i1]->area[i2]->mode = i; arrange_area(tag[i1]->area[i2]); break; default: - return "invalid write"; + return Enoperm; break; } fcall->id = RWRITE; diff --git a/cmd/wm/tag.c b/cmd/wm/tag.c @@ -134,6 +134,16 @@ tid2index(unsigned short id) return -1; } +static Bool +istag(char **tags, char *tag, unsigned int ntags) +{ + unsigned int i; + for(i = 0; i < ntags; i++) + if(!strncmp(tags[i], tag, strlen(tags[i]))) + return True; + return False; +} + Tag * get_tag(char *name) { @@ -187,16 +197,6 @@ select_tag(char *arg) } Bool -istag(char **tags, char *tag, unsigned int ntags) -{ - unsigned int i; - for(i = 0; i < ntags; i++) - if(!strncmp(tags[i], tag, strlen(tags[i]))) - return True; - return False; -} - -Bool clientoftag(Tag *t, Client *c) { unsigned int i; diff --git a/cmd/wm/wm.h b/cmd/wm/wm.h @@ -50,11 +50,10 @@ enum { FsDclients, FsDclient, FsDGclient, - FsDtags, FsDbar, FsDlabel, FsFexpand, - FsFdata, /* data to display */ + FsFdata, FsFcolors, FsFfont, FsFselcolors, @@ -296,7 +295,6 @@ XRectangle *rectangles(unsigned int *num); int tid2index(unsigned short id); void select_tag(char *arg); int tag2index(Tag *t); -Bool istag(char **tags, char *tag, unsigned int ntags); void update_tags(); Bool clientoftag(Tag *t, Client *c); void detach_fromtag(Tag *t, Client *c);