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