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