X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=support%2Fdirent.c;h=6fb49902d0beef6f1284d781c9e68523fd3cbd33;hb=9c38a62365abfe61a5f67dc7ef2ec5c25f304f2e;hp=4be44d8a1de7807442ce00d2487817e3760019ae;hpb=04cf475e40fbe9e876eb5abb617332b3f3361e43;p=mono.git diff --git a/support/dirent.c b/support/dirent.c index 4be44d8a1de..6fb49902d0b 100644 --- a/support/dirent.c +++ b/support/dirent.c @@ -4,13 +4,14 @@ * Authors: * Jonathan Pryor (jonpryor@vt.edu) * - * Copyright (C) 2004 Jonathan Pryor + * Copyright (C) 2004-2005 Jonathan Pryor */ #include #include #include #include +#include #include "mph.h" @@ -25,39 +26,44 @@ struct Mono_Posix_Syscall__Dirent { }; gint32 -Mono_Posix_Syscall_seekdir (DIR *dir, mph_off_t offset) +Mono_Posix_Syscall_seekdir (void *dir, mph_off_t offset) { mph_return_if_off_t_overflow (offset); errno = 0; - seekdir (dir, (off_t) offset); + seekdir ((DIR*) dir, (off_t) offset); return errno != 0; } mph_off_t -Mono_Posix_Syscall_telldir (DIR *dir) +Mono_Posix_Syscall_telldir (void *dir) { - return telldir (dir); + return telldir ((DIR*) dir); } static void copy_dirent (struct Mono_Posix_Syscall__Dirent *to, struct dirent *from) { + memset (to, 0, sizeof(*to)); + to->d_ino = from->d_ino; -#ifdef MPH_ON_BSD - to->d_off = 0; -#else + to->d_name = strdup (from->d_name); + +#ifdef HAVE_STRUCT_DIRENT_D_OFF to->d_off = from->d_off; #endif +#ifdef HAVE_STRUCT_DIRENT_D_RECLEN to->d_reclen = from->d_reclen; +#endif +#ifdef HAVE_STRUCT_DIRENT_D_TYPE to->d_type = from->d_type; - to->d_name = strdup (from->d_name); +#endif } gint32 -Mono_Posix_Syscall_readdir (DIR *dirp, struct Mono_Posix_Syscall__Dirent *entry) +Mono_Posix_Syscall_readdir (void *dirp, struct Mono_Posix_Syscall__Dirent *entry) { struct dirent *d; @@ -78,7 +84,7 @@ Mono_Posix_Syscall_readdir (DIR *dirp, struct Mono_Posix_Syscall__Dirent *entry) } gint32 -Mono_Posix_Syscall_readdir_r (DIR *dirp, struct Mono_Posix_Syscall__Dirent *entry, void **result) +Mono_Posix_Syscall_readdir_r (void *dirp, struct Mono_Posix_Syscall__Dirent *entry, void **result) { struct dirent _entry; int r; @@ -92,6 +98,14 @@ Mono_Posix_Syscall_readdir_r (DIR *dirp, struct Mono_Posix_Syscall__Dirent *entr return r; } +int +Mono_Posix_Syscall_rewinddir (void* dir) +{ + errno = 0; + rewinddir (dir); + return errno == 0 ? 0 : -1; +} + G_END_DECLS /*