 444dc90322
			
		
	
	444dc90322
	
	
	
		
			
			Some small Win32 specific functions will be shared by MinGW and Cygwin compatibility layer. Place them into a separate header. Signed-off-by: Dmitry Potapov <dpotapov@gmail.com> Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
		
			
				
	
	
		
			35 lines
		
	
	
		
			774 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			35 lines
		
	
	
		
			774 B
		
	
	
	
		
			C
		
	
	
	
	
	
| /* common Win32 functions for MinGW and Cygwin */
 | |
| #include <windows.h>
 | |
| 
 | |
| 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;
 | |
| 	}
 | |
| }
 |