compat / mingw.con commit Windows: A minimal implemention of getpwuid(). (f7597ac)
   1#include "../git-compat-util.h"
   2
   3unsigned int _CRT_fmode = _O_BINARY;
   4
   5#undef open
   6int mingw_open (const char *filename, int oflags, ...)
   7{
   8        va_list args;
   9        unsigned mode;
  10        va_start(args, oflags);
  11        mode = va_arg(args, int);
  12        va_end(args);
  13
  14        if (!strcmp(filename, "/dev/null"))
  15                filename = "nul";
  16        int fd = open(filename, oflags, mode);
  17        if (fd < 0 && (oflags & O_CREAT) && errno == EACCES) {
  18                DWORD attrs = GetFileAttributes(filename);
  19                if (attrs != INVALID_FILE_ATTRIBUTES && (attrs & FILE_ATTRIBUTE_DIRECTORY))
  20                        errno = EISDIR;
  21        }
  22        return fd;
  23}
  24
  25unsigned int sleep (unsigned int seconds)
  26{
  27        Sleep(seconds*1000);
  28        return 0;
  29}
  30
  31int mkstemp(char *template)
  32{
  33        char *filename = mktemp(template);
  34        if (filename == NULL)
  35                return -1;
  36        return open(filename, O_RDWR | O_CREAT, 0600);
  37}
  38
  39int gettimeofday(struct timeval *tv, void *tz)
  40{
  41        return -1;
  42}
  43
  44int poll(struct pollfd *ufds, unsigned int nfds, int timeout)
  45{
  46        return -1;
  47}
  48
  49struct tm *gmtime_r(const time_t *timep, struct tm *result)
  50{
  51        /* gmtime() in MSVCRT.DLL is thread-safe, but not reentrant */
  52        memcpy(result, gmtime(timep), sizeof(struct tm));
  53        return result;
  54}
  55
  56struct tm *localtime_r(const time_t *timep, struct tm *result)
  57{
  58        /* localtime() in MSVCRT.DLL is thread-safe, but not reentrant */
  59        memcpy(result, localtime(timep), sizeof(struct tm));
  60        return result;
  61}
  62
  63#undef getcwd
  64char *mingw_getcwd(char *pointer, int len)
  65{
  66        int i;
  67        char *ret = getcwd(pointer, len);
  68        if (!ret)
  69                return ret;
  70        for (i = 0; pointer[i]; i++)
  71                if (pointer[i] == '\\')
  72                        pointer[i] = '/';
  73        return ret;
  74}
  75
  76struct passwd *getpwuid(int uid)
  77{
  78        static char user_name[100];
  79        static struct passwd p;
  80
  81        DWORD len = sizeof(user_name);
  82        if (!GetUserName(user_name, &len))
  83                return NULL;
  84        p.pw_name = user_name;
  85        p.pw_gecos = "unknown";
  86        p.pw_dir = NULL;
  87        return &p;
  88}
  89
  90int setitimer(int type, struct itimerval *in, struct itimerval *out)
  91{
  92        return -1;
  93}
  94
  95int sigaction(int sig, struct sigaction *in, struct sigaction *out)
  96{
  97        return -1;
  98}