1*c9945492SAndroid Build Coastguard Worker #include <dirent.h> 2*c9945492SAndroid Build Coastguard Worker #include <errno.h> 3*c9945492SAndroid Build Coastguard Worker #include <stddef.h> 4*c9945492SAndroid Build Coastguard Worker #include "__dirent.h" 5*c9945492SAndroid Build Coastguard Worker #include "syscall.h" 6*c9945492SAndroid Build Coastguard Worker 7*c9945492SAndroid Build Coastguard Worker typedef char dirstream_buf_alignment_check[1-2*(int)( 8*c9945492SAndroid Build Coastguard Worker offsetof(struct __dirstream, buf) % sizeof(off_t))]; 9*c9945492SAndroid Build Coastguard Worker readdir(DIR * dir)10*c9945492SAndroid Build Coastguard Workerstruct dirent *readdir(DIR *dir) 11*c9945492SAndroid Build Coastguard Worker { 12*c9945492SAndroid Build Coastguard Worker struct dirent *de; 13*c9945492SAndroid Build Coastguard Worker 14*c9945492SAndroid Build Coastguard Worker if (dir->buf_pos >= dir->buf_end) { 15*c9945492SAndroid Build Coastguard Worker int len = __syscall(SYS_getdents, dir->fd, dir->buf, sizeof dir->buf); 16*c9945492SAndroid Build Coastguard Worker if (len <= 0) { 17*c9945492SAndroid Build Coastguard Worker if (len < 0 && len != -ENOENT) errno = -len; 18*c9945492SAndroid Build Coastguard Worker return 0; 19*c9945492SAndroid Build Coastguard Worker } 20*c9945492SAndroid Build Coastguard Worker dir->buf_end = len; 21*c9945492SAndroid Build Coastguard Worker dir->buf_pos = 0; 22*c9945492SAndroid Build Coastguard Worker } 23*c9945492SAndroid Build Coastguard Worker de = (void *)(dir->buf + dir->buf_pos); 24*c9945492SAndroid Build Coastguard Worker dir->buf_pos += de->d_reclen; 25*c9945492SAndroid Build Coastguard Worker dir->tell = de->d_off; 26*c9945492SAndroid Build Coastguard Worker return de; 27*c9945492SAndroid Build Coastguard Worker } 28