41 lines
		
	
	
	
		
			878 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			41 lines
		
	
	
	
		
			878 B
		
	
	
	
		
			C
		
	
	
	
	
	
| #ifndef WIN32_H
 | |
| #define WIN32_H
 | |
| 
 | |
| /* common Win32 functions for MinGW and Cygwin */
 | |
| #ifndef GIT_WINDOWS_NATIVE	/* Not defined for Cygwin */
 | |
| #include <windows.h>
 | |
| #endif
 | |
| 
 | |
| static inline int file_attr_to_st_mode (DWORD attr)
 | |
| {
 | |
| 	int fMode = S_IREAD;
 | |
| 	if (attr & FILE_ATTRIBUTE_DIRECTORY)
 | |
| 		fMode |= S_IFDIR;
 | |
| 	else
 | |
| 		fMode |= S_IFREG;
 | |
| 	if (!(attr & FILE_ATTRIBUTE_READONLY))
 | |
| 		fMode |= S_IWRITE;
 | |
| 	return fMode;
 | |
| }
 | |
| 
 | |
| static inline int get_file_attr(const char *fname, WIN32_FILE_ATTRIBUTE_DATA *fdata)
 | |
| {
 | |
| 	if (GetFileAttributesExA(fname, GetFileExInfoStandard, fdata))
 | |
| 		return 0;
 | |
| 
 | |
| 	switch (GetLastError()) {
 | |
| 	case ERROR_ACCESS_DENIED:
 | |
| 	case ERROR_SHARING_VIOLATION:
 | |
| 	case ERROR_LOCK_VIOLATION:
 | |
| 	case ERROR_SHARING_BUFFER_EXCEEDED:
 | |
| 		return EACCES;
 | |
| 	case ERROR_BUFFER_OVERFLOW:
 | |
| 		return ENAMETOOLONG;
 | |
| 	case ERROR_NOT_ENOUGH_MEMORY:
 | |
| 		return ENOMEM;
 | |
| 	default:
 | |
| 		return ENOENT;
 | |
| 	}
 | |
| }
 | |
| 
 | |
| #endif
 |