Browse Source
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>maint


2 changed files with 38 additions and 38 deletions
@ -0,0 +1,34 @@
@@ -0,0 +1,34 @@
|
||||
/* 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; |
||||
} |
||||
} |
Loading…
Reference in new issue