X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=support%2Fdirent.c;h=50d2f64a8443bd31700edf70fa912262969549ef;hb=5d29a8bf34d597c84e6543233d5c5e86b7c1a22e;hp=ae13bf2ea529bd4a9dfbe053221d5c2712b5a75b;hpb=1c14f1ee6d701510c15499d71fc2b324151a8629;p=mono.git diff --git a/support/dirent.c b/support/dirent.c index ae13bf2ea52..50d2f64a844 100644 --- a/support/dirent.c +++ b/support/dirent.c @@ -11,6 +11,7 @@ #include #include #include +#include #include #include "map.h" @@ -23,11 +24,9 @@ Mono_Posix_Syscall_seekdir (void *dir, mph_off_t offset) { mph_return_if_off_t_overflow (offset); - errno = 0; - seekdir ((DIR*) dir, (off_t) offset); - return errno != 0; + return 0; } mph_off_t @@ -79,24 +78,26 @@ Mono_Posix_Syscall_readdir (void *dirp, struct Mono_Posix_Syscall__Dirent *entry gint32 Mono_Posix_Syscall_readdir_r (void *dirp, struct Mono_Posix_Syscall__Dirent *entry, void **result) { - struct dirent _entry; + struct dirent *_entry = malloc(sizeof(struct dirent) + + MAX(PATH_MAX, NAME_MAX) + 1); int r; - r = readdir_r (dirp, &_entry, (struct dirent**) result); + r = readdir_r (dirp, _entry, (struct dirent**) result); - if (r == 0 && result != NULL) { - copy_dirent (entry, &_entry); + if (r == 0 && *result != NULL) { + copy_dirent (entry, _entry); } + free (_entry); + return r; } int Mono_Posix_Syscall_rewinddir (void* dir) { - errno = 0; rewinddir (dir); - return errno == 0 ? 0 : -1; + return 0; } G_END_DECLS