allow $fu/bar and don't choke on files named "-". Reference: /n/atom/patch/applied/mkfsdollar Date: Sat Feb 22 17:02:00 CET 2014 Signed-off-by: quanstro@quanstro.net --- /sys/src/cmd/disk/mkfs.c Sat Feb 22 17:00:53 2014 +++ /sys/src/cmd/disk/mkfs.c Sat Feb 22 17:00:54 2014 @@ -610,10 +610,11 @@ p = getname(p, &f->gid); if(!*f->gid) f->gid = "-"; - f->old = getpath(p); - if(f->old && strcmp(f->old, "-") == 0){ + f->old = nil; + getname(p, &f->old); + if(f->old != nil && (f->old[0] == 0 || strcmp(f->old, "-") == 0)){ free(f->old); - f->old = 0; + f->old = nil; } setnames(f); @@ -644,6 +645,25 @@ } char* +getenv1(char *s) +{ + char *p, *env, *r; + + p = strchr(s, '/'); + if(p != nil) + *p++ = 0; + env = getenv(s); + if(env == nil) + return nil; + if(p){ + r = smprint("%s/%s", env, p); + free(env); + }else + r = env; + return r; +} + +char* getname(char *p, char **buf) { char *s, *start; @@ -661,11 +681,12 @@ (*buf)[p-start] = '\0'; if(**buf == '$'){ - s = getenv(*buf+1); + s = getenv1(*buf+1); if(s == 0){ warn("can't read environment variable %q", *buf+1); skipdir(); free(*buf); + *buf = nil; return nil; } free(*buf);