X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=support%2Ffcntl.c;h=1fd324e399f1a2b684b81ab99425096f9f3b181c;hb=ef7a4c06206976de7ef2e974267407347ddb75a4;hp=3e0424cb90135a9b70a0697c58dc6c3d70108794;hpb=c39d7ce9985a7067c1cbf44188007c9433901940;p=mono.git diff --git a/support/fcntl.c b/support/fcntl.c index 3e0424cb901..1fd324e399f 100644 --- a/support/fcntl.c +++ b/support/fcntl.c @@ -4,7 +4,7 @@ * Authors: * Jonathan Pryor (jonpryor@vt.edu) * - * Copyright (C) 2004 Jonathan Pryor + * Copyright (C) 2004, 2006 Jonathan Pryor */ #ifndef _GNU_SOURCE @@ -13,23 +13,21 @@ #include #include +#ifdef HAVE_UNISTD_H #include +#endif #include #include +#ifdef HOST_WIN32 +#include +#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) {