Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Pryor <jpryor@novell.com>2008-10-16 00:20:57 +0400
committerJonathan Pryor <jpryor@novell.com>2008-10-16 00:20:57 +0400
commit4f57ed04a91f45ba007f615e3a5802d4c3e5442c (patch)
tree0a8f548ad20a88aa3043409c94c8ee99d8adae25 /support
parent7c2e41d7ae676fc38a981e4c81cb7dd2769cb2f2 (diff)
* configure.in: Add checks for `struct flock`, `struct timespec`.
* support/fcntl.c: Use Mono_Posix_{From,To}Flock() for flock conversion. * support/Makefile.am: Include <time.h> in map.c. * support/map.c, support/map.h: Flush; adds Flock, Timespec support. svn path=/trunk/mono/; revision=115916
Diffstat (limited to 'support')
-rw-r--r--support/ChangeLog6
-rw-r--r--support/Makefile.am1
-rw-r--r--support/fcntl.c19
-rw-r--r--support/map.c85
-rw-r--r--support/map.h21
5 files changed, 116 insertions, 16 deletions
diff --git a/support/ChangeLog b/support/ChangeLog
index 7e899286d09..7cf8746d893 100644
--- a/support/ChangeLog
+++ b/support/ChangeLog
@@ -1,3 +1,9 @@
+2008-10-15 Jonathan Pryor <jpryor@novell.com>
+
+ * fcntl.c: Use Mono_Posix_{From,To}Flock() for flock conversion.
+ * Makefile.am: Include <time.h> in map.c.
+ * map.c, map.h: Flush; adds Flock, Timespec support.
+
2008-09-14 Carlos Alberto Cortez <calberto.cortez@gmail.com>
* serial.c: When writing bytes and polling, take into account negative
diff --git a/support/Makefile.am b/support/Makefile.am
index 8be4b797844..29c5ddfdca1 100644
--- a/support/Makefile.am
+++ b/support/Makefile.am
@@ -138,6 +138,7 @@ refresh:
--autoconf-header="<syslog.h>" \
--impl-header="<dirent.h>" \
--impl-header="<utime.h>" \
+ --impl-header="<time.h>" \
--impl-header="\"mph.h\"" \
--rename-member=st_atime=st_atime_ \
--rename-member=st_ctime=st_ctime_ \
diff --git a/support/fcntl.c b/support/fcntl.c
index 7914e41dd57..d7e9c481180 100644
--- a/support/fcntl.c
+++ b/support/fcntl.c
@@ -66,26 +66,13 @@ 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_FromLockType (lock->l_type, &lock->l_type) == -1)
+ if (Mono_Posix_FromFlock (lock, &_lock) == -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;
}
diff --git a/support/map.c b/support/map.c
index c4e56d64b55..d4f6b217217 100644
--- a/support/map.c
+++ b/support/map.c
@@ -58,6 +58,7 @@
#endif /* ndef HAVE_SYSLOG_H */
#include <dirent.h>
#include <utime.h>
+#include <time.h>
#include "mph.h"
#include "map.h"
@@ -2523,6 +2524,56 @@ int Mono_Posix_ToFilePermissions (unsigned int x, unsigned int *r)
return 0;
}
+#ifdef HAVE_STRUCT_FLOCK
+int
+Mono_Posix_FromFlock (struct Mono_Posix_Flock *from, struct flock *to)
+{
+ _cnm_return_val_if_overflow (off_t, from->l_start, -1);
+ _cnm_return_val_if_overflow (off_t, from->l_len, -1);
+ _cnm_return_val_if_overflow (pid_t, from->l_pid, -1);
+
+ memset (to, 0, sizeof(*to));
+
+ if (Mono_Posix_FromLockType (from->l_type, &to->l_type) != 0) {
+ return -1;
+ }
+ if (Mono_Posix_FromSeekFlags (from->l_whence, &to->l_whence) != 0) {
+ return -1;
+ }
+ to->l_start = from->l_start;
+ to->l_len = from->l_len;
+ to->l_pid = from->l_pid;
+
+ return 0;
+}
+#endif /* ndef HAVE_STRUCT_FLOCK */
+
+
+#ifdef HAVE_STRUCT_FLOCK
+int
+Mono_Posix_ToFlock (struct flock *from, struct Mono_Posix_Flock *to)
+{
+ _cnm_return_val_if_overflow (gint64, from->l_start, -1);
+ _cnm_return_val_if_overflow (gint64, from->l_len, -1);
+ _cnm_return_val_if_overflow (int, from->l_pid, -1);
+
+ memset (to, 0, sizeof(*to));
+
+ if (Mono_Posix_ToLockType (from->l_type, &to->l_type) != 0) {
+ return -1;
+ }
+ if (Mono_Posix_ToSeekFlags (from->l_whence, &to->l_whence) != 0) {
+ return -1;
+ }
+ to->l_start = from->l_start;
+ to->l_len = from->l_len;
+ to->l_pid = from->l_pid;
+
+ return 0;
+}
+#endif /* ndef HAVE_STRUCT_FLOCK */
+
+
int Mono_Posix_FromLockType (short x, short *r)
{
*r = 0;
@@ -6739,6 +6790,40 @@ int Mono_Posix_ToSyslogOptions (int x, int *r)
return 0;
}
+#ifdef HAVE_STRUCT_TIMESPEC
+int
+Mono_Posix_FromTimespec (struct Mono_Posix_Timespec *from, struct timespec *to)
+{
+ _cnm_return_val_if_overflow (time_t, from->tv_sec, -1);
+ _cnm_return_val_if_overflow (gint64, from->tv_nsec, -1);
+
+ memset (to, 0, sizeof(*to));
+
+ to->tv_sec = from->tv_sec;
+ to->tv_nsec = from->tv_nsec;
+
+ return 0;
+}
+#endif /* ndef HAVE_STRUCT_TIMESPEC */
+
+
+#ifdef HAVE_STRUCT_TIMESPEC
+int
+Mono_Posix_ToTimespec (struct timespec *from, struct Mono_Posix_Timespec *to)
+{
+ _cnm_return_val_if_overflow (gint64, from->tv_sec, -1);
+ _cnm_return_val_if_overflow (gint64, from->tv_nsec, -1);
+
+ memset (to, 0, sizeof(*to));
+
+ to->tv_sec = from->tv_sec;
+ to->tv_nsec = from->tv_nsec;
+
+ return 0;
+}
+#endif /* ndef HAVE_STRUCT_TIMESPEC */
+
+
#ifdef HAVE_STRUCT_TIMEVAL
int
Mono_Posix_FromTimeval (struct Mono_Posix_Timeval *from, struct timeval *to)
diff --git a/support/map.h b/support/map.h
index c8fc8ece817..c913c60eb35 100644
--- a/support/map.h
+++ b/support/map.h
@@ -1379,6 +1379,7 @@ struct Mono_Posix_Syscall__Fstab;
struct Mono_Posix_Syscall__Group;
struct Mono_Posix_Syscall__Passwd;
struct Mono_Posix_Syscall__Utsname;
+struct Mono_Posix_Timespec;
struct Mono_Posix_Timeval;
struct Mono_Posix_Timezone;
struct Mono_Posix_Utimbuf;
@@ -1388,8 +1389,10 @@ struct Mono_Unix_UnixSignal_SignalInfo;
* Inferred Structure Declarations
*/
+struct flock;
struct pollfd;
struct stat;
+struct timespec;
struct timeval;
struct timezone;
struct utimbuf;
@@ -1411,6 +1414,12 @@ struct Mono_Posix_Flock {
int l_pid; /* pid_t */
};
+int
+Mono_Posix_FromFlock (struct Mono_Posix_Flock* from, struct flock *to);
+int
+Mono_Posix_ToFlock (struct flock *from, struct Mono_Posix_Flock* to);
+
+
struct Mono_Posix_Pollfd {
int fd;
short events;
@@ -1509,6 +1518,17 @@ struct Mono_Posix_Syscall__Utsname {
void* _buf_;
};
+struct Mono_Posix_Timespec {
+ gint64 tv_sec; /* time_t */
+ gint64 tv_nsec;
+};
+
+int
+Mono_Posix_FromTimespec (struct Mono_Posix_Timespec* from, struct timespec *to);
+int
+Mono_Posix_ToTimespec (struct timespec *from, struct Mono_Posix_Timespec* to);
+
+
struct Mono_Posix_Timeval {
gint64 tv_sec; /* time_t */
gint64 tv_usec; /* suseconds_t */
@@ -1663,6 +1683,7 @@ void* Mono_Posix_Syscall_mremap (void* old_address, guint64 old_size, guint64 ne
int Mono_Posix_Syscall_msync (void* start, guint64 len, int flags);
int Mono_Posix_Syscall_munlock (void* start, guint64 len);
int Mono_Posix_Syscall_munmap (void* start, guint64 length);
+int Mono_Posix_Syscall_nanosleep (struct Mono_Posix_Timespec* req, struct Mono_Posix_Timespec* rem);
int Mono_Posix_Syscall_open (const char* pathname, int flags);
int Mono_Posix_Syscall_open_mode (const char* pathname, int flags, unsigned int mode);
int Mono_Posix_Syscall_openlog (void* ident, int option, int facility);