root/compat/win32.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. file_attr_to_st_mode
  2. get_file_attr

#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

/* [<][>][^][v][top][bottom][index][help] */