xref: /third_party/musl/src/dirent/readdir_r.c
  • Home
  • History
  • Annotate Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
  • only in /third_party/musl/src/dirent/
1570af302Sopenharmony_ci#include <dirent.h>
2570af302Sopenharmony_ci#include <errno.h>
3570af302Sopenharmony_ci#include <string.h>
4570af302Sopenharmony_ci#include "__dirent.h"
5570af302Sopenharmony_ci#include "lock.h"
6570af302Sopenharmony_ci
7570af302Sopenharmony_ciint readdir_r(DIR *restrict dir, struct dirent *restrict buf, struct dirent **restrict result)
8570af302Sopenharmony_ci{
9570af302Sopenharmony_ci	struct dirent *de;
10570af302Sopenharmony_ci	int errno_save = errno;
11570af302Sopenharmony_ci	int ret;
12570af302Sopenharmony_ci
13570af302Sopenharmony_ci	LOCK(dir->lock);
14570af302Sopenharmony_ci	errno = 0;
15570af302Sopenharmony_ci	de = readdir(dir);
16570af302Sopenharmony_ci	if ((ret = errno)) {
17570af302Sopenharmony_ci		UNLOCK(dir->lock);
18570af302Sopenharmony_ci		return ret;
19570af302Sopenharmony_ci	}
20570af302Sopenharmony_ci	errno = errno_save;
21570af302Sopenharmony_ci	if (de) memcpy(buf, de, de->d_reclen);
22570af302Sopenharmony_ci	else buf = NULL;
23570af302Sopenharmony_ci
24570af302Sopenharmony_ci	UNLOCK(dir->lock);
25570af302Sopenharmony_ci	*result = buf;
26570af302Sopenharmony_ci	return 0;
27570af302Sopenharmony_ci}
28570af302Sopenharmony_ci
29570af302Sopenharmony_ciweak_alias(readdir_r, readdir64_r);
30

Indexes created Thu Nov 07 10:32:03 CST 2024