windows: fix DWORD format string complaints
[fio.git] / os / windows / posix.c
old mode 100755 (executable)
new mode 100644 (file)
index 488d0ed..9e9f12e
@@ -18,7 +18,7 @@
 #include <sys/mman.h>
 #include <sys/uio.h>
 #include <sys/resource.h>
-#include <sys/poll.h>
+#include <poll.h>
 #include <sys/wait.h>
 #include <setjmp.h>
 
 extern unsigned long mtime_since_now(struct timespec *);
 extern void fio_gettime(struct timespec *, void *);
 
-/* These aren't defined in the MinGW headers */
-HRESULT WINAPI StringCchCopyA(
-  char *pszDest,
-  size_t cchDest,
-  const char *pszSrc);
-
-HRESULT WINAPI StringCchPrintfA(
-  char *pszDest,
-  size_t cchDest,
-  const char *pszFormat,
-  ...);
-
 int win_to_posix_error(DWORD winerr)
 {
-       switch (winerr)
-       {
-       case ERROR_FILE_NOT_FOUND:              return ENOENT;
-       case ERROR_PATH_NOT_FOUND:              return ENOENT;
-       case ERROR_ACCESS_DENIED:               return EACCES;
-       case ERROR_INVALID_HANDLE:              return EBADF;
-       case ERROR_NOT_ENOUGH_MEMORY:   return ENOMEM;
-       case ERROR_INVALID_DATA:                return EINVAL;
-       case ERROR_OUTOFMEMORY:                 return ENOMEM;
-       case ERROR_INVALID_DRIVE:               return ENODEV;
-       case ERROR_NOT_SAME_DEVICE:             return EXDEV;
-       case ERROR_WRITE_PROTECT:               return EROFS;
-       case ERROR_BAD_UNIT:                    return ENODEV;
-       case ERROR_SHARING_VIOLATION:   return EACCES;
-       case ERROR_LOCK_VIOLATION:              return EACCES;
-       case ERROR_SHARING_BUFFER_EXCEEDED:     return ENOLCK;
-       case ERROR_HANDLE_DISK_FULL:    return ENOSPC;
-       case ERROR_NOT_SUPPORTED:               return ENOSYS;
-       case ERROR_FILE_EXISTS:                 return EEXIST;
-       case ERROR_CANNOT_MAKE:                 return EPERM;
-       case ERROR_INVALID_PARAMETER:   return EINVAL;
-       case ERROR_NO_PROC_SLOTS:               return EAGAIN;
-       case ERROR_BROKEN_PIPE:                 return EPIPE;
-       case ERROR_OPEN_FAILED:                 return EIO;
-       case ERROR_NO_MORE_SEARCH_HANDLES:      return ENFILE;
-       case ERROR_CALL_NOT_IMPLEMENTED:        return ENOSYS;
-       case ERROR_INVALID_NAME:                return ENOENT;
-       case ERROR_WAIT_NO_CHILDREN:    return ECHILD;
-       case ERROR_CHILD_NOT_COMPLETE:  return EBUSY;
-       case ERROR_DIR_NOT_EMPTY:               return ENOTEMPTY;
-       case ERROR_SIGNAL_REFUSED:              return EIO;
-       case ERROR_BAD_PATHNAME:                return ENOENT;
-       case ERROR_SIGNAL_PENDING:              return EBUSY;
-       case ERROR_MAX_THRDS_REACHED:   return EAGAIN;
-       case ERROR_BUSY:                                return EBUSY;
-       case ERROR_ALREADY_EXISTS:              return EEXIST;
-       case ERROR_NO_SIGNAL_SENT:              return EIO;
-       case ERROR_FILENAME_EXCED_RANGE:        return EINVAL;
-       case ERROR_META_EXPANSION_TOO_LONG:     return EINVAL;
-       case ERROR_INVALID_SIGNAL_NUMBER:       return EINVAL;
-       case ERROR_THREAD_1_INACTIVE:   return EINVAL;
-       case ERROR_BAD_PIPE:                    return EINVAL;
-       case ERROR_PIPE_BUSY:                   return EBUSY;
-       case ERROR_NO_DATA:                             return EPIPE;
-       case ERROR_MORE_DATA:                   return EAGAIN;
-       case ERROR_DIRECTORY:                   return ENOTDIR;
-       case ERROR_PIPE_CONNECTED:              return EBUSY;
-       case ERROR_NO_TOKEN:                    return EINVAL;
-       case ERROR_PROCESS_ABORTED:             return EFAULT;
-       case ERROR_BAD_DEVICE:                  return ENODEV;
-       case ERROR_BAD_USERNAME:                return EINVAL;
-       case ERROR_OPEN_FILES:                  return EAGAIN;
-       case ERROR_ACTIVE_CONNECTIONS:  return EAGAIN;
-       case ERROR_DEVICE_IN_USE:               return EAGAIN;
-       case ERROR_INVALID_AT_INTERRUPT_TIME:   return EINTR;
-       case ERROR_IO_DEVICE:                   return EIO;
-       case ERROR_NOT_OWNER:                   return EPERM;
-       case ERROR_END_OF_MEDIA:                return ENOSPC;
-       case ERROR_EOM_OVERFLOW:                return ENOSPC;
-       case ERROR_BEGINNING_OF_MEDIA:  return ESPIPE;
-       case ERROR_SETMARK_DETECTED:    return ESPIPE;
-       case ERROR_NO_DATA_DETECTED:    return ENOSPC;
-       case ERROR_POSSIBLE_DEADLOCK:   return EDEADLOCK;
-       case ERROR_CRC:                                 return EIO;
-       case ERROR_NEGATIVE_SEEK:               return EINVAL;
-       case ERROR_DISK_FULL:                   return ENOSPC;
-       case ERROR_NOACCESS:                    return EFAULT;
-       case ERROR_FILE_INVALID:                return ENXIO;
+       switch (winerr) {
+       case ERROR_SUCCESS:
+               return 0;
+       case ERROR_FILE_NOT_FOUND:
+               return ENOENT;
+       case ERROR_PATH_NOT_FOUND:
+               return ENOENT;
+       case ERROR_ACCESS_DENIED:
+               return EACCES;
+       case ERROR_INVALID_HANDLE:
+               return EBADF;
+       case ERROR_NOT_ENOUGH_MEMORY:
+               return ENOMEM;
+       case ERROR_INVALID_DATA:
+               return EINVAL;
+       case ERROR_OUTOFMEMORY:
+               return ENOMEM;
+       case ERROR_INVALID_DRIVE:
+               return ENODEV;
+       case ERROR_NOT_SAME_DEVICE:
+               return EXDEV;
+       case ERROR_WRITE_PROTECT:
+               return EROFS;
+       case ERROR_BAD_UNIT:
+               return ENODEV;
+       case ERROR_NOT_READY:
+               return EAGAIN;
+       case ERROR_SHARING_VIOLATION:
+               return EACCES;
+       case ERROR_LOCK_VIOLATION:
+               return EACCES;
+       case ERROR_SHARING_BUFFER_EXCEEDED:
+               return ENOLCK;
+       case ERROR_HANDLE_DISK_FULL:
+               return ENOSPC;
+       case ERROR_NOT_SUPPORTED:
+               return ENOSYS;
+       case ERROR_FILE_EXISTS:
+               return EEXIST;
+       case ERROR_CANNOT_MAKE:
+               return EPERM;
+       case ERROR_INVALID_PARAMETER:
+               return EINVAL;
+       case ERROR_NO_PROC_SLOTS:
+               return EAGAIN;
+       case ERROR_BROKEN_PIPE:
+               return EPIPE;
+       case ERROR_OPEN_FAILED:
+               return EIO;
+       case ERROR_NO_MORE_SEARCH_HANDLES:
+               return ENFILE;
+       case ERROR_CALL_NOT_IMPLEMENTED:
+               return ENOSYS;
+       case ERROR_INVALID_NAME:
+               return ENOENT;
+       case ERROR_WAIT_NO_CHILDREN:
+               return ECHILD;
+       case ERROR_CHILD_NOT_COMPLETE:
+               return EBUSY;
+       case ERROR_DIR_NOT_EMPTY:
+               return ENOTEMPTY;
+       case ERROR_SIGNAL_REFUSED:
+               return EIO;
+       case ERROR_BAD_PATHNAME:
+               return ENOENT;
+       case ERROR_SIGNAL_PENDING:
+               return EBUSY;
+       case ERROR_MAX_THRDS_REACHED:
+               return EAGAIN;
+       case ERROR_BUSY:
+               return EBUSY;
+       case ERROR_ALREADY_EXISTS:
+               return EEXIST;
+       case ERROR_NO_SIGNAL_SENT:
+               return EIO;
+       case ERROR_FILENAME_EXCED_RANGE:
+               return EINVAL;
+       case ERROR_META_EXPANSION_TOO_LONG:
+               return EINVAL;
+       case ERROR_INVALID_SIGNAL_NUMBER:
+               return EINVAL;
+       case ERROR_THREAD_1_INACTIVE:
+               return EINVAL;
+       case ERROR_BAD_PIPE:
+               return EINVAL;
+       case ERROR_PIPE_BUSY:
+               return EBUSY;
+       case ERROR_NO_DATA:
+               return EPIPE;
+       case ERROR_MORE_DATA:
+               return EAGAIN;
+       case ERROR_DIRECTORY:
+               return ENOTDIR;
+       case ERROR_PIPE_CONNECTED:
+               return EBUSY;
+       case ERROR_NO_TOKEN:
+               return EINVAL;
+       case ERROR_PROCESS_ABORTED:
+               return EFAULT;
+       case ERROR_BAD_DEVICE:
+               return ENODEV;
+       case ERROR_BAD_USERNAME:
+               return EINVAL;
+       case ERROR_OPEN_FILES:
+               return EAGAIN;
+       case ERROR_ACTIVE_CONNECTIONS:
+               return EAGAIN;
+       case ERROR_DEVICE_IN_USE:
+               return EBUSY;
+       case ERROR_INVALID_AT_INTERRUPT_TIME:
+               return EINTR;
+       case ERROR_IO_DEVICE:
+               return EIO;
+       case ERROR_NOT_OWNER:
+               return EPERM;
+       case ERROR_END_OF_MEDIA:
+               return ENOSPC;
+       case ERROR_EOM_OVERFLOW:
+               return ENOSPC;
+       case ERROR_BEGINNING_OF_MEDIA:
+               return ESPIPE;
+       case ERROR_SETMARK_DETECTED:
+               return ESPIPE;
+       case ERROR_NO_DATA_DETECTED:
+               return ENOSPC;
+       case ERROR_POSSIBLE_DEADLOCK:
+               return EDEADLOCK;
+       case ERROR_CRC:
+               return EIO;
+       case ERROR_NEGATIVE_SEEK:
+               return EINVAL;
+       case ERROR_DISK_FULL:
+               return ENOSPC;
+       case ERROR_NOACCESS:
+               return EFAULT;
+       case ERROR_FILE_INVALID:
+               return ENXIO;
+       default:
+               log_err("fio: windows error %lu not handled\n", winerr);
+               return EIO;
        }
 
        return winerr;
@@ -128,7 +188,8 @@ int GetNumLogicalProcessors(void)
                if (error == ERROR_INSUFFICIENT_BUFFER)
                        processor_info = malloc(len);
                else {
-                       log_err("Error: GetLogicalProcessorInformation failed: %d\n", error);
+                       log_err("Error: GetLogicalProcessorInformation failed: %lu\n",
+                               error);
                        return -1;
                }
 
@@ -138,8 +199,7 @@ int GetNumLogicalProcessors(void)
                }
        }
 
