Merge pull request #3349 from lambdageek/handle-icalls-in-jit
[mono.git] / support / fcntl.c
index 7914e41dd5777c0719738d4a33d28c964bb2353c..85605d1bc21ddcedb5fdf3cd7a0aff2685cbd4cf 100644 (file)
@@ -30,6 +30,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)
 {
@@ -66,26 +82,16 @@ 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;
 }
@@ -110,6 +116,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)
 {