diff options
| author | Kacper <kacper@mail.openlinux.dev> | 2025-12-07 22:22:16 +0100 |
|---|---|---|
| committer | Kacper <kacper@mail.openlinux.dev> | 2025-12-07 22:22:16 +0100 |
| commit | 8f9e448b2ef6db7cd905540c21f3c5b190e7a1e7 (patch) | |
| tree | ae0285dd15042d1e9236a5ce2e60daf65acbdca0 /lib/libc/dirent/readdir_r.c | |
| parent | fc00c656c96528112d05cf0edf8631bd5eaea446 (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/readdir_r.c')
| -rw-r--r-- | lib/libc/dirent/readdir_r.c | 14 |
1 files changed, 8 insertions, 6 deletions
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 || |
