> Are you saying: > > concat_dirnames("C:\foo", "bar") == error?
Yes. Even if the file spec tool was smart enough just like you and me it would never be able to unriddle what output it would have to produce as a result of the following call on Mac: concat_dirnames("disk:dir_a", "dir_b"); if "disk" was a disk, then the result should be disk:dir_a:dir_b if "disk" was a directory :disk:dir_a:dir_b Now let's have a look at this call on windows: concat_dirnames("c", "dir_a\dir_b"); Try to guess what I mean by "c" there? A directory or the disk C? I hope it's clear for you now why concat_dirnames() can't glue anything together but dirnames. File Spec is a lack of information on what "disk" and "C" are. That sort of information has to be provided by user. And the user really does that when he/she/it chooses an appropriate function -- concat_dirnames, concat_pathnames, prepend_volume and so forth. > Which isn't clear from the example I gave above since ":mydisk:a" is > ambiguous on MacOS. > > To be clearer: concat_dirnames("b", "/foo") == error. As long as concat_dirnames() will be taught to divine whether its arguments are absolute paths or relative paths, it could easily rotate its arguments so the above-mentioned call would become concat_dirnames("/foo", "b"). At long last the name "concat_" doesn't furnish a security in which order it will glue its arguments. For instance, if we had the append_dirname() function, then yes: append_dirname("b", "/foo") that call is surely fallacious.