summaryrefslogtreecommitdiff
path: root/lib/libc/dirent
diff options
context:
space:
mode:
authorKacper <kacper@mail.openlinux.dev>2025-12-07 22:22:16 +0100
committerKacper <kacper@mail.openlinux.dev>2025-12-07 22:22:16 +0100
commit8f9e448b2ef6db7cd905540c21f3c5b190e7a1e7 (patch)
treeae0285dd15042d1e9236a5ce2e60daf65acbdca0 /lib/libc/dirent
parentfc00c656c96528112d05cf0edf8631bd5eaea446 (diff)
Add bin/true and bin/false implementations
- Added assembly implementations for `true` and `false` commands. - Updated Kbuild files to include new binaries. - Removed unused libraries and headers. - Cleaned up makefile and unused code.
Diffstat (limited to 'lib/libc/dirent')
-rw-r--r--lib/libc/dirent/Kbuild6
-rw-r--r--lib/libc/dirent/readdir_r.c14
2 files changed, 14 insertions, 6 deletions
diff --git a/lib/libc/dirent/Kbuild b/lib/libc/dirent/Kbuild
new file mode 100644
index 00000000..355b905c
--- /dev/null
+++ b/lib/libc/dirent/Kbuild
@@ -0,0 +1,6 @@
+obj-y += closedir.o
+obj-y += dirfd.o
+obj-y += fdopendir.o
+obj-y += opendir.o
+obj-y += readdir_r.o
+obj-y += readdir.o
diff --git a/lib/libc/dirent/readdir_r.c b/lib/libc/dirent/readdir_r.c
index 9d8bf49b..98b12426 100644
--- a/lib/libc/dirent/readdir_r.c
+++ b/lib/libc/dirent/readdir_r.c
@@ -29,9 +29,9 @@ int readdir_r(DIR *restrict dirp, struct dirent *restrict entry,
ldir = (void *)(dirp->buffer + dirp->offset);
/* Validate buffer bounds */
- if (dirp->offset >= sizeof(dirp->buffer) ||
- dirp->offset + sizeof(struct linux_dirent64) >
- sizeof(dirp->buffer)) {
+ if (dirp->offset >= (off_t)sizeof(dirp->buffer) ||
+ dirp->offset + (off_t)sizeof(struct linux_dirent64) >
+ (off_t)sizeof(dirp->buffer)) {
dirp->cached = 0;
*result = NULL;
return 0;
@@ -40,7 +40,8 @@ int readdir_r(DIR *restrict dirp, struct dirent *restrict entry,
/* Validate record length */
if (ldir->d_reclen <
offsetof(struct linux_dirent64, d_name) + 1 ||
- dirp->offset + ldir->d_reclen > sizeof(dirp->buffer) ||
+ dirp->offset + (off_t)ldir->d_reclen >
+ (off_t)sizeof(dirp->buffer) ||
ldir->d_reclen == 0) {
dirp->cached = 0;
*result = NULL;
@@ -90,7 +91,7 @@ int readdir_r(DIR *restrict dirp, struct dirent *restrict entry,
nread = ret;
/* Validate first entry bounds */
- if (nread < sizeof(struct linux_dirent64) ||
+ if (nread < (ssize_t)sizeof(struct linux_dirent64) ||
ldir->d_reclen < offsetof(struct linux_dirent64, d_name) + 1 ||
ldir->d_reclen > nread || ldir->d_reclen == 0) {
*result = NULL;
@@ -124,7 +125,8 @@ int readdir_r(DIR *restrict dirp, struct dirent *restrict entry,
(void *)(dirp->buffer + buffer_offset);
/* Validate entry bounds to prevent infinite loops */
- if (buffer_offset + sizeof(struct linux_dirent64) > nread ||
+ if (buffer_offset + (ssize_t)sizeof(struct linux_dirent64) >
+ nread ||
next_ldir->d_reclen <
offsetof(struct linux_dirent64, d_name) + 1 ||
buffer_offset + next_ldir->d_reclen > nread ||