summaryrefslogtreecommitdiff
path: root/src/dirent
diff options
context:
space:
mode:
Diffstat (limited to 'src/dirent')
-rw-r--r--src/dirent/__dirent.h2
-rw-r--r--src/dirent/readdir.c5
-rw-r--r--src/dirent/readdir_r.c6
-rw-r--r--src/dirent/rewinddir.c4
-rw-r--r--src/dirent/seekdir.c4
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);
}