Posted Mar 29, 2009 10:30 UTC (Sun) by ldo (subscriber, #40946)
[Link]
nix wrote:
Um, if you remove the prohibition on nulls, how do you end the filename? This isn't Pascal.
Nothing to do with Pascal. C is perfectly capable of dealing with arbitrary data bytes, otherwise large parts of both kernel and userland code wouldnt work.
And if you remove the prohibition on slashes, how do you distinguish between a file called foo/bar and a file called bar in a subdirectory foo?
Simple. The kernel-level filesystem calls will not take a full pathname. Instead, they will take a parent directory ID and the name of an item within that directory. Other OSes, like VMS and old MacOS, were doing this sort of thing decades ago.
Full pathname parsing becomes a function of the userland runtime. The kernel no longer cares what the pathname separator, or even what the pathname syntax, might be.
Re: Not A System Problem
Posted Mar 29, 2009 13:54 UTC (Sun) by nix (subscriber, #2304)
[Link]
What you're describing is not POSIX anymore. Every single POSIX app would
need rewriting, for essentially zero gain (ooh, you can't have nulls in
filenames: that's why UTF-8 is *defined* to avoid nulls in filenames).
I'm sure users would love not being able to type in pathnames anymore,
too.
Good luck getting anyone to do it.
Re: Not A System Problem
Posted Mar 29, 2009 19:47 UTC (Sun) by ldo (subscriber, #40946)
[Link]
nix wrote:
What you're describing is not POSIX anymore.
Nothing to do with POSIX. POSIX is a userland API, it doesnt dictate how the kernel should work.
Re: Not A System Problem
Posted Mar 29, 2009 22:32 UTC (Sun) by nix (subscriber, #2304)
[Link]
You don't get it. In order to permit / and \0 as valid filename
characters, syscalls like open() must change. Library calls like fopen()
have to change, because they too accept a \0-terminated string, with /s
separating path components. Every single call in every library that
accepts pathnames has to change. Probably the very notion of a string has
to change to something non-\0-terminated.
So whatever you're describing, userspace cannot any longer use standard
POSIX calls: in fact, it can't any longer use ANSI C calls! I suspect that
such a system would be almost unusable with C, simply because you couldn't
use C string literals for anything.