How do I deal with (null) filenames?
Dr. William B. Busa
bio_zwbb at jhunix.HCF.JHU.EDU
Fri Jul 28 23:44:15 AEST 1989
Thanks to all who responded. Responses fell into two categories:
1) Those who accepted my assertion that filenames displayed by
ls as (null).001, (null).002, etc. really did begin with a NUL
character.
2) Those who rejected the possibility of UNIX producing a filename
beginning with a NUL. This was best explained by guy at auspex.com:
"The UNIX calls to create files, etc. take C-language strings as
arguments, and those strings end with '\0', so a call passed the
characters "\0.001" would assume that the string being passed was a null
string "", NOT a string with a '\0' followed by ".001" "
Consequently, as many suggested, it was most likely that my "(null)"
filenames actually contained the characters '(' 'n' 'u' 'l' 'l' ')'; a
sorted ls listing would still place these before . and .. since '(' is
ASCII 40 while '.' is ASCII 46.
This, as it turned out, is exactly correct -- my files did not contain any
NUL characters in the names; rather, they were named "(null).001",
"(null).002", etc. I had been confused by my attempts to change these
names with commands like
mv (null).001 foo.001
which, of course, generated error messages. The simple solution was to
quote the filename:
mv "(null)".001 foo.001
An additional interesting comment was supplied by Chris Torek
(chris at mimsy.UUCP):
"The other thing to do is fix the software. Probably a 'helpful' C
library is receiving a call of the form
char *p = NULL;
int seq = 0;
...
(void) sprintf(buffer, "%s.%3d", p, seq);
and instead of crashing the program (thus pointing directly to the bug),
it is formatting '%s' with an argument of (char *)0 as the six letter
sequence '(null)'. Suns and 4.3BSD-tahoe machines do this, for instance."
I haven't had a chance to check this yet, but it *is* interesting
to note that my buggy software is running on a Sun 3/110 running SunOS 3.3
(4.2BSD).
Again, thanks to all! Sorry the question wasn't *nearly* as
interesting as it originally seemed!
More information about the Comp.unix.questions
mailing list