mirror of
https://github.com/git/git
synced 2024-08-27 11:39:22 +00:00
![Erik Faye-Lund](/assets/img/avatar_default.png)
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 */
|