Yakov Galka wrote:
On Fri, May 16, 2014 at 4:20 PM, Peter Dimov
wrote: Yakov Galka wrote:
relative(x,y) returns a path z (unique up to equivalence), if exists,
such that y / z = x (up to equivalence)
If you allow z to be an absolute path, it'd never be unique when x is absolute, because x would be a trivial solution then.
I think you got it backwords. x is the parameter, z in the solution. So yes, if x is absolute, then z is also absolute and equals x. Uniqueness isn't broken.
I don't think so. x = c:/a/b y = c:/a Want: z such that y / z = x Let z = x "c:/a" / "c:/a/b" = "c:/a/b" = x Ergo, z = x is a solution. Let z = "b" "c:/a" / "b" = "c:/a/b" = x Ergo, z = "b" is a solution. x and "b" are not equivalent, which means that the solution is not unique. (There's also z3 = "/a/b", also an interesting specimen under Windows with respect to the absolute/relative classification.)
But they are read by the Windows API, including SetCurrentDirectory, GetFullPathName, etc... So there is still a per-drive notion of "current directory" in addition to "THE current directory".
They are read but not written. If the environment says that the current directory of D: is D:\foo and you SetCurrentDirectory( "D:\\bar" ), the current directory of D: remains D:\foo in the environment. So D:test was D:\foo\test, becomes D:\bar\test while the current directory is D:\bar, and then reverts to D:\foo\test when the current directory becomes C:\foo. Madness, as I said. No sane person uses such paths. :-) That is not quite in the same category as the encoding, because it affects the path algebra, and encoding does not. On second thought, we already need to distinguish between a/b and /a/b, so perhaps making the distinction between c:a/b and c:/a/b would not be a significant burden.