git://scm.lunaixsky.com
/
lunaix-os.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
refactor: elf parsing utility and exec related
[lunaix-os.git]
/
lunaix-os
/
usr
/
libc
/
readdir.c
diff --git
a/lunaix-os/usr/libc/readdir.c
b/lunaix-os/usr/libc/readdir.c
index 9d2b23ed3b80ef45859155a496fa2ef2328eaa50..f8285b88d2293ab5b70fa392ed13101c3f23a58d 100644
(file)
--- a/
lunaix-os/usr/libc/readdir.c
+++ b/
lunaix-os/usr/libc/readdir.c
@@
-2,6
+2,7
@@
#include <fcntl.h>
#include <string.h>
#include <sys/lxdirent.h>
#include <fcntl.h>
#include <string.h>
#include <sys/lxdirent.h>
+#include <unistd.h>
DIR*
opendir(const char* dir)
DIR*
opendir(const char* dir)
@@
-12,10
+13,28
@@
opendir(const char* dir)
return NULL;
}
return NULL;
}
- _dir = (DIR){ .dirfd = fd
, .prev_res = 0
};
+ _dir = (DIR){ .dirfd = fd };
return &_dir;
}
return &_dir;
}
+int
+closedir(DIR* dirp)
+{
+ if (!dirp || dirp->dirfd == -1) {
+ // TODO migrate the status.h
+ return -1;
+ }
+
+ int err = close(dirp->dirfd);
+
+ if (!err) {
+ dirp->dirfd = -1;
+ return 0;
+ }
+
+ return -1;
+}
+
struct dirent*
readdir(DIR* dir)
{
struct dirent*
readdir(DIR* dir)
{
@@
-24,18
+43,16
@@
readdir(DIR* dir)
return NULL;
}
return NULL;
}
- struct lx_dirent _lxd;
- int more = sys_readdir(dir->dirfd, &_lxd);
+ struct lx_dirent* _lxd = &dir->_lxd;
+
+ int more = sys_readdir(dir->dirfd, _lxd);
- _dirent.d_type = _lxd
.
d_type;
- strncpy(_dirent.d_name, _lxd
.
d_name, 256);
+ _dirent.d_type = _lxd
->
d_type;
+ strncpy(_dirent.d_name, _lxd
->
d_name, 256);
- if (more || dir->prev_res) {
- dir->prev_res = more;
+ if (more) {
return &_dirent;
}
return &_dirent;
}
- if (!dir->prev_res) {
- return NULL;
- }
+ return NULL;
}
\ No newline at end of file
}
\ No newline at end of file