#include <dirent.h> | |
#include <errno.h> | |
#include <string.h> | |
#include "__dirent.h" | |
#include "libc.h" | |
int readdir_r(DIR* restrict dir, | |
struct dirent* restrict buf, | |
struct dirent** restrict result) { | |
struct dirent* de; | |
int errno_save = errno; | |
int ret; | |
LOCK(dir->lock); | |
errno = 0; | |
de = readdir(dir); | |
if ((ret = errno)) { | |
UNLOCK(dir->lock); | |
return ret; | |
} | |
errno = errno_save; | |
if (de) | |
memcpy(buf, de, de->d_reclen); | |
else | |
buf = NULL; | |
UNLOCK(dir->lock); | |
*result = buf; | |
return 0; | |
} |