diff options
Diffstat (limited to 'src/dirent')
-rw-r--r-- | src/dirent/__dirent.h | 2 | ||||
-rw-r--r-- | src/dirent/readdir.c | 5 | ||||
-rw-r--r-- | src/dirent/readdir_r.c | 6 | ||||
-rw-r--r-- | src/dirent/rewinddir.c | 4 | ||||
-rw-r--r-- | src/dirent/seekdir.c | 4 |
5 files changed, 9 insertions, 12 deletions
diff --git a/src/dirent/__dirent.h b/src/dirent/__dirent.h index 07b3ee68..38a27b06 100644 --- a/src/dirent/__dirent.h +++ b/src/dirent/__dirent.h @@ -1,9 +1,9 @@ struct __DIR_s { - int lock; int fd; off_t tell; int buf_pos; int buf_end; + int lock[2]; char buf[2048]; }; diff --git a/src/dirent/readdir.c b/src/dirent/readdir.c index 1aeb25a5..2d27d29a 100644 --- a/src/dirent/readdir.c +++ b/src/dirent/readdir.c @@ -16,10 +16,7 @@ struct dirent *readdir(DIR *dir) if (dir->buf_pos >= dir->buf_end) { int len = __getdents(dir->fd, (void *)dir->buf, sizeof dir->buf); - if (len < 0) { - dir->lock = 0; - return NULL; - } else if (len == 0) return 0; + if (len <= 0) return 0; dir->buf_end = len; dir->buf_pos = 0; } diff --git a/src/dirent/readdir_r.c b/src/dirent/readdir_r.c index 58f60325..d3d7c608 100644 --- a/src/dirent/readdir_r.c +++ b/src/dirent/readdir_r.c @@ -11,18 +11,18 @@ int readdir_r(DIR *dir, struct dirent *buf, struct dirent **result) int errno_save = errno; int ret; - LOCK(&dir->lock); + LOCK(dir->lock); errno = 0; de = readdir(dir); if ((ret = errno)) { - UNLOCK(&dir->lock); + UNLOCK(dir->lock); return ret; } errno = errno_save; if (de) memcpy(buf, de, de->d_reclen); else buf = NULL; - UNLOCK(&dir->lock); + UNLOCK(dir->lock); *result = buf; return 0; } diff --git a/src/dirent/rewinddir.c b/src/dirent/rewinddir.c index c6138f7c..f2053008 100644 --- a/src/dirent/rewinddir.c +++ b/src/dirent/rewinddir.c @@ -5,9 +5,9 @@ void rewinddir(DIR *dir) { - LOCK(&dir->lock); + LOCK(dir->lock); lseek(dir->fd, 0, SEEK_SET); dir->buf_pos = dir->buf_end = 0; dir->tell = 0; - UNLOCK(&dir->lock); + UNLOCK(dir->lock); } diff --git a/src/dirent/seekdir.c b/src/dirent/seekdir.c index 81a0e331..5be47d4a 100644 --- a/src/dirent/seekdir.c +++ b/src/dirent/seekdir.c @@ -5,8 +5,8 @@ void seekdir(DIR *dir, long off) { - LOCK(&dir->lock); + LOCK(dir->lock); dir->tell = lseek(dir->fd, off, SEEK_SET); dir->buf_pos = dir->buf_end = 0; - UNLOCK(&dir->lock); + UNLOCK(dir->lock); } |