X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=support%2Funistd.c;h=209c0c1c450c1bae02b7fec90dbdcae168d1d94c;hb=feca28835d4e3cb2be67bdcbd4f54fee62c3797a;hp=c20f29513addfbe2792b2516f100daa548cf4f5a;hpb=0abc2e6270020edc4a5b4c66f93b4ae582815f20;p=mono.git diff --git a/support/unistd.c b/support/unistd.c index c20f29513ad..209c0c1c450 100644 --- a/support/unistd.c +++ b/support/unistd.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 @@ -27,11 +27,7 @@ G_BEGIN_DECLS mph_off_t Mono_Posix_Syscall_lseek (gint32 fd, mph_off_t offset, gint32 whence) { - short _whence; mph_return_if_off_t_overflow (offset); - if (Mono_Posix_FromSeekFlags (whence, &_whence) == -1) - return -1; - whence = _whence; return lseek (fd, offset, whence); } @@ -44,7 +40,7 @@ Mono_Posix_Syscall_read (gint32 fd, void *buf, mph_size_t count) } mph_ssize_t -Mono_Posix_Syscall_write (gint32 fd, const void *buf, mph_size_t count) +Mono_Posix_Syscall_write (gint32 fd, void *buf, mph_size_t count) { mph_return_if_size_t_overflow (count); return write (fd, buf, (size_t) count); @@ -60,7 +56,7 @@ Mono_Posix_Syscall_pread (gint32 fd, void *buf, mph_size_t count, mph_off_t offs } mph_ssize_t -Mono_Posix_Syscall_pwrite (gint32 fd, const void *buf, mph_size_t count, mph_off_t offset) +Mono_Posix_Syscall_pwrite (gint32 fd, void *buf, mph_size_t count, mph_off_t offset) { mph_return_if_size_t_overflow (count); mph_return_if_off_t_overflow (offset); @@ -86,7 +82,7 @@ Mono_Posix_Syscall_pipe (gint32 *reading, gint32 *writing) return r; } -char* +void* Mono_Posix_Syscall_getcwd (char *buf, mph_size_t size) { mph_return_val_if_size_t_overflow (size, NULL); @@ -94,34 +90,37 @@ Mono_Posix_Syscall_getcwd (char *buf, mph_size_t size) } gint64 -Mono_Posix_Syscall_fpathconf (int filedes, int name) +Mono_Posix_Syscall_fpathconf (int filedes, int name, int defaultError) { - if (Mono_Posix_FromPathConf (name, &name) == -1) + errno = defaultError; + if (Mono_Posix_FromPathconfName (name, &name) == -1) return -1; return fpathconf (filedes, name); } gint64 -Mono_Posix_Syscall_pathconf (char *path, int name) +Mono_Posix_Syscall_pathconf (const char *path, int name, int defaultError) { - if (Mono_Posix_FromPathConf (name, &name) == -1) + errno = defaultError; + if (Mono_Posix_FromPathconfName (name, &name) == -1) return -1; return pathconf (path, name); } gint64 -Mono_Posix_Syscall_sysconf (int name) +Mono_Posix_Syscall_sysconf (int name, int defaultError) { - if (Mono_Posix_FromSysConf (name, &name) == -1) + errno = defaultError; + if (Mono_Posix_FromSysconfName (name, &name) == -1) return -1; return sysconf (name); } -gint64 +mph_size_t Mono_Posix_Syscall_confstr (int name, char *buf, mph_size_t len) { mph_return_if_size_t_overflow (len); - if (Mono_Posix_FromConfStr (name, &name) == -1) + if (Mono_Posix_FromConfstrName (name, &name) == -1) return -1; return confstr (name, buf, (size_t) len); } @@ -138,8 +137,12 @@ Mono_Posix_Syscall_ttyname_r (int fd, char *buf, mph_size_t len) gint32 Mono_Posix_Syscall_readlink (const char *path, char *buf, mph_size_t len) { + int r; mph_return_if_size_t_overflow (len); - return readlink (path, buf, (size_t) len); + r = readlink (path, buf, (size_t) len); + if (r >= 0 && r < len) + buf [r] = '\0'; + return r; } gint32 @@ -183,19 +186,23 @@ Mono_Posix_Syscall_sethostid (gint64 hostid) } #endif /* def HAVE_SETHOSTID */ +#ifdef HAVE_GETDOMAINNAME gint32 Mono_Posix_Syscall_getdomainname (char *name, mph_size_t len) { mph_return_if_size_t_overflow (len); return getdomainname (name, (size_t) len); } +#endif /* def HAVE_GETDOMAINNAME */ +#ifdef HAVE_SETDOMAINNAME gint32 Mono_Posix_Syscall_setdomainname (const char *name, mph_size_t len) { mph_return_if_size_t_overflow (len); return setdomainname (name, (size_t) len); } +#endif /* def HAVE_SETDOMAINNAME */ gint32 Mono_Posix_Syscall_truncate (const char *path, mph_off_t length) @@ -215,19 +222,42 @@ gint32 Mono_Posix_Syscall_lockf (int fd, int cmd, mph_off_t len) { mph_return_if_off_t_overflow (len); - if (Mono_Posix_FromLockFlags (cmd, &cmd) == -1) + if (Mono_Posix_FromLockfCommand (cmd, &cmd) == -1) return -1; return lockf (fd, cmd, (off_t) len); } -void +int Mono_Posix_Syscall_swab (void *from, void *to, mph_ssize_t n) { if (mph_have_long_overflow (n)) - return; + return -1; swab (from, to, (ssize_t) n); + return 0; +} + +int +Mono_Posix_Syscall_setusershell (void) +{ + setusershell (); + return 0; } +int +Mono_Posix_Syscall_endusershell (void) +{ + endusershell (); + return 0; +} + +int +Mono_Posix_Syscall_sync (void) +{ + sync (); + return 0; +} + + G_END_DECLS /*