cygwin_readlink (const char * name, char * buf, int size)
{
int n = readlink (name, buf, size);
- if (n < 0)
+ if (n < 0 && errno == EINVAL)
{
/* The file may exist, but isn't a symlink. Try to find the
right name. */
if (abslen == 2 || abslen == 3)
{
strncpy (new_path, path, abslen);
+ /* Make sure drive letter is lowercased. */
+ if (abslen == 3)
+ *new_path = tolower (*new_path);
new_path += abslen;
path += abslen;
}
if (n < 0)
{
/* EINVAL means the file exists but isn't a symlink. */
- if (errno != EINVAL)
+#ifdef CYGWIN
+ if (errno != EINVAL && errno != ENOENT)
+#else
+ if (errno != EINVAL)
+#endif
return NULL;
}
else
/* Make sure it's null terminated. */
*new_path = '\0';
-#ifdef WIN32_NATIVE
- if (ABS_LENGTH (resolved_path) == 3)
- /* Lowercase drive letter. */
- *resolved_path = tolower (*resolved_path);
-#endif
return resolved_path;
}