X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fwrapper%2Fwrapper.c;h=6ad29668e0407ebf14003cec9e46f62bd709e9ba;hb=d500a604e1bfd87b5e3273785fb5ea3df76acc55;hp=da14d0528da613e4f7ab3764480d2132fc604ad3;hpb=cad5380989fae5664a67c0165cdcb0ae9b85e562;p=mono.git diff --git a/mono/wrapper/wrapper.c b/mono/wrapper/wrapper.c index da14d0528da..6ad29668e04 100644 --- a/mono/wrapper/wrapper.c +++ b/mono/wrapper/wrapper.c @@ -1,69 +1,98 @@ #include #include - +#include +#include +#include +#include +#include +#include +#ifdef HAVE_UTIME_H +#include +#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 (int fd) +mono_wrapper_close (gpointer fd) { - return close (fd); + return close ((int)fd); } gint32 @@ -74,15 +103,15 @@ mono_wrapper_stat (const char * path, MonoWrapperStat* buf) if (stat (path, &fs) != 0) 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; } @@ -90,6 +119,83 @@ mono_wrapper_stat (const char * path, MonoWrapperStat* buf) gint32 mono_wrapper_unlink (const char * path) { - return unlink(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) +{ + 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 PLATFORM_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 PLATFORM_WIN32 + struct utimbuf buf; + + buf.actime = atime; + buf.modtime = mtime; + + if (utime (path, &buf) == -1) + return -errno; +#endif + return 0; }