tfix :5 in window (don't open directory). search for file windows better (don't lose files). - plan9port - [fork] Plan 9 from user space (HTM) git clone git://src.adamsgaard.dk/plan9port (DIR) Log (DIR) Files (DIR) Refs (DIR) README (DIR) LICENSE --- (DIR) commit 5a3960716df079feeda82e55c8849b10126cd6e5 (DIR) parent baf7825e82bac6f37860c6ebe26a13651fe405fd (HTM) Author: rsc <devnull@localhost> Date: Mon, 21 Mar 2005 03:59:19 +0000 fix :5 in window (don't open directory). search for file windows better (don't lose files). Diffstat: M src/cmd/netfiles/acme.c | 2 +- M src/cmd/netfiles/main.c | 55 ++++++++++++++++--------------- 2 files changed, 29 insertions(+), 28 deletions(-) --- (DIR) diff --git a/src/cmd/netfiles/acme.c b/src/cmd/netfiles/acme.c t@@ -290,7 +290,7 @@ winindex(void) char *s; mountacme(); - if((fid = fsopen(acmefs, "index", ORDWR)) == nil) + if((fid = fsopen(acmefs, "index", OREAD)) == nil) return nil; s = fsreadm(fid); fsclose(fid); (DIR) diff --git a/src/cmd/netfiles/main.c b/src/cmd/netfiles/main.c t@@ -81,22 +81,33 @@ arg(char *file, char *addr, Channel *c) return a; } +Win* +winbyid(int id) +{ + Win *w; + + for(w=windows; w; w=w->next) + if(w->id == id) + return w; + return nil; +} + /* - * return window id of a window named name or name/ + * return Win* of a window named name or name/ * assumes name is cleaned. */ -int -nametowinid(char *name) +Win* +nametowin(char *name) { char *index, *p, *next; int len, n; + Win *w; index = winindex(); - n = -1; len = strlen(name); for(p=index; p && *p; p=next){ if((next = strchr(p, '\n')) != nil) - *next = 0; + *next++ = 0; if(strlen(p) <= 5*12) continue; if(memcmp(p+5*12, name, len)!=0) t@@ -104,30 +115,16 @@ nametowinid(char *name) if(p[5*12+len]!=' ' && (p[5*12+len]!='/' || p[5*12+len+1]!=' ')) continue; n = atoi(p); - break; + if((w = winbyid(n)) != nil){ + free(index); + return w; + } } free(index); - return n; -} - -/* - * look up window by name - */ -Win* -nametowin(char *name) -{ - int id; - Win *w; - - id = nametowinid(name); - if(id == -1) - return nil; - for(w=windows; w; w=w->next) - if(w->id == id) - return w; return nil; } + /* * look for s in list */ t@@ -393,11 +390,14 @@ do3(Win *w, char *text) name = estrdup(text); else{ p = wingetname(w); - q = strrchr(p, '/'); - *(q+1) = 0; + if(text[0] != ':'){ + q = strrchr(p, '/'); + *(q+1) = 0; + } name = emalloc(strlen(p)+1+strlen(text)+1); strcpy(name, p); - strcat(name, "/"); + if(text[0] != ':') + strcat(name, "/"); strcat(name, text); } dprint("do3 %s => %s\n", text, name); t@@ -417,6 +417,7 @@ do3(Win *w, char *text) free(path); if(strcmp(type, "file")==0 || strcmp(type, "directory")==0){ w = nametowin(name); + fprint(2, "nametowin %s: %p\n", name); if(w == nil) w = mkwin(name); winaddr(w, "%s", addr);