* Authors:
* Jonathan Pryor (jonpryor@vt.edu)
*
- * Copyright (C) 2004 Jonathan Pryor
+ * Copyright (C) 2004-2006 Jonathan Pryor
*/
#ifndef _GNU_SOURCE
#include <fcntl.h>
#include <errno.h>
#include <limits.h>
-
-#include <glib/gtypes.h>
+#include <string.h> /* for swab(3) on Mac OS X */
#include "map.h"
#include "mph.h"
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;
-#ifdef MPH_USE_64_API
- return lseek64 (fd, offset, whence);
-#else
+
return lseek (fd, offset, whence);
-#endif
}
mph_ssize_t
}
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);
{
mph_return_if_size_t_overflow (count);
mph_return_if_off_t_overflow (offset);
-#ifdef MPH_USE_64_API
- return pread64 (fd, buf, (size_t) count, offset);
-#else
+
return pread (fd, buf, (size_t) count, (off_t) offset);
-#endif
}
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);
-#ifdef MPH_USE_64_API
- return pwrite64 (fd, buf, (size_t) count, offset);
-#else
+
return pwrite (fd, buf, (size_t) count, (off_t) offset);
-#endif
}
gint32
return r;
}
-char*
+void*
Mono_Posix_Syscall_getcwd (char *buf, mph_size_t size)
{
mph_return_val_if_size_t_overflow (size, NULL);
}
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);
}
+#ifdef HAVE_TTYNAME_R
gint32
Mono_Posix_Syscall_ttyname_r (int fd, char *buf, mph_size_t len)
{
mph_return_if_size_t_overflow (len);
return ttyname_r (fd, buf, (size_t) len);
}
+#endif /* ndef HAVE_TTYNAME_R */
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
return gethostid ();
}
+#ifdef HAVE_SETHOSTID
gint32
Mono_Posix_Syscall_sethostid (gint64 hostid)
{
mph_return_if_long_overflow (hostid);
+#ifdef MPH_ON_BSD
+ sethostid ((long) hostid);
+ return 0;
+#else
return sethostid ((long) hostid);
+#endif
}
+#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)
{
mph_return_if_off_t_overflow (length);
-#ifdef MPH_USE_64_API
- return truncate64 (path, length);
-#else
return truncate (path, (off_t) length);
-#endif
}
gint32
Mono_Posix_Syscall_ftruncate (int fd, mph_off_t length)
{
mph_return_if_off_t_overflow (length);
-#ifdef MPH_USE_64_API
- return ftruncate64 (fd, length);
-#else
return ftruncate (fd, (off_t) length);
-#endif
}
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;
-#ifdef MPH_USE_64_API
- return lockf64 (fd, cmd, len);
-#else
return lockf (fd, cmd, (off_t) len);
-#endif
}
-void
+int
Mono_Posix_Syscall_swab (void *from, void *to, mph_ssize_t n)
{
- if (n > LONG_MAX || n < LONG_MAX)
- return;
+ if (mph_have_long_overflow (n))
+ 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
/*