> term% mkdir trashdir && cd trashdir && mkdir x
> term% touch `{i=0; while (test $i -lt 128) { echo -n abcdefghijklmnop;
> i=`{echo $i+1|hoc} } }
> term% cp abc* abc* x
> # watch the cp executable suicide
> # now, make SURE there's nothing in this rio window that you want to keep...
> term% rm abc*
> # watch the rio window go bye bye!
it used to be that path elements on the file server were limited
to 26 non-space characters. if you're running ken, that limit
is typically 56 characters. but fileservers (e.g. ramfs) are free
to choose any limit they wish.
i think fgb's fix is a good band-aid. but we need to
be flexible and handle arbitrary sized file names.
i'm applying this. i goto Again because i don't want
to break the rest of the glob.
; diffy -c plan9.c
/n/dump/2011/0201/sys/src/cmd/rc/plan9.c:443,448 - plan9.c:443,449
int
Readdir(int f, void *p, int onlydirs)
{
+ char *s;
int n;
if(f<0 || f>=NFD)
/n/dump/2011/0201/sys/src/cmd/rc/plan9.c:465,472 - plan9.c:466,478
}
if(dir[f].i == dir[f].n)
return 0;
- strcpy(p, dir[f].dbuf[dir[f].i].name);
+ s = dir[f].dbuf[dir[f].i].name;
dir[f].i++;
+ if(strlen(s) >= NDIR){
+ pfmt(err, "rc: file name too long: %s\n", s);
+ goto Again;
+ }
+ strcpy(p, s);
return 1;
}
- erik