 d1b6e6e015
			
		
	
	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 */
 |