|
From: | Alessandro Vesely |
Subject: | Re: Bug in builtin function abspath |
Date: | Thu, 01 Jun 2006 16:02:22 +0200 |
User-agent: | Thunderbird 1.5.0.2 (Windows/20060308) |
Earnie Boyd wrote:
Quoting Eli Zaretskii <address@hidden>:Date: Wed, 31 May 2006 20:05:55 +0200 From: Andreas =?iso-8859-1?Q?B=FCning?= <address@hidden> CC: grischka <address@hidden>, address@hidden > Andreas, is there a _getdcwd function on OS/2? There is an _abspath(char *out, const char *in, int size) function doing exactly what make's abspath() is supposed to do.What does _abspath do with "d:foo"? That was the case we were discussing.IMO, make should not consider d:foo as a valid path even though the OS does. But in reference to your question, I don't find _abspath or abspath documented and msdn.microsoft.com. Looking in my reference material I found _fullpath which is documented here http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore98/HTML/_crt__fullpath.2c_._wfullpath.asp watch out for the line wrapping.
_fullpath is a wrapper around GetFullPathName: it possibly allocates the buffer and maps errors to errno. Since _fullpath is not in OS/2 either, I'd use GetFullPathName directly. I have some notes/questions about abspath in general and in win32: - abspath does not follow symlinks, thus it does the wrong thing whith, e.g., ./symlink/../not_in_cwd. However, that way it can be applied to the names of not yet existing files. - Windows does not have the equivalent of realpath. - GetFullPathName does not look at the disk but knows the current directory in each drive, much like make's abspath implementation. - There is a GetLongPathName function that nicely recovers the real filename capitalization. It fails like realpath for missing components, but does not remove "." nor ".." and does not resolve NTFS' junctions (symbolic links). Furthermore, GetLongPathName is missing from older include files and may require NewAPIs.h - There is also a GetShortPathName that retrieves the 8.3 form of existing files. Even if it requires that directories exist, its usage does make sense, because it is quite common that full paths contain spaces in Windows. One possibility to cope with the above would use a new function to determine the last directory component that already exists and is either out of starting_directory or on a different drive. Next we apply realpath (on Unix) or GetShortPathName (on Windows) to the first part of the path and then add further components in the same way abspath currently does it. Would that break existing use of abspath?
[Prev in Thread] | Current Thread | [Next in Thread] |