[sgen] Use size_t consistently in the major collector for object sizes and number...
[mono.git] / mono / wrapper / wrapper.c
index 56364ac651ac90eb265d1e319b67ccbf17292a91..41885c55dfb200a1ba5d0ed1543cb967acffba6c 100644 (file)
 #include <config.h>
 #include <limits.h>
-
+#include <dirent.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <sys/types.h>
+#ifdef HAVE_UTIME_H
+#include <utime.h>
+#endif
 #include "wrapper.h"
 
+extern char **environ;
+
 gint64
-mono_wrapper_seek (int fd, gint64 offset, gint32 whence)
+mono_wrapper_seek (gpointer fd, gint64 offset, gint32 whence)
 {
+       off_t code;
+
        if (offset > INT_MAX || offset < INT_MIN)
-               return -1;
+               return -EINVAL;
 
-       return lseek (fd, offset, whence);
+       code = lseek ((int)fd, offset, whence);
+       if (code == -1)
+               return -errno;
+       else
+               return code;
 }
 
 gint32
-mono_wrapper_read (int fd, void* buf, gint32 count)
+mono_wrapper_read (gpointer fd, void* buf, gint32 count)
 {
-       return read (fd, buf, count);
+       int n = read ((int)fd, buf, count);
+
+       if (n == -1)
+               return -errno;
+       return n;
 }
 
 gint32
-mono_wrapper_write (int fd, void* buf, gint32 count)
+mono_wrapper_write (gpointer fd, void* buf, gint32 count)
 {
-       return write (fd, buf, count);
+       int n = write ((int)fd, buf, count);
+
+       if (n == -1)
+               return -errno;
+       return n;
 }
 
 gint32
-mono_wrapper_fstat (int fd, MonoWrapperStat* buf)
+mono_wrapper_fstat (gpointer fd, MonoWrapperStat* buf)
 {
        struct stat fs;
 
-       if (fstat (fd, &fs) != 0)
-               return -1;
+       if (fstat ((int)fd, &fs) == -1)
+               return -errno;
 
-       buf->st_dev = fs.st_dev;
-       buf->st_mode = fs.st_mode;
-       buf->st_nlink = fs.st_nlink;
-       buf->st_uid = fs.st_uid;
-       buf->st_gid = fs.st_gid;
-       buf->st_size = fs.st_size;
-       buf->st_atime = fs.st_atime;
-       buf->st_mtime = fs.st_ctime;
-       buf->st_ctime = fs.st_ctime;
+       buf->mst_dev = fs.st_dev;
+       buf->mst_mode = fs.st_mode;
+       buf->mst_nlink = fs.st_nlink;
+       buf->mst_uid = fs.st_uid;
+       buf->mst_gid = fs.st_gid;
+       buf->mst_size = fs.st_size;
+       buf->mst_atime = fs.st_atime;
+       buf->mst_mtime = fs.st_mtime;
+       buf->mst_ctime = fs.st_ctime;
 
        return 0;
 }
 
 gint32
-mono_wrapper_ftruncate (int fd, gint64 length) 
+mono_wrapper_ftruncate (gpointer fd, gint64 length) 
 {
+       int code;
+
        if (length > INT_MAX || length < INT_MIN)
                return -1;
 
-       return ftruncate (fd, length);
+       code = ftruncate ((int)fd, length);
+       if (code == -1)
+               return -errno;
+       return code;
 }
 
-int
+gpointer
 mono_wrapper_open (const char * path, gint32 flags, gint32 mode)
 {
-       return open (path, flags, mode);
+       return (gpointer) open (path, flags, mode);
+}
+
+gint32
+mono_wrapper_close (gpointer fd)
+{
+       return close ((int)fd);
+}
+
+gint32
+mono_wrapper_stat (const char * path, MonoWrapperStat* buf)
+{
+       struct stat fs;
+
+       if (stat (path, &fs) != 0)
+               return errno;
+
+       buf->mst_dev = fs.st_dev;
+       buf->mst_mode = fs.st_mode;
+       buf->mst_nlink = fs.st_nlink;
+       buf->mst_uid = fs.st_uid;
+       buf->mst_gid = fs.st_gid;
+       buf->mst_size = fs.st_size;
+       buf->mst_atime = fs.st_atime;
+       buf->mst_mtime = fs.st_mtime;
+       buf->mst_ctime = fs.st_ctime;
+
+       return 0;
 }
 
 gint32
-mono_wrapper_close (int fd)
+mono_wrapper_unlink (const char * path)
+{
+       if (unlink(path) == -1)
+               return -errno;
+       return 0;
+}
+
+gpointer
+mono_wrapper_opendir (const char * path)
+{
+       return (gpointer)opendir(path);
+}
+
+const char *
+mono_wrapper_readdir (gpointer dir)
 {
-       return close (fd);
+       struct dirent* p;
+
+       p = readdir((DIR*)dir);
+
+       return p != NULL ? p->d_name : NULL;
+}
+
+gint32
+mono_wrapper_closedir (gpointer dir)
+{
+       return closedir((DIR*)dir);
+}
+
+gpointer
+mono_wrapper_getenv (const char * variable)
+{
+       return (gpointer)getenv(variable);
+}
+
+gpointer
+mono_wrapper_environ ()
+{
+       return (gpointer)environ;
+}
+
+int
+mono_wrapper_mkdir (const char *path, int mode)
+{
+#ifndef HOST_WIN32
+       if (mkdir (path, mode) == -1)
+               return -errno;
+#endif
+       return 0;
+}
+
+int
+mono_wrapper_rmdir (const char *path)
+{
+       if (rmdir (path) == -1)
+               return -errno;
+       return 0;
+}
+
+int
+mono_wrapper_rename (const char *src, const char *dst)
+{
+       if (rename (src, dst) == -1)
+               return -errno;
+       return 0;
+}
+
+int
+mono_wrapper_utime (const char *path, int atime, int mtime)
+{
+#ifndef HOST_WIN32
+       struct utimbuf buf;
+
+       buf.actime = atime;
+       buf.modtime = mtime;
+
+       if (utime (path, &buf) == -1)
+               return -errno;
+#endif
+       return 0;
 }