| /** | 
 |  * 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; | 
 | } |