path: root/compat/mingw.h
diff options
authorErik Faye-Lund <>2010-11-23 18:38:29 (GMT)
committerJunio C Hamano <>2010-11-24 00:06:50 (GMT)
commitd1b6e6e015501272c7491b3a4adf3cd3904edefa (patch)
treeb93cb52156b48591fe6ea5d873528cc9186f8c09 /compat/mingw.h
parente7772600e94146ddbf5ef6b08d0ea7d6fc8fbcad (diff)
win32: use our own dirent.h
The mingw-runtime implemenation of opendir, readdir and closedir sets errno to 0 on success, something that POSIX explicitly forbids. 3ba7a06 ("A loose object is not corrupt if it cannot be read due to EMFILE") introduce a dependency on this behaviour, leading to a broken "git clone" on Windows. compat/mingw.c contains an implementation of readdir, and compat/msvc.c contains implementations of opendir and closedir. Move these to compat/win32/dirent.[ch], and change to our own DIR structure at the same time. This provides a generic Win32-implementation of opendir, readdir and closedir which works on both MinGW and MSVC and does not reset errno, and as a result git clone is working again on Windows. Signed-off-by: Erik Faye-Lund <> Signed-off-by: Junio C Hamano <>
Diffstat (limited to 'compat/mingw.h')
1 files changed, 0 insertions, 29 deletions
diff --git a/compat/mingw.h b/compat/mingw.h
index 99a7467..40434d3 100644
--- a/compat/mingw.h
+++ b/compat/mingw.h
@@ -319,35 +319,6 @@ int main(int argc, const char **argv) \
} \
static int mingw_main(c,v)
- * A replacement of readdir, to ensure that it reads the file type at
- * the same time. This avoid extra unneeded lstats in git on MinGW
- */
-#undef DT_UNKNOWN
-#undef DT_DIR
-#undef DT_REG
-#undef DT_LNK
-#define DT_UNKNOWN 0
-#define DT_DIR 1
-#define DT_REG 2
-#define DT_LNK 3
-struct mingw_dirent
- long d_ino; /* Always zero. */
- union {
- unsigned short d_reclen; /* Always zero. */
- unsigned char d_type; /* Reimplementation adds this */
- };
- unsigned short d_namlen; /* Length of name in d_name. */
- char d_name[FILENAME_MAX]; /* File name. */
-#define dirent mingw_dirent
-#define readdir(x) mingw_readdir(x)
-struct dirent *mingw_readdir(DIR *dir);
* Used by Pthread API implementation for Windows