util/os_file: replace broken windows-detection code with detect_os.h
[mesa.git] / src / util / os_file.c
index 128fe872db1f2f42cf6290266b1f46e1488d6fa8..f02d74afd2ca1158e91cfd750defc783c7cbc2f2 100644 (file)
@@ -4,14 +4,14 @@
  */
 
 #include "os_file.h"
+#include "detect_os.h"
 
 #include <errno.h>
 #include <fcntl.h>
 #include <stdlib.h>
 #include <sys/stat.h>
 
-
-#if defined(WIN32)
+#if DETECT_OS_WINDOWS
 #include <io.h>
 #define open _open
 #define fdopen _fdopen
@@ -31,7 +31,7 @@ os_file_create_unique(const char *filename, int filemode)
 }
 
 
-#if defined(__linux__)
+#if DETECT_OS_LINUX
 
 #include <fcntl.h>
 #include <sys/stat.h>
@@ -67,7 +67,7 @@ readN(int fd, char *buf, size_t len)
 }
 
 char *
-os_read_file(const char *filename)
+os_read_file(const char *filename, size_t *size)
 {
    /* Note that this also serves as a slight margin to avoid a 2x grow when
     * the file is just a few bytes larger when we read it than when we
@@ -130,15 +130,22 @@ os_read_file(const char *filename)
 
    buf[offset] = '\0';
 
+   if (size)
+      *size = offset;
+
    return buf;
 }
 
-bool
+int
 os_same_file_description(int fd1, int fd2)
 {
    pid_t pid = getpid();
 
-   return syscall(SYS_kcmp, pid, pid, KCMP_FILE, fd1, fd2) == 0;
+   /* Same file descriptor trivially implies same file description */
+   if (fd1 == fd2)
+      return 0;
+
+   return syscall(SYS_kcmp, pid, pid, KCMP_FILE, fd1, fd2);
 }
 
 #else
@@ -146,21 +153,21 @@ os_same_file_description(int fd1, int fd2)
 #include "u_debug.h"
 
 char *
-os_read_file(const char *filename)
+os_read_file(const char *filename, size_t *size)
 {
    errno = -ENOSYS;
    return NULL;
 }
 
-bool
+int
 os_same_file_description(int fd1, int fd2)
 {
+   /* Same file descriptor trivially implies same file description */
    if (fd1 == fd2)
-      return true;
+      return 0;
 
-   debug_warn_once("Can't tell if different file descriptors reference the same"
-                   " file description, false negatives might cause trouble!\n");
-   return false;
+   /* Otherwise we can't tell */
+   return -1;
 }
 
 #endif