* Authors:
* Jonathan Pryor (jonpryor@vt.edu)
*
- * Copyright (C) 2004-2005 Jonathan Pryor
+ * Copyright (C) 2004-2006 Jonathan Pryor
*/
+#include <config.h>
+
#ifndef _GNU_SOURCE
#define _GNU_SOURCE
#endif /* ndef _GNU_SOURCE */
return sysconf (name);
}
+#if HAVE_CONFSTR
mph_size_t
Mono_Posix_Syscall_confstr (int name, char *buf, mph_size_t len)
{
return -1;
return confstr (name, buf, (size_t) len);
}
+#endif /* def HAVE_CONFSTR */
#ifdef HAVE_TTYNAME_R
gint32
}
#endif /* ndef HAVE_TTYNAME_R */
-gint32
-Mono_Posix_Syscall_readlink (const char *path, char *buf, mph_size_t len)
+gint64
+Mono_Posix_Syscall_readlink (const char *path, unsigned char *buf, mph_size_t len)
{
- int r;
+ gint64 r;
+ mph_return_if_size_t_overflow (len);
+ r = readlink (path, (char*) buf, (size_t) len);
+ if (r >= 0 && r < len)
+ buf [r] = '\0';
+ return r;
+}
+
+#ifdef HAVE_READLINKAT
+gint64
+Mono_Posix_Syscall_readlinkat (int dirfd, const char *path, unsigned char *buf, mph_size_t len)
+{
+ gint64 r;
mph_return_if_size_t_overflow (len);
- r = readlink (path, buf, (size_t) len);
+ r = readlinkat (dirfd, path, (char*) buf, (size_t) len);
if (r >= 0 && r < len)
buf [r] = '\0';
return r;
}
+#endif /* def HAVE_READLINKAT */
+#if HAVE_GETLOGIN_R
gint32
Mono_Posix_Syscall_getlogin_r (char *buf, mph_size_t len)
{
mph_return_if_size_t_overflow (len);
return getlogin_r (buf, (size_t) len);
}
+#endif /* def HAVE_GETLOGIN_R */
gint32
Mono_Posix_Syscall_gethostname (char *buf, mph_size_t len)
return gethostname (buf, (size_t) len);
}
+#if HAVE_SETHOSTNAME
gint32
Mono_Posix_Syscall_sethostname (const char *name, mph_size_t len)
{
mph_return_if_size_t_overflow (len);
return sethostname (name, (size_t) len);
}
+#endif /* def HAVE_SETHOSTNAME */
+#if HAVE_GETHOSTID
gint64
Mono_Posix_Syscall_gethostid (void)
{
return gethostid ();
}
+#endif /* def HAVE_GETHOSTID */
#ifdef HAVE_SETHOSTID
gint32
}
#endif /* def HAVE_SETDOMAINNAME */
+/* Android implements truncate, but doesn't declare it.
+ * Result is a warning during compilation, so skip it.
+ */
+#ifndef PLATFORM_ANDROID
gint32
Mono_Posix_Syscall_truncate (const char *path, mph_off_t length)
{
mph_return_if_off_t_overflow (length);
return truncate (path, (off_t) length);
}
+#endif
gint32
Mono_Posix_Syscall_ftruncate (int fd, mph_off_t length)
return ftruncate (fd, (off_t) length);
}
+#if HAVE_LOCKF
gint32
Mono_Posix_Syscall_lockf (int fd, int cmd, mph_off_t len)
{
return -1;
return lockf (fd, cmd, (off_t) len);
}
+#endif /* def HAVE_LOCKF */
-void
+#if HAVE_SWAB
+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;
}
+#endif /* def HAVE_SWAB */
+#if HAVE_SETUSERSHELL
int
Mono_Posix_Syscall_setusershell (void)
{
- errno = 0;
setusershell ();
- return errno == 0 ? 0 : -1;
+ return 0;
}
+#endif /* def HAVE_SETUSERSHELL */
+#if HAVE_ENDUSERSHELL
int
Mono_Posix_Syscall_endusershell (void)
{
- errno = 0;
endusershell ();
- return errno == 0 ? 0 : -1;
+ return 0;
}
+#endif /* def HAVE_ENDUSERSHELL */
int
Mono_Posix_Syscall_sync (void)
{
- errno = 0;
sync ();
- return errno == 0 ? 0 : -1;
+ return 0;
}