mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-07-03 17:58:30 +00:00
Make more fixes and improvements
- Remove PAGESIZE constant - Fix realloc() documentation - Fix ttyname_r() error reporting - Make forking more reliable on Windows - Make execvp() a few microseconds faster - Make system() a few microseconds faster - Tighten up the socket-related magic numbers - Loosen restrictions on mmap() offset alignment - Improve GetProgramExecutableName() with getenv("_") - Use mkstemp() as basis for mktemp(), tmpfile(), tmpfd() - Fix flakes in pthread_cancel_test, unix_test, fork_test - Fix recently introduced futex stack overflow regression - Let sockets be passed as stdio to subprocesses on Windows - Improve security of bind() on Windows w/ SO_EXCLUSIVEADDRUSE
This commit is contained in:
parent
140a8a52e5
commit
18bb5888e1
311 changed files with 1239 additions and 2622 deletions
|
@ -285,7 +285,9 @@ DIR *opendir(const char *name) {
|
|||
res->zip.offset = GetZipCdirOffset(zip->cdir);
|
||||
res->zip.records = GetZipCdirRecords(zip->cdir);
|
||||
res->zip.prefix = malloc(zipname.len + 2);
|
||||
memcpy(res->zip.prefix, zipname.path, zipname.len);
|
||||
if (zipname.len) {
|
||||
memcpy(res->zip.prefix, zipname.path, zipname.len);
|
||||
}
|
||||
if (zipname.len && res->zip.prefix[zipname.len - 1] != '/') {
|
||||
res->zip.prefix[zipname.len++] = '/';
|
||||
}
|
||||
|
@ -364,7 +366,9 @@ static struct dirent *readdir_impl(DIR *dir) {
|
|||
ent->d_off = dir->zip.offset;
|
||||
ent->d_reclen = MIN(n, 255);
|
||||
ent->d_type = S_ISDIR(mode) ? DT_DIR : DT_REG;
|
||||
memcpy(ent->d_name, s, ent->d_reclen);
|
||||
if (ent->d_reclen) {
|
||||
memcpy(ent->d_name, s, ent->d_reclen);
|
||||
}
|
||||
ent->d_name[ent->d_reclen] = 0;
|
||||
} else {
|
||||
lastent = (struct dirent *)dir->buf;
|
||||
|
@ -377,7 +381,9 @@ static struct dirent *readdir_impl(DIR *dir) {
|
|||
ent->d_off = -1;
|
||||
ent->d_reclen = n;
|
||||
ent->d_type = DT_DIR;
|
||||
memcpy(ent->d_name, s, ent->d_reclen);
|
||||
if (ent->d_reclen) {
|
||||
memcpy(ent->d_name, s, ent->d_reclen);
|
||||
}
|
||||
ent->d_name[ent->d_reclen] = 0;
|
||||
}
|
||||
}
|
||||
|
@ -474,7 +480,9 @@ errno_t readdir_r(DIR *dir, struct dirent *output, struct dirent **result) {
|
|||
return err;
|
||||
}
|
||||
if (entry) {
|
||||
memcpy(output, entry, entry->d_reclen);
|
||||
if (entry->d_reclen) {
|
||||
memcpy(output, entry, entry->d_reclen);
|
||||
}
|
||||
} else {
|
||||
output = 0;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue