mirror of
https://github.com/git/git.git
synced 2024-11-18 21:04:13 +01:00
d1b6e6e015
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 <kusmabite@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
25 lines
504 B
C
25 lines
504 B
C
#ifndef DIRENT_H
|
|
#define DIRENT_H
|
|
|
|
typedef struct DIR DIR;
|
|
|
|
#define DT_UNKNOWN 0
|
|
#define DT_DIR 1
|
|
#define DT_REG 2
|
|
#define DT_LNK 3
|
|
|
|
struct dirent {
|
|
long d_ino; /* Always zero. */
|
|
char d_name[FILENAME_MAX]; /* File name. */
|
|
union {
|
|
unsigned short d_reclen; /* Always zero. */
|
|
unsigned char d_type; /* Reimplementation adds this */
|
|
};
|
|
};
|
|
|
|
DIR *opendir(const char *dirname);
|
|
struct dirent *readdir(DIR *dir);
|
|
int closedir(DIR *dir);
|
|
|
|
#endif /* DIRENT_H */
|