mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-06-27 14:58:30 +00:00
Remove old stack code and improve dirstream
This commit is contained in:
parent
74caabb823
commit
dc6c67256f
61 changed files with 463 additions and 595 deletions
|
@ -19,7 +19,6 @@
|
|||
#include "libc/calls/calls.h"
|
||||
#include "libc/calls/internal.h"
|
||||
#include "libc/intrin/bits.h"
|
||||
#include "libc/intrin/kprintf.h"
|
||||
#include "libc/log/check.h"
|
||||
#include "libc/log/log.h"
|
||||
#include "libc/mem/gc.internal.h"
|
||||
|
|
|
@ -20,7 +20,6 @@
|
|||
#include "libc/calls/struct/flock.h"
|
||||
#include "libc/dce.h"
|
||||
#include "libc/errno.h"
|
||||
#include "libc/intrin/kprintf.h"
|
||||
#include "libc/macros.internal.h"
|
||||
#include "libc/runtime/runtime.h"
|
||||
#include "libc/sysv/consts/f.h"
|
||||
|
|
|
@ -29,7 +29,6 @@
|
|||
#include "libc/calls/syscall_support-sysv.internal.h"
|
||||
#include "libc/dce.h"
|
||||
#include "libc/errno.h"
|
||||
#include "libc/intrin/kprintf.h"
|
||||
#include "libc/macros.internal.h"
|
||||
#include "libc/mem/mem.h"
|
||||
#include "libc/runtime/internal.h"
|
||||
|
|
|
@ -18,7 +18,6 @@
|
|||
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||
#include "libc/calls/struct/timespec.h"
|
||||
#include "libc/calls/struct/timeval.h"
|
||||
#include "libc/intrin/kprintf.h"
|
||||
#include "libc/limits.h"
|
||||
#include "libc/stdio/rand.h"
|
||||
#include "libc/testlib/testlib.h"
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
#include "libc/dce.h"
|
||||
#include "libc/errno.h"
|
||||
#include "libc/intrin/dos2errno.internal.h"
|
||||
#include "libc/intrin/kprintf.h"
|
||||
#include "libc/nt/errors.h"
|
||||
#include "libc/sock/internal.h"
|
||||
#include "libc/str/str.h"
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
#include "libc/atomic.h"
|
||||
#include "libc/calls/struct/timespec.h"
|
||||
#include "libc/intrin/atomic.h"
|
||||
#include "libc/intrin/kprintf.h"
|
||||
#include "libc/testlib/testlib.h"
|
||||
#include "libc/thread/thread.h"
|
||||
#include "third_party/zip/zip.h"
|
||||
|
|
|
@ -22,7 +22,6 @@
|
|||
#include "libc/errno.h"
|
||||
#include "libc/fmt/conv.h"
|
||||
#include "libc/intrin/asan.internal.h"
|
||||
#include "libc/intrin/kprintf.h"
|
||||
#include "libc/limits.h"
|
||||
#include "libc/log/libfatal.internal.h"
|
||||
#include "libc/log/log.h"
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
|
||||
│ PERFORMANCE OF THIS SOFTWARE. │
|
||||
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||
#include "libc/mem/critbit0.h"
|
||||
#include "libc/intrin/bits.h"
|
||||
#include "libc/mem/critbit0.h"
|
||||
#include "libc/mem/mem.h"
|
||||
|
@ -128,3 +129,10 @@ TEST(critbit0, testAllPrefixed_haltOnNonzero) {
|
|||
critbit0_clear(tree);
|
||||
FreeBog(&a);
|
||||
}
|
||||
|
||||
TEST(critbit0, duplicate) {
|
||||
struct critbit0 tree = {0};
|
||||
ASSERT_TRUE(critbit0_insert(&tree, "hi"));
|
||||
ASSERT_FALSE(critbit0_insert(&tree, "hi"));
|
||||
critbit0_clear(&tree);
|
||||
}
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
#include "libc/calls/calls.h"
|
||||
#include "libc/calls/struct/sigset.h"
|
||||
#include "libc/dce.h"
|
||||
#include "libc/intrin/kprintf.h"
|
||||
#include "libc/runtime/runtime.h"
|
||||
#include "libc/str/str.h"
|
||||
#include "libc/sysv/consts/o.h"
|
||||
|
|
|
@ -23,7 +23,6 @@
|
|||
#include "libc/calls/struct/timespec.h"
|
||||
#include "libc/dce.h"
|
||||
#include "libc/errno.h"
|
||||
#include "libc/intrin/kprintf.h"
|
||||
#include "libc/log/check.h"
|
||||
#include "libc/macros.internal.h"
|
||||
#include "libc/nexgen32e/rdtsc.h"
|
||||
|
|
|
@ -16,7 +16,6 @@
|
|||
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
|
||||
│ PERFORMANCE OF THIS SOFTWARE. │
|
||||
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||
#include "libc/intrin/kprintf.h"
|
||||
#include "libc/intrin/pushpop.internal.h"
|
||||
#include "libc/limits.h"
|
||||
#include "libc/macros.internal.h"
|
||||
|
|
|
@ -25,7 +25,6 @@
|
|||
#include "libc/intrin/asan.internal.h"
|
||||
#include "libc/intrin/atomic.h"
|
||||
#include "libc/intrin/bits.h"
|
||||
#include "libc/intrin/kprintf.h"
|
||||
#include "libc/intrin/safemacros.internal.h"
|
||||
#include "libc/intrin/xchg.internal.h"
|
||||
#include "libc/log/log.h"
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
#include "libc/calls/calls.h"
|
||||
#include "libc/dce.h"
|
||||
#include "libc/errno.h"
|
||||
#include "libc/intrin/kprintf.h"
|
||||
#include "libc/log/log.h"
|
||||
#include "libc/runtime/runtime.h"
|
||||
#include "libc/sysv/consts/map.h"
|
||||
|
|
|
@ -18,7 +18,6 @@
|
|||
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||
#include "libc/calls/calls.h"
|
||||
#include "libc/errno.h"
|
||||
#include "libc/intrin/kprintf.h"
|
||||
#include "libc/intrin/strace.internal.h"
|
||||
#include "libc/runtime/runtime.h"
|
||||
#include "libc/runtime/syslib.internal.h"
|
||||
|
|
|
@ -20,7 +20,6 @@
|
|||
#include "libc/calls/struct/sigaction.h"
|
||||
#include "libc/dce.h"
|
||||
#include "libc/errno.h"
|
||||
#include "libc/intrin/kprintf.h"
|
||||
#include "libc/limits.h"
|
||||
#include "libc/mem/gc.internal.h"
|
||||
#include "libc/mem/mem.h"
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
#include "libc/calls/struct/stat.h"
|
||||
#include "libc/dce.h"
|
||||
#include "libc/errno.h"
|
||||
#include "libc/intrin/kprintf.h"
|
||||
#include "libc/fmt/fmt.h"
|
||||
#include "libc/mem/gc.h"
|
||||
#include "libc/mem/gc.internal.h"
|
||||
#include "libc/runtime/runtime.h"
|
||||
|
@ -35,6 +35,7 @@
|
|||
#include "libc/x/xiso8601.h"
|
||||
|
||||
__static_yoink("zipos");
|
||||
__static_yoink("usr/share/zoneinfo/");
|
||||
__static_yoink("usr/share/zoneinfo/New_York");
|
||||
|
||||
char testlib_enable_tmp_setup_teardown;
|
||||
|
@ -248,5 +249,75 @@ TEST(dirstream, seek) {
|
|||
ASSERT_NE(NULL, (ent = readdir(dir))); // #3
|
||||
ASSERT_NE(NULL, (ent = readdir(dir))); // #4
|
||||
ASSERT_EQ(NULL, (ent = readdir(dir))); // eod
|
||||
ASSERT_EQ(NULL, (ent = readdir(dir))); // eod
|
||||
ASSERT_SYS(0, 0, closedir(dir));
|
||||
}
|
||||
|
||||
TEST(dirstream, ino) {
|
||||
if (IsNetbsd()) return; // omg
|
||||
ASSERT_SYS(0, 0, mkdir("boop", 0755));
|
||||
EXPECT_SYS(0, 0, touch("boop/a", 0644));
|
||||
EXPECT_SYS(0, 0, touch("boop/b", 0644));
|
||||
EXPECT_SYS(0, 0, touch("boop/c", 0644));
|
||||
ASSERT_NE(NULL, (dir = opendir("boop")));
|
||||
ASSERT_NE(NULL, (ent = readdir(dir))); // #1
|
||||
ASSERT_NE(NULL, (ent = readdir(dir))); // #2
|
||||
long pos = telldir(dir);
|
||||
ASSERT_NE(NULL, (ent = readdir(dir))); // #3
|
||||
char name[32];
|
||||
strlcpy(name, ent->d_name, sizeof(name));
|
||||
ASSERT_NE(NULL, (ent = readdir(dir))); // #4
|
||||
ASSERT_NE(NULL, (ent = readdir(dir))); // #5
|
||||
ASSERT_EQ(NULL, (ent = readdir(dir))); // eod
|
||||
seekdir(dir, pos);
|
||||
ASSERT_NE(NULL, (ent = readdir(dir))); // #2
|
||||
ASSERT_STREQ(name, ent->d_name);
|
||||
ASSERT_NE(NULL, (ent = readdir(dir))); // #3
|
||||
ASSERT_NE(NULL, (ent = readdir(dir))); // #4
|
||||
ASSERT_EQ(NULL, (ent = readdir(dir))); // eod
|
||||
ASSERT_EQ(NULL, (ent = readdir(dir))); // eod
|
||||
ASSERT_SYS(0, 0, closedir(dir));
|
||||
}
|
||||
|
||||
TEST(dirstream, dots) {
|
||||
bool got_dot = false;
|
||||
bool got_dot_dot = false;
|
||||
ASSERT_NE(NULL, (dir = opendir(".")));
|
||||
while ((ent = readdir(dir))) {
|
||||
got_dot |= !strcmp(ent->d_name, ".");
|
||||
got_dot_dot |= !strcmp(ent->d_name, "..");
|
||||
}
|
||||
ASSERT_SYS(0, 0, closedir(dir));
|
||||
ASSERT_TRUE(got_dot_dot);
|
||||
ASSERT_TRUE(got_dot);
|
||||
}
|
||||
|
||||
TEST(dirstream, inoFile_isConsistentWithStat) {
|
||||
struct stat st;
|
||||
bool gotsome = false;
|
||||
EXPECT_SYS(0, 0, touch("foo", 0644));
|
||||
EXPECT_SYS(0, 0, stat("foo", &st));
|
||||
ASSERT_NE(NULL, (dir = opendir(".")));
|
||||
while ((ent = readdir(dir))) {
|
||||
if (!strcmp(ent->d_name, "foo")) {
|
||||
ASSERT_EQ(st.st_ino, ent->d_ino);
|
||||
gotsome = true;
|
||||
}
|
||||
}
|
||||
ASSERT_SYS(0, 0, closedir(dir));
|
||||
ASSERT_TRUE(gotsome);
|
||||
}
|
||||
|
||||
TEST(dirstream_zipos, inoFile_isConsistentWithStat) {
|
||||
struct stat st;
|
||||
const char *dirpath;
|
||||
char filename[PATH_MAX];
|
||||
dirpath = "/zip/usr/share/zoneinfo";
|
||||
ASSERT_NE(NULL, (dir = opendir(dirpath)));
|
||||
while ((ent = readdir(dir))) {
|
||||
snprintf(filename, sizeof(filename), "%s/%s", dirpath, ent->d_name);
|
||||
EXPECT_SYS(0, 0, stat(filename, &st));
|
||||
ASSERT_EQ(st.st_ino, ent->d_ino);
|
||||
}
|
||||
ASSERT_SYS(0, 0, closedir(dir));
|
||||
}
|
||||
|
|
|
@ -23,7 +23,6 @@
|
|||
#include "libc/calls/struct/sigaction.h"
|
||||
#include "libc/dce.h"
|
||||
#include "libc/fmt/conv.h"
|
||||
#include "libc/intrin/kprintf.h"
|
||||
#include "libc/intrin/safemacros.internal.h"
|
||||
#include "libc/mem/gc.h"
|
||||
#include "libc/mem/mem.h"
|
||||
|
|
|
@ -54,6 +54,7 @@ TEST(zipdir, test) {
|
|||
ASSERT_EQ(0, strcmp(ent->d_name, "moby.txt"));
|
||||
ASSERT_EQ(DT_REG, ent->d_type);
|
||||
ASSERT_EQ(NULL, (ent = readdir(dir)));
|
||||
ASSERT_EQ(NULL, (ent = readdir(dir)));
|
||||
ASSERT_SYS(0, 0, closedir(dir));
|
||||
}
|
||||
|
||||
|
|
|
@ -17,7 +17,6 @@
|
|||
│ PERFORMANCE OF THIS SOFTWARE. │
|
||||
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||
#include "libc/atomic.h"
|
||||
#include "libc/intrin/kprintf.h"
|
||||
#include "libc/mem/mem.h"
|
||||
#include "libc/nexgen32e/nexgen32e.h"
|
||||
#include "libc/testlib/testlib.h"
|
||||
|
|
|
@ -23,7 +23,6 @@
|
|||
#include "libc/dce.h"
|
||||
#include "libc/errno.h"
|
||||
#include "libc/intrin/atomic.h"
|
||||
#include "libc/intrin/kprintf.h"
|
||||
#include "libc/runtime/runtime.h"
|
||||
#include "libc/testlib/testlib.h"
|
||||
#include "libc/thread/thread.h"
|
||||
|
|
|
@ -18,7 +18,6 @@
|
|||
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||
#include "libc/dce.h"
|
||||
#include "libc/errno.h"
|
||||
#include "libc/intrin/kprintf.h"
|
||||
#include "libc/mem/gc.h"
|
||||
#include "libc/mem/mem.h"
|
||||
#include "libc/runtime/runtime.h"
|
||||
|
|
|
@ -1,56 +0,0 @@
|
|||
/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│
|
||||
│vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│
|
||||
╞══════════════════════════════════════════════════════════════════════════════╡
|
||||
│ Copyright 2022 Justine Alexandra Roberts Tunney │
|
||||
│ │
|
||||
│ Permission to use, copy, modify, and/or distribute this software for │
|
||||
│ any purpose with or without fee is hereby granted, provided that the │
|
||||
│ above copyright notice and this permission notice appear in all copies. │
|
||||
│ │
|
||||
│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │
|
||||
│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │
|
||||
│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │
|
||||
│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │
|
||||
│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │
|
||||
│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │
|
||||
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
|
||||
│ PERFORMANCE OF THIS SOFTWARE. │
|
||||
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||
#include "libc/thread/spawn.h"
|
||||
#include "libc/assert.h"
|
||||
#include "libc/atomic.h"
|
||||
#include "libc/calls/calls.h"
|
||||
#include "libc/calls/syscall-sysv.internal.h"
|
||||
#include "libc/intrin/atomic.h"
|
||||
#include "libc/macros.internal.h"
|
||||
#include "libc/mem/gc.internal.h"
|
||||
#include "libc/mem/mem.h"
|
||||
#include "libc/runtime/internal.h"
|
||||
#include "libc/testlib/testlib.h"
|
||||
|
||||
atomic_int itworked;
|
||||
_Thread_local int var;
|
||||
|
||||
void SetUpOnce(void) {
|
||||
__enable_threads();
|
||||
ASSERT_SYS(0, 0, pledge("stdio", 0));
|
||||
}
|
||||
|
||||
int Worker(void *arg, int tid) {
|
||||
int i = (long)arg;
|
||||
ASSERT_EQ(0, var++);
|
||||
ASSERT_EQ(gettid(), tid);
|
||||
ASSERT_EQ(1, var++);
|
||||
ASSERT_EQ(sys_gettid(), tid);
|
||||
ASSERT_EQ(2, var++);
|
||||
itworked++;
|
||||
return 0;
|
||||
}
|
||||
|
||||
TEST(_spawn, test) {
|
||||
long i, n = 64;
|
||||
struct spawn *t = gc(malloc(sizeof(struct spawn) * n));
|
||||
for (i = 0; i < n; ++i) ASSERT_SYS(0, 0, _spawn(Worker, (void *)i, t + i));
|
||||
for (i = 0; i < n; ++i) EXPECT_SYS(0, 0, _join(t + i));
|
||||
EXPECT_EQ(n, itworked);
|
||||
}
|
|
@ -17,7 +17,6 @@
|
|||
│ PERFORMANCE OF THIS SOFTWARE. │
|
||||
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||
#include "libc/tinymath/magicu.h"
|
||||
#include "libc/intrin/kprintf.h"
|
||||
#include "libc/limits.h"
|
||||
#include "libc/macros.internal.h"
|
||||
#include "libc/runtime/runtime.h"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue