diff --git a/compat/mingw.c b/compat/mingw.c index fa6f5f4504..ac8b8e0414 100644 --- a/compat/mingw.c +++ b/compat/mingw.c @@ -25,7 +25,27 @@ int fchmod(int fildes, mode_t mode) int lstat(const char *file_name, struct stat *buf) { - return stat(file_name, buf); + int namelen; + static char alt_name[PATH_MAX]; + + if (!stat(file_name, buf)) + return 0; + + /* if file_name ended in a '/', Windows returned ENOENT; + * try again without trailing slashes + */ + if (errno != ENOENT) + return -1; + namelen = strlen(file_name); + if (namelen && file_name[namelen-1] != '/') + return -1; + while (namelen && file_name[namelen-1] == '/') + --namelen; + if (!namelen || namelen >= PATH_MAX) + return -1; + memcpy(alt_name, file_name, namelen); + alt_name[namelen] = 0; + return stat(alt_name, buf); } /* missing: link, mkstemp, fchmod, getuid (?), gettimeofday */