1#include <dirent.h>
2#include <errno.h>
3#include <string.h>
4#include "__dirent.h"
5#include "libc.h"
6
7int readdir_r(DIR *restrict dir, struct dirent *restrict buf, struct dirent **restrict result)
8{
9	struct dirent *de;
10	int errno_save = errno;
11	int ret;
12
13	LOCK(dir->lock);
14	errno = 0;
15	de = readdir(dir);
16	if ((ret = errno)) {
17		UNLOCK(dir->lock);
18		return ret;
19	}
20	errno = errno_save;
21	if (de) memcpy(buf, de, de->d_reclen);
22	else buf = NULL;
23
24	UNLOCK(dir->lock);
25	*result = buf;
26	return 0;
27}
28
29LFS64_2(readdir_r, readdir64_r);
30