X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=support%2Fsys-stat.c;h=d71d555b4d1b1c6f97f121d507356c06d35808b8;hb=095e791273a2020c4199575d1b6fee9a2b73e3cf;hp=54d53086801464ef70e413d869a08febd325e57a;hpb=f3b1d7e5eba21eca5b6a2f857f3405ab2182015a;p=mono.git diff --git a/support/sys-stat.c b/support/sys-stat.c index 54d53086801..d71d555b4d1 100644 --- a/support/sys-stat.c +++ b/support/sys-stat.c @@ -22,6 +22,78 @@ G_BEGIN_DECLS +int +Mono_Posix_FromStat (struct Mono_Posix_Stat *from, void *_to) +{ + struct stat *to = _to; + memset (to, 0, sizeof(*to)); + + to->st_dev = from->st_dev; + to->st_ino = from->st_ino; + + unsigned int to_st_mode; + if (Mono_Posix_FromFilePermissions (from->st_mode, &to_st_mode) != 0) { + return -1; + } + + to->st_mode = to_st_mode; + to->st_nlink = from->st_nlink; + to->st_uid = from->st_uid; + to->st_gid = from->st_gid; + to->st_rdev = from->st_rdev; + to->st_size = from->st_size; + to->st_blksize = from->st_blksize; + to->st_blocks = from->st_blocks; + to->st_atime = from->st_atime_; + to->st_mtime = from->st_mtime_; + to->st_ctime = from->st_ctime_; +#ifdef HAVE_STRUCT_STAT_ST_ATIM + to->st_atim.tv_nsec = from->st_atime_nsec; +#endif +#ifdef HAVE_STRUCT_STAT_ST_MTIM + to->st_mtim.tv_nsec = from->st_mtime_nsec; +#endif +#ifdef HAVE_STRUCT_STAT_ST_CTIM + to->st_ctim.tv_nsec = from->st_ctime_nsec; +#endif + + return 0; +} + +int +Mono_Posix_ToStat (void *_from, struct Mono_Posix_Stat *to) +{ + struct stat *from = _from; + memset (to, 0, sizeof(*to)); + + to->st_dev = from->st_dev; + to->st_ino = from->st_ino; + if (Mono_Posix_ToFilePermissions (from->st_mode, &to->st_mode) != 0) { + return -1; + } + to->st_nlink = from->st_nlink; + to->st_uid = from->st_uid; + to->st_gid = from->st_gid; + to->st_rdev = from->st_rdev; + to->st_size = from->st_size; + to->st_blksize = from->st_blksize; + to->st_blocks = from->st_blocks; + to->st_atime_ = from->st_atime; + to->st_mtime_ = from->st_mtime; + to->st_ctime_ = from->st_ctime; +#ifdef HAVE_STRUCT_STAT_ST_ATIM + to->st_atime_nsec = from->st_atim.tv_nsec; +#endif +#ifdef HAVE_STRUCT_STAT_ST_MTIM + to->st_mtime_nsec = from->st_mtim.tv_nsec; +#endif +#ifdef HAVE_STRUCT_STAT_ST_CTIM + to->st_ctime_nsec = from->st_ctim.tv_nsec; +#endif + + return 0; +} + gint32 Mono_Posix_Syscall_stat (const char *file_name, struct Mono_Posix_Stat *buf) {