| /** |
| * This file has no copyright assigned and is placed in the Public Domain. |
| * This file is part of the mingw-w64 runtime package. |
| * No warranty is given; refer to the file DISCLAIMER.PD within this package. |
| */ |
| |
| #include <sys/stat.h> |
| #include <stdlib.h> |
| #include <errno.h> |
| #include "__mingw_fix_stat.h" |
| |
| int __mingw_fix_stat_finish(int ret, const void *orig_path, void *used_path, |
| unsigned short mode) |
| { |
| /* |
| * If the original pathname and used pathname differ, it means that |
| * __mingw_fix_stat_path or __mingw_fix_wstat_path had to allocate |
| * a temporary buffer and remove a trailing directory separator. |
| * In this case the temporary allocation has to be freed, and the |
| * stat function succeeds only if the pathname was a directory. |
| */ |
| if (orig_path != used_path) { |
| /* Save errno because we call free. */ |
| int saved_errno = errno; |
| free(used_path); |
| |
| if (ret == 0 && !S_ISDIR(mode)) { |
| ret = -1; |
| saved_errno = ENOTDIR; |
| } |
| |
| errno = saved_errno; |
| } |
| |
| return ret; |
| } |