summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--winsup/utils/ChangeLog4
-rw-r--r--winsup/utils/cygpath.cc15
2 files changed, 15 insertions, 4 deletions
diff --git a/winsup/utils/ChangeLog b/winsup/utils/ChangeLog
index 80b1bfd97..c818a03d9 100644
--- a/winsup/utils/ChangeLog
+++ b/winsup/utils/ChangeLog
@@ -1,3 +1,7 @@
+2006-07-30 Ilya Bobir <ilya@po4ta.com>
+
+ * cygpath.cc (get_long_name): Fallback to get_long_path_name_w32impl.
+
2006-07-27 Corinna Vinschen <corinna@vinschen.de>
* cygpath.c (get_long_name): Cover the case that GetLongPathName
diff --git a/winsup/utils/cygpath.cc b/winsup/utils/cygpath.cc
index 52282a615..96738b186 100644
--- a/winsup/utils/cygpath.cc
+++ b/winsup/utils/cygpath.cc
@@ -241,15 +241,22 @@ get_long_name (const char *filename, DWORD& len)
len = GetLongPathName (filename, buf, MAX_PATH);
if (len == 0)
{
- if (GetLastError () == ERROR_INVALID_PARAMETER)
+ DWORD err = GetLastError ();
+
+ if (err == ERROR_INVALID_PARAMETER)
{
fprintf (stderr, "%s: cannot create long name of %s\n", prog_name,
filename);
exit (2);
}
- buf[0] = '\0';
- strncat (buf, filename, MAX_PATH - 1);
- len = strlen (buf);
+ else if (err == ERROR_FILE_NOT_FOUND)
+ len = get_long_path_name_w32impl (filename, buf, MAX_PATH);
+ else
+ {
+ buf[0] = '\0';
+ strncat (buf, filename, MAX_PATH - 1);
+ len = strlen (buf);
+ }
}
sbuf = (char *) malloc (len + 1);
if (!sbuf)