summaryrefslogtreecommitdiff
path: root/sys/src/cmd/hgfs/tree.c
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@centraldogma>2011-06-30 03:05:10 +0200
committercinap_lenrek <cinap_lenrek@centraldogma>2011-06-30 03:05:10 +0200
commit62186910fa0c833f8a5716cb83581494adde1b4e (patch)
tree5247b8b4fe73343c79e759f78ca165e94c368526 /sys/src/cmd/hgfs/tree.c
parent2f1a0685ea31bfa8da10bb077312451042c77324 (diff)
hgfs: fix path mangeling bug, find dothg on startup
Diffstat (limited to 'sys/src/cmd/hgfs/tree.c')
-rw-r--r--sys/src/cmd/hgfs/tree.c17
1 files changed, 7 insertions, 10 deletions
diff --git a/sys/src/cmd/hgfs/tree.c b/sys/src/cmd/hgfs/tree.c
index 62a3ab97f..517d7ad54 100644
--- a/sys/src/cmd/hgfs/tree.c
+++ b/sys/src/cmd/hgfs/tree.c
@@ -13,7 +13,7 @@ nodepath(char *s, char *e, Revnode *nd)
"lpt1", "lpt2", "lpt3", "lpt4", "lpt5", "lpt6", "lpt7", "lpt8", "lpt9",
};
char *p;
- int i;
+ int i, l;
if(nd == nil || nd->name == nil)
return s;
@@ -21,10 +21,11 @@ nodepath(char *s, char *e, Revnode *nd)
s = seprint(nodepath(s, e, nd->up), e, "/");
p = nd->name;
- for(i=0; i<nelem(frogs); i++)
- if(strncmp(frogs[i], p, strlen(frogs[i])) == 0)
+ for(i=0; i<nelem(frogs); i++){
+ l = strlen(frogs[i]);
+ if((strncmp(frogs[i], p, l) == 0) && (p[l] == 0 || p[l] == '.'))
return seprint(s, e, "%.2s~%.2x%s", p, p[2], p+3);
-
+ }
for(; s+4 < e && *p; p++){
if(*p == '_'){
*s++ = '_';
@@ -50,20 +51,16 @@ mknode(char *name, uchar *hash, char mode)
char *s;
d = malloc(sizeof(*d) + (hash ? HASHSZ : 0) + (name ? strlen(name)+1 : 0));
- d->up = d->down = d->next = d->before = nil;
+ memset(d, 0, sizeof(*d));
s = (char*)&d[1];
if(hash){
d->path = *((uvlong*)hash);
memmove(d->hash = (uchar*)s, hash, HASHSZ);
s += HASHSZ;
- } else {
+ }else
d->path = 1;
- d->hash = nil;
- }
if(name)
strcpy(d->name = s, name);
- else
- d->name = nil;
d->mode = mode;
return d;
}