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"
file_spec.diff
Description: Binary data