| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- /*
- * <fcntl.h> wrapper functions.
- *
- * Authors:
- * Jonathan Pryor ([email protected])
- *
- * Copyright (C) 2004, 2006 Jonathan Pryor
- */
- #ifndef _GNU_SOURCE
- #define _GNU_SOURCE
- #endif
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <unistd.h>
- #include <fcntl.h>
- #include <errno.h>
- #include "map.h"
- #include "mph.h"
- G_BEGIN_DECLS
- gint32
- Mono_Posix_Syscall_fcntl (gint32 fd, gint32 cmd)
- {
- if (Mono_Posix_FromFcntlCommand (cmd, &cmd) == -1)
- return -1;
- return fcntl (fd, cmd);
- }
- gint32
- Mono_Posix_Syscall_fcntl_arg (gint32 fd, gint32 cmd, gint64 arg)
- {
- long _arg;
- gint32 _cmd;
- mph_return_if_long_overflow (arg);
- #ifdef F_NOTIFY
- if (cmd == F_NOTIFY) {
- int _argi;
- if (Mono_Posix_FromDirectoryNotifyFlags (arg, &_argi) == -1) {
- return -1;
- }
- _arg = _argi;
- }
- else
- #endif
- _arg = (long) arg;
- if (Mono_Posix_FromFcntlCommand (cmd, &_cmd) == -1)
- return -1;
- return fcntl (fd, cmd, _arg);
- }
- gint32
- Mono_Posix_Syscall_fcntl_lock (gint32 fd, gint32 cmd, struct Mono_Posix_Flock *lock)
- {
- struct flock _lock;
- int r;
- if (lock == NULL) {
- errno = EFAULT;
- return -1;
- }
- if (Mono_Posix_FromFlock (lock, &_lock) == -1)
- return -1;
- r = fcntl (fd, cmd, &_lock);
- if (Mono_Posix_ToFlock (&_lock, lock) == -1)
- return -1;
- return r;
- }
- gint32
- Mono_Posix_Syscall_open (const char *pathname, gint32 flags)
- {
- if (Mono_Posix_FromOpenFlags (flags, &flags) == -1)
- return -1;
- return open (pathname, flags);
- }
- gint32
- Mono_Posix_Syscall_open_mode (const char *pathname, gint32 flags, guint32 mode)
- {
- if (Mono_Posix_FromOpenFlags (flags, &flags) == -1)
- return -1;
- if (Mono_Posix_FromFilePermissions (mode, &mode) == -1)
- return -1;
- return open (pathname, flags, mode);
- }
- gint32
- Mono_Posix_Syscall_creat (const char *pathname, guint32 mode)
- {
- if (Mono_Posix_FromFilePermissions (mode, &mode) == -1)
- return -1;
- return creat (pathname, mode);
- }
- #ifdef HAVE_POSIX_FADVISE
- gint32
- Mono_Posix_Syscall_posix_fadvise (gint32 fd, mph_off_t offset, mph_off_t len,
- gint32 advice)
- {
- mph_return_if_off_t_overflow (offset);
- mph_return_if_off_t_overflow (len);
- if (Mono_Posix_FromPosixFadviseAdvice (advice, &advice) == -1)
- return -1;
- return posix_fadvise (fd, (off_t) offset, (off_t) len, advice);
- }
- #endif /* ndef HAVE_POSIX_FADVISE */
- #ifdef HAVE_POSIX_FALLOCATE
- gint32
- Mono_Posix_Syscall_posix_fallocate (gint32 fd, mph_off_t offset, mph_size_t len)
- {
- mph_return_if_off_t_overflow (offset);
- mph_return_if_size_t_overflow (len);
- return posix_fallocate (fd, (off_t) offset, (size_t) len);
- }
- #endif /* ndef HAVE_POSIX_FALLOCATE */
- G_END_DECLS
- /*
- * vim: noexpandtab
- */
|