Make ZipOS and Qemu work better

This change improves the dirstream library in a lot of respects,
especially for /zip/... files. Also turn off MAP_STACK on Aarch64
because Qemu seems to implement it differently than Linux and it's
probably responsible for a lot of mysterious crashes.
This commit is contained in:
Justine Tunney 2023-08-15 18:24:53 -07:00
parent 4658ae539f
commit 110559ce6a
No known key found for this signature in database
GPG key ID: BE714B4575D6E328
48 changed files with 748 additions and 500 deletions

View file

@ -35,7 +35,6 @@ void SetUpOnce(void) {
}
TEST(access, efault) {
ASSERT_SYS(EFAULT, -1, access(0, F_OK));
if (IsWindows() || !IsAsan()) return; // not possible
ASSERT_SYS(EFAULT, -1, access((void *)77, F_OK));
}

View file

@ -71,6 +71,15 @@ TEST(read_pipe, canBeInterruptedByAlarm) {
close(fds[0]);
}
TEST(read_directory, eisdir) {
// TODO(jart): what
if (IsWindows() || IsFreebsd()) return;
ASSERT_SYS(0, 0, mkdir("boop", 0755));
ASSERT_SYS(0, 3, open("boop", O_RDONLY | O_DIRECTORY));
ASSERT_SYS(EISDIR, -1, read(3, 0, 0));
ASSERT_SYS(0, 0, close(3));
}
////////////////////////////////////////////////////////////////////////////////
BENCH(read, bench) {

View file

@ -21,6 +21,7 @@
#include "libc/calls/calls.h"
#include "libc/calls/internal.h"
#include "libc/calls/struct/metastat.internal.h"
#include "libc/calls/struct/stat.h"
#include "libc/dce.h"
#include "libc/errno.h"
#include "libc/mem/gc.internal.h"
@ -47,13 +48,15 @@ TEST(stat_010, testEmptyFile_sizeIsZero) {
}
TEST(stat, enoent) {
ASSERT_SYS(ENOENT, -1, stat("hi", 0));
ASSERT_SYS(ENOENT, -1, stat("o/doesnotexist", 0));
struct stat st;
ASSERT_SYS(ENOENT, -1, stat("hi", &st));
ASSERT_SYS(ENOENT, -1, stat("o/doesnotexist", &st));
}
TEST(stat, enotdir) {
struct stat st;
ASSERT_SYS(0, 0, close(creat("yo", 0644)));
ASSERT_SYS(ENOTDIR, -1, stat("yo/there", 0));
ASSERT_SYS(ENOTDIR, -1, stat("yo/there", &st));
}
TEST(stat, zipos) {