mirror of
https://github.com/0intro/wmii
synced 2025-02-13 12:54:53 +03:00
fixed client dir access in fs.c
This commit is contained in:
parent
70b69693ca
commit
13e38f667e
46
cmd/wm/fs.c
46
cmd/wm/fs.c
@ -207,6 +207,7 @@ name_to_type(char *name, unsigned char dtyp)
|
||||
if(err)
|
||||
return -1;
|
||||
dyndir:
|
||||
fprintf(stderr, "nametotype: dtyp = %d\n", dtyp);
|
||||
switch(dtyp) {
|
||||
case Droot: return Dpage; break;
|
||||
case Dpage: return Darea; break;
|
||||
@ -350,8 +351,10 @@ xwalk(IXPConn *c, Fcall *fcall)
|
||||
fprintf(stderr, "walk: qid_to_name()=%s qpath_type(dir.path)=%d dir.dtype=%d\n",
|
||||
qid_to_name(&dir), qpath_type(dir.path), dir.dtype);
|
||||
}
|
||||
if(!nwqid)
|
||||
if(!nwqid) {
|
||||
fprintf(stderr, "%s", "xwalk: no sucj file\n");
|
||||
return Enofile;
|
||||
}
|
||||
}
|
||||
/* a fid will only be valid, if the walk was complete */
|
||||
if(nwqid == fcall->nwname) {
|
||||
@ -407,12 +410,14 @@ type_to_stat(Stat *stat, char *name, Qid *dir)
|
||||
unsigned short dpgid = qpath_pgid(dir->path);
|
||||
unsigned short daid = qpath_aid(dir->path);
|
||||
unsigned short dcid = qpath_cid(dir->path);
|
||||
unsigned int idx;
|
||||
int dpg = 0, darea = 0, dcl = 0;
|
||||
int type = name_to_type(name, dtyp);
|
||||
int type = name_to_type(name, dir->dtype);
|
||||
char buf[32];
|
||||
Client *c;
|
||||
|
||||
fprintf(stderr, "typetostat(0): name=%s dpgid=%d daid=%d dcid=%d\n", name, dpgid, daid, dcid);
|
||||
fprintf(stderr, "typetostat (0) Dtype=%d\n", type);
|
||||
|
||||
if(dpgid && ((dpg = index_of_page_id(dpgid)) == -1))
|
||||
return 0;
|
||||
if(daid && ((darea = index_of_area_id(page[dpg], daid)) == -1))
|
||||
@ -420,6 +425,9 @@ type_to_stat(Stat *stat, char *name, Qid *dir)
|
||||
if(dcid && ((dcl = index_of_client_id(page[dpg]->area[darea], dcid)) == -1))
|
||||
return 0;
|
||||
|
||||
fprintf(stderr, "typetostat(1): dpg=%d darea=%d dcl=%d\n", dpg, darea, dcl);
|
||||
fprintf(stderr, "typetostat (3) Dtype=%d\n", type);
|
||||
|
||||
switch (type) {
|
||||
case Dclient:
|
||||
case Darea:
|
||||
@ -446,23 +454,15 @@ type_to_stat(Stat *stat, char *name, Qid *dir)
|
||||
case Fborder:
|
||||
if(dtyp == Ddefault)
|
||||
snprintf(buf, sizeof(buf), "%d", def.border);
|
||||
else {
|
||||
idx = cext_strtonum(name, 0, 0xffff, &err);
|
||||
if(err)
|
||||
return 0;
|
||||
snprintf(buf, sizeof(buf), "%d", page[dpg]->area[darea]->client[idx]->frame.border);
|
||||
}
|
||||
else
|
||||
snprintf(buf, sizeof(buf), "%d", page[dpg]->area[darea]->client[dcl]->frame.border);
|
||||
return mkstat(stat, dir, name, strlen(buf), DMREAD | DMWRITE);
|
||||
break;
|
||||
case Fbar:
|
||||
if(dtyp == Ddefault)
|
||||
snprintf(buf, sizeof(buf), "%d", def.bar);
|
||||
else {
|
||||
idx = cext_strtonum(name, 0, 0xffff, &err);
|
||||
if(err)
|
||||
return 0;
|
||||
snprintf(buf, sizeof(buf), "%d", page[dpg]->area[darea]->client[idx]->frame.bar);
|
||||
}
|
||||
else
|
||||
snprintf(buf, sizeof(buf), "%d", page[dpg]->area[darea]->client[dcl]->frame.bar);
|
||||
return mkstat(stat, dir, name, strlen(buf), DMREAD | DMWRITE);
|
||||
break;
|
||||
case Finc:
|
||||
@ -470,10 +470,7 @@ type_to_stat(Stat *stat, char *name, Qid *dir)
|
||||
return mkstat(stat, dir, name, strlen(buf), DMREAD | DMWRITE);
|
||||
break;
|
||||
case Fgeom:
|
||||
idx = cext_strtonum(name, 0, 0xffff, &err);
|
||||
if(err)
|
||||
return 0;
|
||||
c = page[dpg]->area[darea]->client[idx];
|
||||
c = page[dpg]->area[darea]->client[dcl];
|
||||
snprintf(buf, sizeof(buf), "%d %d %d %d", c->frame.rect.x, c->frame.rect.y,
|
||||
c->frame.rect.width, c->frame.rect.height);
|
||||
return mkstat(stat, dir, name, strlen(buf), DMREAD | DMWRITE);
|
||||
@ -483,7 +480,8 @@ type_to_stat(Stat *stat, char *name, Qid *dir)
|
||||
return mkstat(stat, dir, name, strlen(buf), DMREAD | DMWRITE);
|
||||
break;
|
||||
case Fname:
|
||||
return mkstat(stat, dir, name, strlen(page[dpg]->area[darea]->client[idx]->name), DMREAD);
|
||||
c = page[dpg]->area[darea]->client[dcl];
|
||||
return mkstat(stat, dir, name, strlen(c->name), DMREAD);
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
@ -684,16 +682,19 @@ xread(IXPConn *c, Fcall *fcall)
|
||||
break;
|
||||
case Dclient:
|
||||
fcall->count = type_to_stat(&stat, "border", &m->qid);
|
||||
fprintf(stderr, "msgl=%d\n", fcall->count);
|
||||
p = ixp_enc_stat(p, &stat);
|
||||
fcall->count += type_to_stat(&stat, "bar", &m->qid);
|
||||
p = ixp_enc_stat(p, &stat);
|
||||
fcall->count += type_to_stat(&stat, "inc", &m->qid);
|
||||
fprintf(stderr, "msgl=%d\n", fcall->count);
|
||||
p = ixp_enc_stat(p, &stat);
|
||||
fcall->count += type_to_stat(&stat, "name", &m->qid);
|
||||
fprintf(stderr, "msgl=%d\n", fcall->count);
|
||||
p = ixp_enc_stat(p, &stat);
|
||||
fcall->count += type_to_stat(&stat, "geometry", &m->qid);
|
||||
fprintf(stderr, "msgl=%d\n", fcall->count);
|
||||
p = ixp_enc_stat(p, &stat);
|
||||
fcall->count += type_to_stat(&stat, "ctl", &m->qid);
|
||||
fprintf(stderr, "msgl=%d\n", fcall->count);
|
||||
p = ixp_enc_stat(p, &stat);
|
||||
break;
|
||||
case Fctl:
|
||||
@ -945,6 +946,7 @@ do_fcall(IXPConn *c)
|
||||
char *errstr;
|
||||
|
||||
if((msize = ixp_server_receive_fcall(c, &fcall))) {
|
||||
fprintf(stderr, "do_fcall=%d\n", fcall.id);
|
||||
switch(fcall.id) {
|
||||
case TVERSION: errstr = xversion(c, &fcall); break;
|
||||
case TATTACH: errstr = xattach(c, &fcall); break;
|
||||
|
Loading…
x
Reference in New Issue
Block a user