more bugs fixed; nice amount of printing

This commit is contained in:
rsc 2005-03-21 04:27:18 +00:00
parent 5a3960716d
commit 590c5b346f
2 changed files with 56 additions and 11 deletions

View file

@ -35,7 +35,8 @@ usage(void)
extern int chatty9pclient; extern int chatty9pclient;
int debug; int debug;
#define dprint if(debug)print #define dprint if(debug>1)print
#define cprint if(debug)print
Win *mkwin(char*); Win *mkwin(char*);
int do3(Win *w, char *arg); int do3(Win *w, char *arg);
@ -61,6 +62,12 @@ char *cmds[] = {
nil nil
}; };
char *debugstr[] = {
"off",
"minimal",
"chatty",
};
typedef struct Arg Arg; typedef struct Arg Arg;
struct Arg struct Arg
{ {
@ -253,7 +260,31 @@ parsename(char *name, char **server, char **path)
char* char*
filestat(char *server, char *path) filestat(char *server, char *path)
{ {
return sysrun(2, "9 netfilestat %q %q", server, path); char *type;
static struct {
char *server;
char *path;
char *type;
} cache;
if(cache.server && strcmp(server, cache.server) == 0)
if(cache.path && strcmp(path, cache.path) == 0){
type = estrdup(cache.type);
cprint("9 netfilestat %q %q => %s (cached)\n", server, path, type);
return type;
}
type = sysrun(2, "9 netfilestat %q %q", server, path);
free(cache.server);
free(cache.path);
free(cache.type);
cache.server = estrdup(server);
cache.path = estrdup(path);
cache.type = estrdup(type);
cprint("9 netfilestat %q %q => %s\n", server, path, type);
return type;
} }
/* /*
@ -300,6 +331,8 @@ filethread(void *v)
winaddr(w, ","); winaddr(w, ",");
winprint(w, "data", "[reading...]"); winprint(w, "data", "[reading...]");
winaddr(w, ","); winaddr(w, ",");
cprint("9 netfileget %s%q %q\n",
strcmp(type, "file") == 0 ? "" : "-d", server, path);
if(strcmp(type, "file")==0) if(strcmp(type, "file")==0)
twait(pipetowin(w, "data", 2, "9 netfileget %q %q", server, path)); twait(pipetowin(w, "data", 2, "9 netfileget %q %q", server, path));
else else
@ -343,6 +376,7 @@ filethread(void *v)
fprint(2, "Netfiles: bad name %s\n", name); fprint(2, "Netfiles: bad name %s\n", name);
goto out; goto out;
} }
cprint("9 netfileput %q %q\n", server, path);
if(twait(pipewinto(w, "body", 2, "9 netfileput %q %q", server, path)) >= 0){ if(twait(pipewinto(w, "body", 2, "9 netfileput %q %q", server, path)) >= 0){
cleanname(name); cleanname(name);
winname(w, name); winname(w, name);
@ -358,7 +392,8 @@ filethread(void *v)
winctl(w, "delete"); winctl(w, "delete");
break; break;
case Debug: case Debug:
debug = !debug; debug = (debug+1)%3;
print("Netfiles debug %s\n", debugstr[debug]);
break; break;
default: default:
winwriteevent(w, e); winwriteevent(w, e);
@ -386,9 +421,10 @@ do3(Win *w, char *text)
char *addr, *name, *type, *server, *path, *p, *q; char *addr, *name, *type, *server, *path, *p, *q;
static char lastfail[1000]; static char lastfail[1000];
if(text[0] == '/') if(text[0] == '/'){
p = nil;
name = estrdup(text); name = estrdup(text);
else{ }else{
p = wingetname(w); p = wingetname(w);
if(text[0] != ':'){ if(text[0] != ':'){
q = strrchr(p, '/'); q = strrchr(p, '/');
@ -400,15 +436,18 @@ do3(Win *w, char *text)
strcat(name, "/"); strcat(name, "/");
strcat(name, text); strcat(name, text);
} }
dprint("do3 %s => %s\n", text, name); cprint("button3 %s %s => %s\n", p, text, name);
if((addr = strchr(name, ':')) != nil) if((addr = strchr(name, ':')) != nil)
*addr++ = 0; *addr++ = 0;
cleanname(name); cleanname(name);
cprint("b3 \t=> name=%s addr=%s\n", name, addr);
if(strcmp(name, lastfail) == 0){ if(strcmp(name, lastfail) == 0){
cprint("b3 \t=> non-existant (cached)\n");
free(name); free(name);
return -1; return -1;
} }
if(parsename(name, &server, &path) < 0){ if(parsename(name, &server, &path) < 0){
cprint("b3 \t=> parsename failed\n");
free(name); free(name);
return -1; return -1;
} }
@ -417,11 +456,15 @@ do3(Win *w, char *text)
free(path); free(path);
if(strcmp(type, "file")==0 || strcmp(type, "directory")==0){ if(strcmp(type, "file")==0 || strcmp(type, "directory")==0){
w = nametowin(name); w = nametowin(name);
fprint(2, "nametowin %s: %p\n", name); if(w == nil){
if(w == nil)
w = mkwin(name); w = mkwin(name);
winaddr(w, "%s", addr); cprint("b3 \t=> creating new window %d\n", w->id);
winctl(w, "dot=addr"); }else
cprint("b3 \t=> reusing window %d\n", w->id);
if(addr){
winaddr(w, "%s", addr);
winctl(w, "dot=addr");
}
winctl(w, "show"); winctl(w, "show");
free(name); free(name);
free(type); free(type);
@ -431,8 +474,10 @@ do3(Win *w, char *text)
* remember last name that didn't exist so that * remember last name that didn't exist so that
* only the first right-click is slow when searching for text. * only the first right-click is slow when searching for text.
*/ */
cprint("b3 caching %s => type %s\n", name, type);
strecpy(lastfail, lastfail+sizeof lastfail, name); strecpy(lastfail, lastfail+sizeof lastfail, name);
free(name); free(name);
free(type);
return -1; return -1;
} }

View file

@ -6,7 +6,7 @@
extern int debug; extern int debug;
#define dprint if(debug)print #define dprint if(debug>1)print
typedef struct Waitreq Waitreq; typedef struct Waitreq Waitreq;
struct Waitreq struct Waitreq