diff -bur wmii-3.1.orig/cmd/wm/fs.c wmii-3.1/cmd/wm/fs.c --- wmii-3.1.orig/cmd/wm/fs.c 2006-06-17 04:44:30.000000000 -0700 +++ wmii-3.1/cmd/wm/fs.c 2006-09-09 00:22:58.000000000 -0700 @@ -337,7 +337,7 @@ static Qid * qid_of_name(Qid wqid[IXP_MAX_WELEM], unsigned short qsel, char *name) { - int i1 = -1, i2 = -1, i3 = -1, i; + int i1 = -1, i2 = -1, i3 = -1, i, j; unsigned char dir_type, type; static Qid new; @@ -400,7 +400,18 @@ } else { i = cext_strtonum(name, 0, 0xffff, &errstr); - if(errstr || (i >= a->frame.size)) + + if (client.size) { + for (j = 0; j < a->frame.size; j++) { + if (a->frame.data[j]->client == client.data[i]) { + i = j; + j = -1; + break; + } + } + } + + if(errstr || (i >= a->frame.size) || j != -1) return nil; new.path = pack_qpath(FsDclient, p->id, a->id, a->frame.data[i]->id); } @@ -924,7 +935,7 @@ } /* offset found, proceeding */ for(; i < view.data[i1]->area.data[i2]->frame.size; i++) { - snprintf(buf, sizeof(buf), "%u", i); + snprintf(buf, sizeof(buf), "%u", idx_of_client_id(view.data[i1]->area.data[i2]->frame.data[i]->client->id)); len = stat_of_name(&stat, buf, m->wqid, m->sel); if(fcall->count + len > fcall->iounit) break; @@ -1097,7 +1108,7 @@ p = ixp_pack_stat(p, &stat); } for(i = 0; i < view.data[i1]->area.data[i2]->frame.size; i++) { - snprintf(buf, sizeof(buf), "%u", i); + snprintf(buf, sizeof(buf), "%u", idx_of_client_id(view.data[i1]->area.data[i2]->frame.data[i]->client->id)); len = stat_of_name(&stat, buf, m->wqid, m->sel); if(fcall->count + len > fcall->iounit) break;