Prepare Mono for Android NDK with unified headers (#5680)
[mono.git] / support / fcntl.c
index 3e0424cb90135a9b70a0697c58dc6c3d70108794..1fd324e399f1a2b684b81ab99425096f9f3b181c 100644 (file)
@@ -4,7 +4,7 @@
  * Authors:
  *   Jonathan Pryor (jonpryor@vt.edu)
  *
- * Copyright (C) 2004 Jonathan Pryor
+ * Copyright (C) 2004, 2006 Jonathan Pryor
  */
 
 #ifndef _GNU_SOURCE
 
 #include <sys/types.h>
 #include <sys/stat.h>
+#ifdef HAVE_UNISTD_H
 #include <unistd.h>
+#endif
 #include <fcntl.h>
 #include <errno.h>
+#ifdef HOST_WIN32
+#include <corecrt_io.h>
+#endif
 
+#include "mph.h" /* Don't remove or move after map.h! Works around issues with Android SDK unified headers */
 #include "map.h"
-#include "mph.h"
 
 G_BEGIN_DECLS
 
-struct Mono_Posix_Flock {
-       gint16    l_type;
-       gint16    l_whence;
-       mph_off_t l_start;
-       mph_off_t l_len;
-       mph_pid_t l_pid;
-};
-
+#ifndef HOST_WIN32
 gint32
 Mono_Posix_Syscall_fcntl (gint32 fd, gint32 cmd)
 {
@@ -38,6 +36,22 @@ Mono_Posix_Syscall_fcntl (gint32 fd, gint32 cmd)
        return fcntl (fd, cmd);
 }
 
+gint32
+Mono_Posix_Syscall_fcntl_arg_int (gint32 fd, gint32 cmd, int arg)
+{
+       if (Mono_Posix_FromFcntlCommand (cmd, &cmd) == -1)
+               return -1;
+       return fcntl (fd, cmd, arg);
+}
+
+gint32
+Mono_Posix_Syscall_fcntl_arg_ptr (gint32 fd, gint32 cmd, void *arg)
+{
+       if (Mono_Posix_FromFcntlCommand (cmd, &cmd) == -1)
+               return -1;
+       return fcntl (fd, cmd, arg);
+}
+
 gint32
 Mono_Posix_Syscall_fcntl_arg (gint32 fd, gint32 cmd, gint64 arg)
 {
@@ -74,29 +88,20 @@ Mono_Posix_Syscall_fcntl_lock (gint32 fd, gint32 cmd, struct Mono_Posix_Flock *l
                return -1;
        }
 
-       mph_return_if_off_t_overflow (lock->l_start);
-       mph_return_if_off_t_overflow (lock->l_len);
+       if (Mono_Posix_FromFlock (lock, &_lock) == -1)
+               return -1;
 
-       if (Mono_Posix_FromLockType (lock->l_type, &lock->l_type) == -1)
+       if (Mono_Posix_FromFcntlCommand (cmd, &cmd) == -1)
                return -1;
-       _lock.l_type   = lock->l_type;
-       _lock.l_whence = lock->l_whence;
-       _lock.l_start  = lock->l_start;
-       _lock.l_len    = lock->l_len;
-       _lock.l_pid    = lock->l_pid;
 
        r = fcntl (fd, cmd, &_lock);
 
-       if (Mono_Posix_ToLockType (_lock.l_type, &_lock.l_type) == -1)
-               r = -1;
-       lock->l_type   = _lock.l_type;
-       lock->l_whence = _lock.l_whence;
-       lock->l_start  = _lock.l_start;
-       lock->l_len    = _lock.l_len;
-       lock->l_pid    = _lock.l_pid;
+       if (Mono_Posix_ToFlock (&_lock, lock) == -1)
+               return -1;
 
        return r;
 }
+#endif
 
 gint32
 Mono_Posix_Syscall_open (const char *pathname, gint32 flags)
@@ -118,6 +123,16 @@ Mono_Posix_Syscall_open_mode (const char *pathname, gint32 flags, guint32 mode)
        return open (pathname, flags, mode);
 }
 
+gint32
+Mono_Posix_Syscall_get_at_fdcwd ()
+{
+#ifdef AT_FDCWD
+       return AT_FDCWD;
+#else
+       return -1;
+#endif
+}
+
 gint32
 Mono_Posix_Syscall_creat (const char *pathname, guint32 mode)
 {