2 * <fcntl.h> wrapper functions.
5 * Jonathan Pryor (jonpryor@vt.edu)
7 * Copyright (C) 2004 Jonathan Pryor
14 #include <sys/types.h>
25 struct Mono_Posix_Flock {
34 Mono_Posix_Syscall_fcntl (gint32 fd, gint32 cmd)
36 if (Mono_Posix_FromFcntlCommand (cmd, &cmd) == -1)
38 return fcntl (fd, cmd);
42 Mono_Posix_Syscall_fcntl_arg (gint32 fd, gint32 cmd, gint64 arg)
47 mph_return_if_long_overflow (arg);
50 if (cmd == F_NOTIFY) {
52 if (Mono_Posix_FromDirectoryNotifyFlags (arg, &_argi) == -1) {
61 if (Mono_Posix_FromFcntlCommand (cmd, &_cmd) == -1)
63 return fcntl (fd, cmd, _arg);
67 Mono_Posix_Syscall_fcntl_lock (gint32 fd, gint32 cmd, struct Mono_Posix_Flock *lock)
81 mph_return_if_off_t_overflow (lock->l_start);
82 mph_return_if_off_t_overflow (lock->l_len);
84 if (Mono_Posix_FromLockType (lock->l_type, &lock->l_type) == -1)
86 _lock.l_type = lock->l_type;
87 _lock.l_whence = lock->l_whence;
88 _lock.l_start = lock->l_start;
89 _lock.l_len = lock->l_len;
90 _lock.l_pid = lock->l_pid;
92 r = fcntl (fd, cmd, &_lock);
94 if (Mono_Posix_ToLockType (_lock.l_type, &_lock.l_type) == -1)
96 lock->l_type = _lock.l_type;
97 lock->l_whence = _lock.l_whence;
98 lock->l_start = _lock.l_start;
99 lock->l_len = _lock.l_len;
100 lock->l_pid = _lock.l_pid;
106 Mono_Posix_Syscall_open (const char *pathname, gint32 flags)
108 if (Mono_Posix_FromOpenFlags (flags, &flags) == -1)
110 #ifdef MPH_USE_64_API
111 return open64 (pathname, flags);
113 return open (pathname, flags);
118 Mono_Posix_Syscall_open_mode (const char *pathname, gint32 flags, guint32 mode)
120 if (Mono_Posix_FromOpenFlags (flags, &flags) == -1)
122 if (Mono_Posix_FromFilePermissions (mode, &mode) == -1)
124 #ifdef MPH_USE_64_API
125 return open64 (pathname, flags, mode);
127 return open (pathname, flags, mode);
132 Mono_Posix_Syscall_creat (const char *pathname, guint32 mode)
134 if (Mono_Posix_FromFilePermissions (mode, &mode) == -1)
136 #ifdef MPH_USE_64_API
137 return creat64 (pathname, mode);
139 return creat (pathname, mode);
143 #ifdef HAVE_POSIX_FADVISE
145 Mono_Posix_Syscall_posix_fadvise (gint32 fd, mph_off_t offset, mph_off_t len,
148 mph_return_if_off_t_overflow (offset);
149 mph_return_if_off_t_overflow (len);
151 if (Mono_Posix_FromPosixFadviseAdvice (advice, &advice) == -1)
154 #ifdef MPH_USE_64_API
155 return posix_fadvise64 (fd, offset, len, advice);
157 return posix_fadvise (fd, (off_t) offset, (off_t) len, advice);
160 #endif /* ndef HAVE_POSIX_FADVISE */
162 #ifdef HAVE_POSIX_FALLOCATE
164 Mono_Posix_Syscall_posix_fallocate (gint32 fd, mph_off_t offset, mph_size_t len)
166 mph_return_if_off_t_overflow (offset);
167 mph_return_if_size_t_overflow (len);
169 #ifdef MPH_USE_64_API
170 return posix_fallocate64 (fd, offset, len);
172 return posix_fadvise (fd, (off_t) offset, (size_t) len);
175 #endif /* ndef HAVE_POSIX_FALLOCATE */