Here is a new variant of File Spec for the Parrot internals.
I've changed implementation. Made some alternations concerning
with function names. catdir and catfile have become concat_dirnames
and append_filename respectively. Now it will work properly
on Windows, UNIX, VMS, Mac, cygwin, and OS/2(?), I believe.
If you doesn't find your OS on the above-mentioned list, let me know.

Below I'm laying out the semantics of curdir, concat_dirnames,
and append_filename which File Spec is being consistent with.
It would be great if you examined that on whether those functions
do the Right Thing relative to your OS. Also at the moment the patch
works fine for MSVC, though I'd like to know what the other
compilers think about it.


 UNIX, cygwin, OS/2
====================
curdir() = "."

concat_dirnames("", "") = ""
concat_dirnames(null, "") = ""
concat_dirnames("", null) = ""
concat_dirnames(null, null) = ""
concat_dirnames(".", "") = "."
concat_dirnames("", ".") = "."
concat_dirnames(".", ".") = "."
concat_dirnames("a", "") = "a"
concat_dirnames("", "b") = "b"
concat_dirnames("a", ".") = "a"
concat_dirnames(".", "b") = "b"
concat_dirnames("a", "b") = "a/b"
concat_dirnames("a/b", "c") = "a/b/c"

append_filename("", "") = ""
append_filename(null, "") = ""
append_filename("", null) = ""
append_filename(null, null) = ""
append_filename(".", "") = ""
append_filename("a", "") = ""
append_filename("a", "b") = "a/b"


 MS Win32
==========
curdir() = "."

concat_dirnames("", "") = ""
concat_dirnames(null, "") = ""
concat_dirnames("", null) = ""
concat_dirnames(null, null) = ""
concat_dirnames(".", "") = "."
concat_dirnames("", ".") = "."
concat_dirnames(".", ".") = "."
concat_dirnames("a", "") = "a"
concat_dirnames("", "b") = "b"
concat_dirnames("a", ".") = "a"
concat_dirnames(".", "b") = "b"
concat_dirnames("a", "b") = "a\b"
concat_dirnames("a\b", "c") = "a\b\c"

append_filename("", "") = ""
append_filename(null, "") = ""
append_filename("", null) = ""
append_filename(null, null) = ""
append_filename(".", "") = ""
append_filename("a", "") = ""
append_filename("a", "b") = "a\b"


 VMS
=====
curdir() = "[]"

concat_dirnames("", "") = ""
concat_dirnames(null, "") = ""
concat_dirnames("", null) = ""
concat_dirnames(null, null) = ""
concat_dirnames("[]", "") = "[]"
concat_dirnames("", "[]") = "[]"
concat_dirnames("[]", "[]") = "[]"
concat_dirnames("a", "") = "[a]"
concat_dirnames("", "b") = "[b]"
concat_dirnames("a", "[]") = "[a]"
concat_dirnames("[]", "b") = "[b]"
concat_dirnames("a", "b") = "[a.b]"
concat_dirnames("[a.b]", "c") = "[a.b.c]"

append_filename("", "") = ""
append_filename(null, "") = ""
append_filename("", null) = ""
append_filename(null, null) = ""
append_filename("[]", "") = ""
append_filename("[a]", "") = ""
append_filename("[a]", "b") = "[a]b"


 Mac
=====
curdir() = ":"

concat_dirnames("", "") = ""
concat_dirnames(null, "") = ""
concat_dirnames("", null) = ""
concat_dirnames(null, null) = ""
concat_dirnames(":", "") = ":"
concat_dirnames("", ":") = ":"
concat_dirnames(":", ":") = ":"
concat_dirnames("a", "") = ":a"
concat_dirnames("", "b") = ":b"
concat_dirnames("a", ":") = ":a"
concat_dirnames(":", "b") = ":b"
concat_dirnames("a", "b") = ":a:b"
concat_dirnames(":a:b", ":c") = ":a:b:c"

append_filename("", "") = ""
append_filename(null, "") = ""
append_filename("", null) = ""
append_filename(null, null) = ""
append_filename(":", "") = ""
append_filename(":a", "") = ""
append_filename(":a", "b") = ":a:b"

Attachment: file_spec.diff
Description: Binary data

Reply via email to