-       for (i = 0; i < len / sizeof(SYSTEM_LOGICAL_PROCESSOR_INFORMATION); i++)
-       {
+       for (i = 0; i < len / sizeof(SYSTEM_LOGICAL_PROCESSOR_INFORMATION); i++) {
                if (processor_info[i].Relationship == RelationProcessorCore)
                        num_processors += hweight64(processor_info[i].ProcessorMask);
        }
@@ -155,8 +215,7 @@ long sysconf(int name)
        SYSTEM_INFO sysInfo;
        MEMORYSTATUSEX status;
 
-       switch (name)
-       {
+       switch (name) {
        case _SC_NPROCESSORS_ONLN:
                val = GetNumLogicalProcessors();
                if (val == -1)
@@ -226,27 +285,36 @@ char *dlerror(void)
 /* Copied from http://blogs.msdn.com/b/joshpoley/archive/2007/12/19/date-time-formats-and-conversions.aspx */
 void Time_tToSystemTime(time_t dosTime, SYSTEMTIME *systemTime)
 {
-    FILETIME utcFT;
-    LONGLONG jan1970;
+       FILETIME utcFT;
+       LONGLONG jan1970;
+       SYSTEMTIME tempSystemTime;
 
-    jan1970 = Int32x32To64(dosTime, 10000000) + 116444736000000000;
-    utcFT.dwLowDateTime = (DWORD)jan1970;
-    utcFT.dwHighDateTime = jan1970 >> 32;
+       jan1970 = Int32x32To64(dosTime, 10000000) + 116444736000000000;
+       utcFT.dwLowDateTime = (DWORD)jan1970;
+       utcFT.dwHighDateTime = jan1970 >> 32;
 
-    FileTimeToSystemTime((FILETIME*)&utcFT, systemTime);
+       FileTimeToSystemTime((FILETIME*)&utcFT, &tempSystemTime);
+       SystemTimeToTzSpecificLocalTime(NULL, &tempSystemTime, systemTime);
 }
 
-charctime_r(const time_t *t, char *buf)
+char *ctime_r(const time_t *t, char *buf)
 {
-    SYSTEMTIME systime;
-    const char * const dayOfWeek[] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };
-    const char * const monthOfYear[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
-
-    Time_tToSystemTime(*t, &systime);
-    /* We don't know how long `buf` is, but assume it's rounded up from the minimum of 25 to 32 */
-    StringCchPrintfA(buf, 31, "%s %s %d %02d:%02d:%02d %04d\n", dayOfWeek[systime.wDayOfWeek % 7], monthOfYear[(systime.wMonth - 1) % 12],
-                                                                                systime.wDay, systime.wHour, systime.wMinute, systime.wSecond, systime.wYear);
-    return buf;
+       SYSTEMTIME systime;
+       const char * const dayOfWeek[] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };
+       const char * const monthOfYear[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
+
+       Time_tToSystemTime(*t, &systime);
+
+       /*
+        * We don't know how long `buf` is, but assume it's rounded up from
+        * the minimum of 25 to 32
+        */
+       snprintf(buf, 32, "%s %s %d %02d:%02d:%02d %04d\n",
+                dayOfWeek[systime.wDayOfWeek % 7],
+                monthOfYear[(systime.wMonth - 1) % 12],
+                systime.wDay, systime.wHour, systime.wMinute,
+                systime.wSecond, systime.wYear);
+       return buf;
 }
 
 int gettimeofday(struct timeval *restrict tp, void *restrict tzp)
@@ -273,8 +341,7 @@ int gettimeofday(struct timeval *restrict tp, void *restrict tzp)
        return 0;
 }
 
-int sigaction(int sig, const struct sigaction *act,
-               struct sigaction *oact)
+int sigaction(int sig, const struct sigaction *act, struct sigaction *oact)
 {
        int rc = 0;
        void (*prev_handler)(int);
@@ -289,13 +356,12 @@ int sigaction(int sig, const struct sigaction *act,
        return rc;
 }
 
-int lstat(const char * path, struct stat * buf)
+int lstat(const char *path, struct stat *buf)
 {
        return stat(path, buf);
 }
 
-void *mmap(void *addr, size_t len, int prot, int flags,
-               int fildes, off_t off)
+void *mmap(void *addr, size_t len, int prot, int flags, int fildes, off_t off)
 {
        DWORD vaProt = 0;
        DWORD mapAccess = 0;
@@ -321,25 +387,20 @@ void *mmap(void *addr, size_t len, int prot, int flags,
        lenhigh = len >> 16;
        /* If the low DWORD is zero and the high DWORD is non-zero, `CreateFileMapping`
           will return ERROR_INVALID_PARAMETER. To avoid this, set both to zero. */
-       if (lenlow == 0) {
+       if (lenlow == 0)
                lenhigh = 0;
-       }
 
-       if (flags & MAP_ANON || flags & MAP_ANONYMOUS)
-       {
+       if (flags & MAP_ANON || flags & MAP_ANONYMOUS) {
                allocAddr = VirtualAlloc(addr, len, MEM_COMMIT, vaProt);
                if (allocAddr == NULL)
                        errno = win_to_posix_error(GetLastError());
-       }
-       else
-       {
-               hMap = CreateFileMapping((HANDLE)_get_osfhandle(fildes), NULL, vaProt, lenhigh, lenlow, NULL);
+       } else {
+               hMap = CreateFileMapping((HANDLE)_get_osfhandle(fildes), NULL,
+                                               vaProt, lenhigh, lenlow, NULL);
 
                if (hMap != NULL)
-               {
-                       allocAddr = MapViewOfFile(hMap, mapAccess, off >> 16, off & 0xFFFF, len);
-               }
-
+                       allocAddr = MapViewOfFile(hMap, mapAccess, off >> 16,
+                                                       off & 0xFFFF, len);
                if (hMap == NULL || allocAddr == NULL)
                        errno = win_to_posix_error(GetLastError());
 
@@ -358,9 +419,7 @@ int munmap(void *addr, size_t len)
        success = UnmapViewOfFile(addr);
 
        if (!success)
-       {
                success = VirtualFree(addr, 0, MEM_RELEASE);
-       }
 
        return !success;
 }
@@ -388,8 +447,12 @@ static HANDLE log_file = INVALID_HANDLE_VALUE;
 
 void openlog(const char *ident, int logopt, int facility)
 {
-       if (log_file == INVALID_HANDLE_VALUE)
-               log_file = CreateFileA("syslog.txt", GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, 0, NULL);
+       if (log_file != INVALID_HANDLE_VALUE)
+               return;
+
+       log_file = CreateFileA("syslog.txt", GENERIC_WRITE,
+                               FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
+                               OPEN_ALWAYS, 0, NULL);
 }
 
 void closelog(void)
@@ -406,7 +469,9 @@ void syslog(int priority, const char *message, ... /* argument */)
        DWORD bytes_written;
 
        if (log_file == INVALID_HANDLE_VALUE) {
-               log_file = CreateFileA("syslog.txt", GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, 0, NULL);
+               log_file = CreateFileA("syslog.txt", GENERIC_WRITE,
+                                       FILE_SHARE_READ | FILE_SHARE_WRITE,
+                                       NULL, OPEN_ALWAYS, 0, NULL);
        }
 
        if (log_file == INVALID_HANDLE_VALUE) {
@@ -481,8 +546,7 @@ int clock_gettime(clockid_t clock_id, struct timespec *tp)
 {
        int rc = 0;
 
-       if (clock_id == CLOCK_MONOTONIC)
-       {
+       if (clock_id == CLOCK_MONOTONIC) {
                static LARGE_INTEGER freq = {{0,0}};
                LARGE_INTEGER counts;
                uint64_t t;
@@ -501,9 +565,7 @@ int clock_gettime(clockid_t clock_id, struct timespec *tp)
                 * and then divide by the frequency. */
                t *= 1000000000;
                tp->tv_nsec = t / freq.QuadPart;
-       }
-       else if (clock_id == CLOCK_REALTIME)
-       {
+       } else if (clock_id == CLOCK_REALTIME) {
                /* clock_gettime(CLOCK_REALTIME,...) is just an alias for gettimeofday with a
                 * higher-precision field. */
                struct timeval tv;
@@ -550,6 +612,7 @@ int mlock(const void * addr, size_t len)
 int munlock(const void * addr, size_t len)
 {
        BOOL success = VirtualUnlock((LPVOID)addr, len);
+
        if (!success) {
                errno = win_to_posix_error(GetLastError());
                return -1;
@@ -584,7 +647,8 @@ char *basename(char *path)
        while (path[i] != '\\' && path[i] != '/' && i >= 0)
                i--;
 
-       strncpy(name, path + i + 1, MAX_PATH);
+       name[MAX_PATH - 1] = '\0';
+       strncpy(name, path + i + 1, MAX_PATH - 1);
 
        return name;
 }
@@ -608,22 +672,26 @@ int shmget(key_t key, size_t size, int shmflg)
        int mapid = -1;
        uint32_t size_low = size & 0xFFFFFFFF;
        uint32_t size_high = ((uint64_t)size) >> 32;
-       HANDLE hMapping = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, (PAGE_EXECUTE_READWRITE | SEC_RESERVE), size_high, size_low, NULL);
+       HANDLE hMapping;
+
+       hMapping = CreateFileMapping(INVALID_HANDLE_VALUE, NULL,
+                                       PAGE_EXECUTE_READWRITE | SEC_RESERVE,
+                                       size_high, size_low, NULL);
        if (hMapping != NULL) {
                fileMappings[nFileMappings] = hMapping;
                mapid = nFileMappings;
                nFileMappings++;
-       } else {
+       } else
                errno = ENOSYS;
-       }
 
        return mapid;
 }
 
 void *shmat(int shmid, const void *shmaddr, int shmflg)
 {
-       voidmapAddr;
+       void *mapAddr;
        MEMORY_BASIC_INFORMATION memInfo;
+
        mapAddr = MapViewOfFile(fileMappings[shmid], FILE_MAP_ALL_ACCESS, 0, 0, 0);
        if (mapAddr == NULL) {
                errno = win_to_posix_error(GetLastError());
@@ -659,9 +727,9 @@ int shmctl(int shmid, int cmd, struct shmid_ds *buf)
        if (cmd == IPC_RMID) {
                fileMappings[shmid] = INVALID_HANDLE_VALUE;
                return 0;
-       } else {
-               log_err("%s is not implemented\n", __func__);
        }
+
+       log_err("%s is not implemented\n", __func__);
        errno = ENOSYS;
        return -1;
 }
@@ -683,7 +751,7 @@ int setgid(gid_t gid)
 int nice(int incr)
 {
        DWORD prioclass = NORMAL_PRIORITY_CLASS;
-       
+
        if (incr < -15)
                prioclass = HIGH_PRIORITY_CLASS;
        else if (incr < 0)
@@ -692,7 +760,7 @@ int nice(int incr)
                prioclass = IDLE_PRIORITY_CLASS;
        else if (incr > 0)
                prioclass = BELOW_NORMAL_PRIORITY_CLASS;
-       
+
        if (!SetPriorityClass(GetCurrentProcess(), prioclass))
                log_err("fio: SetPriorityClass failed\n");
 
@@ -750,6 +818,7 @@ ssize_t pwrite(int fildes, const void *buf, size_t nbyte,
 {
        int64_t pos = _telli64(fildes);
        ssize_t len = _write(fildes, buf, nbyte);
+
        _lseeki64(fildes, pos, SEEK_SET);
        return len;
 }
@@ -758,6 +827,7 @@ ssize_t pread(int fildes, void *buf, size_t nbyte, off_t offset)
 {
        int64_t pos = _telli64(fildes);
        ssize_t len = read(fildes, buf, nbyte);
+
        _lseeki64(fildes, pos, SEEK_SET);
        return len;
 }
@@ -773,11 +843,12 @@ ssize_t writev(int fildes, const struct iovec *iov, int iovcnt)
 {
        int i;
        DWORD bytes_written = 0;
-       for (i = 0; i < iovcnt; i++)
-       {
-               int len = send((SOCKET)fildes, iov[i].iov_base, iov[i].iov_len, 0);
-               if (len == SOCKET_ERROR)
-               {
+
+       for (i = 0; i < iovcnt; i++) {
+               int len;
+
+               len = send((SOCKET)fildes, iov[i].iov_base, iov[i].iov_len, 0);
+               if (len == SOCKET_ERROR) {
                        DWORD err = GetLastError();
                        errno = win_to_posix_error(err);
                        bytes_written = -1;
@@ -789,8 +860,7 @@ ssize_t writev(int fildes, const struct iovec *iov, int iovcnt)
        return bytes_written;
 }
 
-long long strtoll(const char *restrict str, char **restrict endptr,
-               int base)
+long long strtoll(const char *restrict str, char **restrict endptr, int base)
 {
        return _strtoi64(str, endptr, base);
 }
@@ -813,9 +883,8 @@ int poll(struct pollfd fds[], nfds_t nfds, int timeout)
        FD_ZERO(&writefds);
        FD_ZERO(&exceptfds);
 
-       for (i = 0; i < nfds; i++)
-       {
-               if (fds[i].fd < 0) {
+       for (i = 0; i < nfds; i++) {
+               if (fds[i].fd == INVALID_SOCKET) {
                        fds[i].revents = 0;
                        continue;
                }
@@ -831,11 +900,9 @@ int poll(struct pollfd fds[], nfds_t nfds, int timeout)
        rc = select(nfds, &readfds, &writefds, &exceptfds, to);
 
        if (rc != SOCKET_ERROR) {
-               for (i = 0; i < nfds; i++)
-               {
-                       if (fds[i].fd < 0) {
+               for (i = 0; i < nfds; i++) {
+                       if (fds[i].fd == INVALID_SOCKET)
                                continue;
-                       }
 
                        if ((fds[i].events & POLLIN) && FD_ISSET(fds[i].fd, &readfds))
                                fds[i].revents |= POLLIN;
@@ -881,13 +948,15 @@ int nanosleep(const struct timespec *rqtp, struct timespec *rmtp)
 DIR *opendir(const char *dirname)
 {
        struct dirent_ctx *dc = NULL;
+       HANDLE file;
 
        /* See if we can open it. If not, we'll return an error here */
-       HANDLE file = CreateFileA(dirname, 0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);
+       file = CreateFileA(dirname, 0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
+                               OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);
        if (file != INVALID_HANDLE_VALUE) {
                CloseHandle(file);
-               dc = (struct dirent_ctx*)malloc(sizeof(struct dirent_ctx));
-               StringCchCopyA(dc->dirname, MAX_PATH, dirname);
+               dc = malloc(sizeof(struct dirent_ctx));
+               snprintf(dc->dirname, sizeof(dc->dirname), "%s", dirname);
                dc->find_handle = INVALID_HANDLE_VALUE;
        } else {
                DWORD error = GetLastError();
@@ -926,7 +995,9 @@ struct dirent *readdir(DIR *dirp)
 
        if (dirp->find_handle == INVALID_HANDLE_VALUE) {
                char search_pattern[MAX_PATH];
-               StringCchPrintfA(search_pattern, MAX_PATH-1, "%s\\*", dirp->dirname);
+
+               snprintf(search_pattern, sizeof(search_pattern), "%s\\*",
+                        dirp->dirname);
                dirp->find_handle = FindFirstFileA(search_pattern, &find_data);
                if (dirp->find_handle == INVALID_HANDLE_VALUE)
                        return NULL;
@@ -935,7 +1006,7 @@ struct dirent *readdir(DIR *dirp)
                        return NULL;
        }
 
-       StringCchCopyA(de.d_name, MAX_PATH, find_data.cFileName);
+       snprintf(de.d_name, sizeof(de.d_name), find_data.cFileName);
        de.d_ino = 0;
 
        return &de;
@@ -956,8 +1027,9 @@ in_addr_t inet_network(const char *cp)
        return hbo;
 }
 
-const char* inet_ntop(int af, const void *restrict src,
-               char *restrict dst, socklen_t size)
+#ifdef CONFIG_WINDOWS_XP
+const char *inet_ntop(int af, const void *restrict src, char *restrict dst,
+                     socklen_t size)
 {
        INT status = SOCKET_ERROR;
        WSADATA wsd;
@@ -973,6 +1045,7 @@ const char* inet_ntop(int af, const void *restrict src,
        if (af == AF_INET) {
                struct sockaddr_in si;
                DWORD len = size;
+
                memset(&si, 0, sizeof(si));
                si.sin_family = af;
                memcpy(&si.sin_addr, src, sizeof(si.sin_addr));
@@ -980,6 +1053,7 @@ const char* inet_ntop(int af, const void *restrict src,
        } else if (af == AF_INET6) {
                struct sockaddr_in6 si6;
                DWORD len = size;
+
                memset(&si6, 0, sizeof(si6));
                si6.sin6_family = af;
                memcpy(&si6.sin6_addr, src, sizeof(si6.sin6_addr));
@@ -1012,6 +1086,7 @@ int inet_pton(int af, const char *restrict src, void *restrict dst)
        if (af == AF_INET) {
                struct sockaddr_in si;
                INT len = sizeof(si);
+
                memset(&si, 0, sizeof(si));
                si.sin_family = af;
                status = WSAStringToAddressA((char*)src, af, NULL, (struct sockaddr*)&si, &len);
@@ -1020,6 +1095,7 @@ int inet_pton(int af, const char *restrict src, void *restrict dst)
        } else if (af == AF_INET6) {
                struct sockaddr_in6 si6;
                INT len = sizeof(si6);
+
                memset(&si6, 0, sizeof(si6));
                si6.sin6_family = af;
                status = WSAStringToAddressA((char*)src, af, NULL, (struct sockaddr*)&si6, &len);
@@ -1036,3 +1112,4 @@ int inet_pton(int af, const char *restrict src, void *restrict dst)
 
        return ret;
 }
+#endif /* CONFIG_WINDOWS_XP */