mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-05-25 14:52:28 +00:00
Stop using .com extension in monorepo
The WIN32 CreateProcess() function does not require an .exe or .com suffix in order to spawn an executable. Now that we have Cosmo bash we're no longer so dependent on the cmd.exe prompt.
This commit is contained in:
parent
c8383f25b4
commit
a6baba1b07
239 changed files with 2092 additions and 2244 deletions
|
@ -6,90 +6,90 @@ PKGS += TEST_LIBC_PROC
|
|||
TEST_LIBC_PROC_SRCS := $(wildcard test/libc/proc/*.c)
|
||||
TEST_LIBC_PROC_SRCS_TEST = $(filter %_test.c,$(TEST_LIBC_PROC_SRCS))
|
||||
|
||||
TEST_LIBC_PROC_OBJS = \
|
||||
TEST_LIBC_PROC_OBJS = \
|
||||
$(TEST_LIBC_PROC_SRCS:%.c=o/$(MODE)/%.o)
|
||||
|
||||
TEST_LIBC_PROC_COMS = \
|
||||
$(TEST_LIBC_PROC_SRCS:%.c=o/$(MODE)/%.com)
|
||||
TEST_LIBC_PROC_COMS = \
|
||||
$(TEST_LIBC_PROC_SRCS:%.c=o/$(MODE)/%)
|
||||
|
||||
TEST_LIBC_PROC_BINS = \
|
||||
$(TEST_LIBC_PROC_COMS) \
|
||||
TEST_LIBC_PROC_BINS = \
|
||||
$(TEST_LIBC_PROC_COMS) \
|
||||
$(TEST_LIBC_PROC_COMS:%=%.dbg)
|
||||
|
||||
TEST_LIBC_PROC_TESTS = \
|
||||
$(TEST_LIBC_PROC_SRCS_TEST:%.c=o/$(MODE)/%.com.ok)
|
||||
TEST_LIBC_PROC_TESTS = \
|
||||
$(TEST_LIBC_PROC_SRCS_TEST:%.c=o/$(MODE)/%.ok)
|
||||
|
||||
TEST_LIBC_PROC_CHECKS = \
|
||||
$(TEST_LIBC_PROC_SRCS_TEST:%.c=o/$(MODE)/%.com.runs)
|
||||
TEST_LIBC_PROC_CHECKS = \
|
||||
$(TEST_LIBC_PROC_SRCS_TEST:%.c=o/$(MODE)/%.runs)
|
||||
|
||||
TEST_LIBC_PROC_DIRECTDEPS = \
|
||||
LIBC_CALLS \
|
||||
LIBC_FMT \
|
||||
LIBC_INTRIN \
|
||||
LIBC_MEM \
|
||||
LIBC_NEXGEN32E \
|
||||
LIBC_NT_KERNEL32 \
|
||||
LIBC_RUNTIME \
|
||||
LIBC_PROC \
|
||||
LIBC_STR \
|
||||
LIBC_SYSV \
|
||||
LIBC_TESTLIB \
|
||||
LIBC_THREAD \
|
||||
LIBC_X \
|
||||
THIRD_PARTY_MUSL \
|
||||
TEST_LIBC_PROC_DIRECTDEPS = \
|
||||
LIBC_CALLS \
|
||||
LIBC_FMT \
|
||||
LIBC_INTRIN \
|
||||
LIBC_MEM \
|
||||
LIBC_NEXGEN32E \
|
||||
LIBC_NT_KERNEL32 \
|
||||
LIBC_RUNTIME \
|
||||
LIBC_PROC \
|
||||
LIBC_STR \
|
||||
LIBC_SYSV \
|
||||
LIBC_TESTLIB \
|
||||
LIBC_THREAD \
|
||||
LIBC_X \
|
||||
THIRD_PARTY_MUSL \
|
||||
THIRD_PARTY_TR
|
||||
|
||||
TEST_LIBC_PROC_DEPS := \
|
||||
TEST_LIBC_PROC_DEPS := \
|
||||
$(call uniq,$(foreach x,$(TEST_LIBC_PROC_DIRECTDEPS),$($(x))))
|
||||
|
||||
o/$(MODE)/test/libc/proc/proc.pkg: \
|
||||
$(TEST_LIBC_PROC_OBJS) \
|
||||
o/$(MODE)/test/libc/proc/proc.pkg: \
|
||||
$(TEST_LIBC_PROC_OBJS) \
|
||||
$(foreach x,$(TEST_LIBC_PROC_DIRECTDEPS),$($(x)_A).pkg)
|
||||
|
||||
o/$(MODE)/test/libc/proc/%.com.dbg: \
|
||||
$(TEST_LIBC_PROC_DEPS) \
|
||||
o/$(MODE)/test/libc/proc/%.o \
|
||||
o/$(MODE)/test/libc/proc/proc.pkg \
|
||||
o/$(MODE)/tool/build/echo.com.zip.o \
|
||||
$(LIBC_TESTMAIN) \
|
||||
$(CRT) \
|
||||
o/$(MODE)/test/libc/proc/%.dbg: \
|
||||
$(TEST_LIBC_PROC_DEPS) \
|
||||
o/$(MODE)/test/libc/proc/%.o \
|
||||
o/$(MODE)/test/libc/proc/proc.pkg \
|
||||
o/$(MODE)/tool/build/echo.zip.o \
|
||||
$(LIBC_TESTMAIN) \
|
||||
$(CRT) \
|
||||
$(APE_NO_MODIFY_SELF)
|
||||
@$(APELINK)
|
||||
|
||||
o/$(MODE)/test/libc/proc/posix_spawn_test.com.runs: \
|
||||
o/$(MODE)/test/libc/proc/posix_spawn_test.runs: \
|
||||
private QUOTA += -M8192m
|
||||
|
||||
o/$(MODE)/test/libc/proc/posix_spawn_test.com.dbg: \
|
||||
$(TEST_LIBC_PROC_DEPS) \
|
||||
o/$(MODE)/test/libc/proc/posix_spawn_test.o \
|
||||
o/$(MODE)/test/libc/proc/proc.pkg \
|
||||
o/$(MODE)/tool/build/echo.com.zip.o \
|
||||
o/$(MODE)/tool/build/cocmd.com.zip.o \
|
||||
o/$(MODE)/test/libc/mem/prog/life.com.zip.o \
|
||||
o/$(MODE)/test/libc/mem/prog/life.elf.zip.o \
|
||||
o/$(MODE)/test/libc/proc/life-pe.com.zip.o \
|
||||
$(LIBC_TESTMAIN) \
|
||||
$(CRT) \
|
||||
o/$(MODE)/test/libc/proc/posix_spawn_test.dbg: \
|
||||
$(TEST_LIBC_PROC_DEPS) \
|
||||
o/$(MODE)/test/libc/proc/posix_spawn_test.o \
|
||||
o/$(MODE)/test/libc/proc/proc.pkg \
|
||||
o/$(MODE)/tool/build/echo.zip.o \
|
||||
o/$(MODE)/tool/build/cocmd.zip.o \
|
||||
o/$(MODE)/test/libc/mem/prog/life.zip.o \
|
||||
o/$(MODE)/test/libc/mem/prog/life.elf.zip.o \
|
||||
o/$(MODE)/test/libc/proc/life-pe.zip.o \
|
||||
$(LIBC_TESTMAIN) \
|
||||
$(CRT) \
|
||||
$(APE_NO_MODIFY_SELF)
|
||||
@$(APELINK)
|
||||
|
||||
o/$(MODE)/test/libc/proc/system_test.com.dbg: \
|
||||
$(TEST_LIBC_PROC_DEPS) \
|
||||
o/$(MODE)/test/libc/proc/system_test.o \
|
||||
o/$(MODE)/test/libc/proc/proc.pkg \
|
||||
o/$(MODE)/tool/build/echo.com.zip.o \
|
||||
o/$(MODE)/tool/build/cocmd.com.zip.o \
|
||||
o/$(MODE)/tool/build/false.com.zip.o \
|
||||
$(LIBC_TESTMAIN) \
|
||||
$(CRT) \
|
||||
o/$(MODE)/test/libc/proc/system_test.dbg: \
|
||||
$(TEST_LIBC_PROC_DEPS) \
|
||||
o/$(MODE)/test/libc/proc/system_test.o \
|
||||
o/$(MODE)/test/libc/proc/proc.pkg \
|
||||
o/$(MODE)/tool/build/echo.zip.o \
|
||||
o/$(MODE)/tool/build/cocmd.zip.o \
|
||||
o/$(MODE)/tool/build/false.zip.o \
|
||||
$(LIBC_TESTMAIN) \
|
||||
$(CRT) \
|
||||
$(APE_NO_MODIFY_SELF)
|
||||
@$(APELINK)
|
||||
|
||||
o/$(MODE)/test/libc/proc/execve_test.com.dbg: \
|
||||
o/$(MODE)/test/libc/proc/execve_test.dbg: \
|
||||
$(TEST_LIBC_PROC_DEPS) \
|
||||
o/$(MODE)/test/libc/proc/execve_test.o \
|
||||
o/$(MODE)/test/libc/calls/life-nomod.com.zip.o \
|
||||
o/$(MODE)/test/libc/proc/execve_test_prog1.com.zip.o \
|
||||
o/$(MODE)/test/libc/calls/life-nomod.zip.o \
|
||||
o/$(MODE)/test/libc/proc/execve_test_prog1.zip.o \
|
||||
o/$(MODE)/test/libc/mem/prog/life.elf.zip.o \
|
||||
o/$(MODE)/test/libc/mem/prog/sock.elf.zip.o \
|
||||
o/$(MODE)/test/libc/proc/proc.pkg \
|
||||
|
@ -98,26 +98,26 @@ o/$(MODE)/test/libc/proc/execve_test.com.dbg: \
|
|||
$(APE_NO_MODIFY_SELF)
|
||||
@$(APELINK)
|
||||
|
||||
o/$(MODE)/test/libc/proc/fexecve_test.com.dbg: \
|
||||
o/$(MODE)/test/libc/proc/fexecve_test.dbg: \
|
||||
$(TEST_LIBC_PROC_DEPS) \
|
||||
o/$(MODE)/test/libc/proc/fexecve_test.o \
|
||||
o/$(MODE)/test/libc/proc/fexecve_test.o \
|
||||
o/$(MODE)/test/libc/proc/proc.pkg \
|
||||
o/$(MODE)/test/libc/mem/prog/life.elf.zip.o \
|
||||
o/$(MODE)/test/libc/calls/life-nomod.com.zip.o \
|
||||
o/$(MODE)/test/libc/calls/zipread.com.zip.o \
|
||||
o/$(MODE)/test/libc/calls/life-nomod.zip.o \
|
||||
o/$(MODE)/test/libc/calls/zipread.zip.o \
|
||||
$(LIBC_TESTMAIN) \
|
||||
$(CRT) \
|
||||
$(APE_NO_MODIFY_SELF)
|
||||
@$(APELINK)
|
||||
|
||||
o/$(MODE)/test/libc/proc/execve_test_prog1.com.zip.o \
|
||||
o/$(MODE)/test/libc/proc/life-pe.com.zip.o: private \
|
||||
ZIPOBJ_FLAGS += \
|
||||
o/$(MODE)/test/libc/proc/execve_test_prog1.zip.o \
|
||||
o/$(MODE)/test/libc/proc/life-pe.zip.o: private \
|
||||
ZIPOBJ_FLAGS += \
|
||||
-B
|
||||
|
||||
$(TEST_LIBC_PROC_OBJS): test/libc/proc/BUILD.mk
|
||||
|
||||
.PHONY: o/$(MODE)/test/libc/proc
|
||||
o/$(MODE)/test/libc/proc: \
|
||||
$(TEST_LIBC_PROC_BINS) \
|
||||
o/$(MODE)/test/libc/proc: \
|
||||
$(TEST_LIBC_PROC_BINS) \
|
||||
$(TEST_LIBC_PROC_CHECKS)
|
||||
|
|
|
@ -51,8 +51,8 @@ void GenBuf(char buf[8], int x) {
|
|||
TEST(execve, testArgPassing) {
|
||||
int i;
|
||||
char ibuf[12], buf[8];
|
||||
const char *prog = "./execve_test_prog1.com";
|
||||
testlib_extract("/zip/execve_test_prog1.com", prog, 0755);
|
||||
const char *prog = "./execve_test_prog1";
|
||||
testlib_extract("/zip/execve_test_prog1", prog, 0755);
|
||||
for (i = 0; i < N; ++i) {
|
||||
FormatInt32(ibuf, i);
|
||||
GenBuf(buf, i);
|
||||
|
@ -84,12 +84,12 @@ TEST(execve, ziposAPE) {
|
|||
if (IsFreebsd()) return; // TODO: fixme on freebsd
|
||||
if (IsLinux() && !__is_linux_2_6_23()) return; // TODO: fixme on old linux
|
||||
if (!IsLinux() && !IsFreebsd()) {
|
||||
EXPECT_EQ(-1, execve("/zip/life-nomod.com", (char *const[]){0},
|
||||
(char *const[]){0}));
|
||||
EXPECT_EQ(
|
||||
-1, execve("/zip/life-nomod", (char *const[]){0}, (char *const[]){0}));
|
||||
return;
|
||||
}
|
||||
SPAWN(fork);
|
||||
execve("/zip/life-nomod.com", (char *const[]){0}, (char *const[]){0});
|
||||
execve("/zip/life-nomod", (char *const[]){0}, (char *const[]){0});
|
||||
kprintf("execve failed: %m\n");
|
||||
EXITS(42);
|
||||
}
|
||||
|
|
|
@ -102,9 +102,9 @@ TEST(fexecve, memfd_create) {
|
|||
|
||||
TEST(fexecve, APE) {
|
||||
if (!IsLinux() && !IsFreebsd()) return;
|
||||
testlib_extract("/zip/life-nomod.com", "life-nomod.com", 0555);
|
||||
testlib_extract("/zip/life-nomod", "life-nomod", 0555);
|
||||
SPAWN(fork);
|
||||
int fd = open("life-nomod.com", O_RDONLY);
|
||||
int fd = open("life-nomod", O_RDONLY);
|
||||
ASSERT_NE(-1, fd);
|
||||
fexecve(fd, (char *const[]){0}, (char *const[]){0});
|
||||
EXITS(42);
|
||||
|
@ -112,9 +112,9 @@ TEST(fexecve, APE) {
|
|||
|
||||
TEST(fexecve, APE_cloexec) {
|
||||
if (!IsLinux() && !IsFreebsd()) return;
|
||||
testlib_extract("/zip/life-nomod.com", "life-nomod.com", 0555);
|
||||
testlib_extract("/zip/life-nomod", "life-nomod", 0555);
|
||||
SPAWN(fork);
|
||||
int fd = open("life-nomod.com", O_RDONLY | O_CLOEXEC);
|
||||
int fd = open("life-nomod", O_RDONLY | O_CLOEXEC);
|
||||
ASSERT_NE(-1, fd);
|
||||
fexecve(fd, (char *const[]){0}, (char *const[]){0});
|
||||
EXITS(42);
|
||||
|
@ -132,7 +132,7 @@ TEST(fexecve, zipos) {
|
|||
|
||||
TEST(fexecve, ziposAPE) {
|
||||
if (!IsLinux() && !IsFreebsd()) return;
|
||||
int fd = open("/zip/life-nomod.com", O_RDONLY);
|
||||
int fd = open("/zip/life-nomod", O_RDONLY);
|
||||
ASSERT_NE(-1, fd);
|
||||
SPAWN(fork);
|
||||
fexecve(fd, (char *const[]){0}, (char *const[]){0});
|
||||
|
@ -143,7 +143,7 @@ TEST(fexecve, ziposAPE) {
|
|||
TEST(fexecve, ziposAPEHasZipos) {
|
||||
if (1) return; // TODO: fixme
|
||||
if (!IsLinux() && !IsFreebsd()) return;
|
||||
int fd = open("/zip/zipread.com", O_RDONLY);
|
||||
int fd = open("/zip/zipread", O_RDONLY);
|
||||
ASSERT_NE(-1, fd);
|
||||
SPAWN(fork);
|
||||
ASSERT_NE(-1, fd);
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
|
||||
void SetUp(void) {
|
||||
if (getpriority(PRIO_PROCESS, getpid()) != 0) {
|
||||
kprintf("getpriority_test.com must be launched at priority zero\n");
|
||||
kprintf("getpriority_test must be launched at priority zero\n");
|
||||
exit(0);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -118,10 +118,10 @@ TEST(posix_spawn, self) {
|
|||
|
||||
TEST(posix_spawn, ape) {
|
||||
int ws, pid;
|
||||
char *prog = "./life.com";
|
||||
char *prog = "./life";
|
||||
char *args[] = {prog, 0};
|
||||
char *envs[] = {0};
|
||||
testlib_extract("/zip/life.com", prog, 0755);
|
||||
testlib_extract("/zip/life", prog, 0755);
|
||||
ASSERT_EQ(0, posix_spawn(&pid, prog, NULL, NULL, args, envs));
|
||||
ASSERT_NE(-1, waitpid(pid, &ws, 0));
|
||||
ASSERT_TRUE(WIFEXITED(ws));
|
||||
|
@ -145,9 +145,9 @@ TEST(posix_spawn, elf) {
|
|||
TEST(posix_spawn, pipe) {
|
||||
char buf[10];
|
||||
int p[2], pid, status;
|
||||
const char *pn = "./echo.com";
|
||||
const char *pn = "./echo";
|
||||
posix_spawn_file_actions_t fa;
|
||||
testlib_extract("/zip/echo.com", "echo.com", 0755);
|
||||
testlib_extract("/zip/echo", "echo", 0755);
|
||||
ASSERT_SYS(0, 0, pipe(p));
|
||||
ASSERT_EQ(0, posix_spawn_file_actions_init(&fa));
|
||||
ASSERT_EQ(0, posix_spawn_file_actions_addclose(&fa, p[0]));
|
||||
|
@ -165,17 +165,17 @@ TEST(posix_spawn, pipe) {
|
|||
TEST(posix_spawn, chdir) {
|
||||
int ws, pid, p[2];
|
||||
char buf[16] = {0};
|
||||
char *args[] = {"cocmd.com", "-c", "cat hello.txt", 0};
|
||||
char *args[] = {"cocmd", "-c", "cat hello.txt", 0};
|
||||
char *envs[] = {0};
|
||||
posix_spawn_file_actions_t fa;
|
||||
testlib_extract("/zip/cocmd.com", "cocmd.com", 0755);
|
||||
testlib_extract("/zip/cocmd", "cocmd", 0755);
|
||||
ASSERT_SYS(0, 0, mkdir("subdir", 0777));
|
||||
ASSERT_SYS(0, 0, xbarf("subdir/hello.txt", "hello\n", -1));
|
||||
ASSERT_SYS(0, 0, pipe2(p, O_CLOEXEC));
|
||||
ASSERT_EQ(0, posix_spawn_file_actions_init(&fa));
|
||||
ASSERT_EQ(0, posix_spawn_file_actions_adddup2(&fa, p[1], 1));
|
||||
ASSERT_EQ(0, posix_spawn_file_actions_addchdir_np(&fa, "subdir"));
|
||||
ASSERT_EQ(0, posix_spawn(&pid, "../cocmd.com", &fa, 0, args, envs));
|
||||
ASSERT_EQ(0, posix_spawn(&pid, "../cocmd", &fa, 0, args, envs));
|
||||
ASSERT_EQ(0, posix_spawn_file_actions_destroy(&fa));
|
||||
ASSERT_SYS(0, 0, close(p[1]));
|
||||
ASSERT_NE(-1, waitpid(pid, &ws, 0));
|
||||
|
@ -201,8 +201,8 @@ TEST(posix_spawn, torture) {
|
|||
posix_spawn_file_actions_t fa;
|
||||
signal(SIGUSR2, OhMyGoth);
|
||||
sigfillset(&allsig);
|
||||
if (!fileexists("echo.com")) {
|
||||
testlib_extract("/zip/echo.com", "echo.com", 0755);
|
||||
if (!fileexists("echo")) {
|
||||
testlib_extract("/zip/echo", "echo", 0755);
|
||||
}
|
||||
// XXX: NetBSD doesn't seem to let us set the scheduler to itself ;_;
|
||||
ASSERT_EQ(0, posix_spawnattr_init(&attr));
|
||||
|
@ -220,10 +220,10 @@ TEST(posix_spawn, torture) {
|
|||
for (int i = 0; i < n; ++i) {
|
||||
char *volatile zzz = malloc(13);
|
||||
volatile int fd = open("/dev/null", O_WRONLY);
|
||||
char *args[] = {"./echo.com", NULL};
|
||||
char *args[] = {"./echo", NULL};
|
||||
char *envs[] = {NULL};
|
||||
raise(SIGUSR2);
|
||||
ASSERT_EQ(0, posix_spawn(&pid, "./echo.com", &fa, &attr, args, envs));
|
||||
ASSERT_EQ(0, posix_spawn(&pid, "./echo", &fa, &attr, args, envs));
|
||||
ASSERT_FALSE(__vforked);
|
||||
ASSERT_NE(-1, waitpid(pid, &ws, 0));
|
||||
EXPECT_FALSE(WIFSIGNALED(ws));
|
||||
|
@ -246,7 +246,7 @@ void *Torturer(void *arg) {
|
|||
TEST(posix_spawn, agony) {
|
||||
int i, n = 4;
|
||||
pthread_t *t = gc(malloc(sizeof(pthread_t) * n));
|
||||
testlib_extract("/zip/echo.com", "echo.com", 0755);
|
||||
testlib_extract("/zip/echo", "echo", 0755);
|
||||
for (i = 0; i < n; ++i) {
|
||||
ASSERT_EQ(0, pthread_create(t + i, 0, Torturer, 0));
|
||||
}
|
||||
|
@ -264,11 +264,11 @@ TEST(posix_spawn, etxtbsy) {
|
|||
if (IsNetbsd()) return; // they don't appear impacted by this race condition
|
||||
if (IsOpenbsd()) return; // they don't appear impacted by this race condition
|
||||
int ws, me, pid, thief;
|
||||
char *prog = "./life.com";
|
||||
char *prog = "./life";
|
||||
char *args[] = {prog, 0};
|
||||
char *envs[] = {0};
|
||||
sigset_t ss, old;
|
||||
testlib_extract("/zip/life.com", prog, 0755);
|
||||
testlib_extract("/zip/life", prog, 0755);
|
||||
for (int i = 0; i < 2; ++i) {
|
||||
sigemptyset(&ss);
|
||||
sigaddset(&ss, SIGUSR1);
|
||||
|
@ -382,22 +382,21 @@ BENCH(posix_spawn, bench) {
|
|||
creat("tiny64", 0755);
|
||||
write(3, kTinyLinuxExit, 128);
|
||||
close(3);
|
||||
testlib_extract("/zip/life.com", "life.com", 0755);
|
||||
testlib_extract("/zip/life", "life", 0755);
|
||||
testlib_extract("/zip/life.elf", "life.elf", 0755);
|
||||
testlib_extract("/zip/life-pe.com", "life-pe.com", 0755);
|
||||
testlib_extract("/zip/life-pe", "life-pe", 0755);
|
||||
kprintf("%s %s (MODE=" MODE
|
||||
" rss=%'zu tiny64=%'zu life.com=%'zu life.elf=%'zu)\n",
|
||||
" rss=%'zu tiny64=%'zu life=%'zu life.elf=%'zu)\n",
|
||||
__describe_os(), GetHost(), GetRss(), GetSize("tiny64"),
|
||||
GetSize("life.com"), GetSize("life.elf"));
|
||||
ForkExecveWait("./life.com");
|
||||
EZBENCH2("posix_spawn life.com", donothing, PosixSpawnWait("./life.com"));
|
||||
EZBENCH2("vfork life.com", donothing, VforkExecveWait("./life.com"));
|
||||
EZBENCH2("fork life.com", donothing, ForkExecveWait("./life.com"));
|
||||
GetSize("life"), GetSize("life.elf"));
|
||||
ForkExecveWait("./life");
|
||||
EZBENCH2("posix_spawn life", donothing, PosixSpawnWait("./life"));
|
||||
EZBENCH2("vfork life", donothing, VforkExecveWait("./life"));
|
||||
EZBENCH2("fork life", donothing, ForkExecveWait("./life"));
|
||||
if (IsWindows()) {
|
||||
EZBENCH2("posix_spawn life-pe.com", donothing,
|
||||
PosixSpawnWait("./life-pe.com"));
|
||||
EZBENCH2("vfork life-pe.com", donothing, VforkExecveWait("./life-pe.com"));
|
||||
EZBENCH2("fork life-pe.com", donothing, ForkExecveWait("./life-pe.com"));
|
||||
EZBENCH2("posix_spawn life-pe", donothing, PosixSpawnWait("./life-pe"));
|
||||
EZBENCH2("vfork life-pe", donothing, VforkExecveWait("./life-pe"));
|
||||
EZBENCH2("fork life-pe", donothing, ForkExecveWait("./life-pe"));
|
||||
}
|
||||
if (IsXnu() || IsWindows() || IsMetal()) return;
|
||||
EZBENCH2("posix_spawn life.elf", donothing, PosixSpawnWait("./life.elf"));
|
||||
|
|
|
@ -21,7 +21,6 @@
|
|||
#include "libc/dce.h"
|
||||
#include "libc/intrin/kprintf.h"
|
||||
#include "libc/mem/gc.h"
|
||||
#include "libc/mem/gc.h"
|
||||
#include "libc/paths.h"
|
||||
#include "libc/runtime/runtime.h"
|
||||
#include "libc/stdio/stdio.h"
|
||||
|
@ -81,14 +80,14 @@ TEST(system, exit) {
|
|||
}
|
||||
|
||||
TEST(system, testStdoutRedirect) {
|
||||
testlib_extract("/zip/echo.com", "echo.com", 0755);
|
||||
ASSERT_EQ(0, system("./echo.com hello >hello.txt"));
|
||||
testlib_extract("/zip/echo", "echo", 0755);
|
||||
ASSERT_EQ(0, system("./echo hello >hello.txt"));
|
||||
EXPECT_STREQ("hello\n", gc(xslurp("hello.txt", 0)));
|
||||
}
|
||||
|
||||
TEST(system, testStdoutRedirect_withSpacesInFilename) {
|
||||
testlib_extract("/zip/echo.com", "echo.com", 0755);
|
||||
ASSERT_EQ(0, system("./echo.com hello >\"hello there.txt\""));
|
||||
testlib_extract("/zip/echo", "echo", 0755);
|
||||
ASSERT_EQ(0, system("./echo hello >\"hello there.txt\""));
|
||||
EXPECT_STREQ("hello\n", gc(xslurp("hello there.txt", 0)));
|
||||
}
|
||||
|
||||
|
@ -109,10 +108,10 @@ TEST(system, testStderrRedirect_toStdout) {
|
|||
buf[1] = 0;
|
||||
buf[2] = 0;
|
||||
buf[3] = 0;
|
||||
testlib_extract("/zip/echo.com", "echo.com", 0755);
|
||||
testlib_extract("/zip/echo", "echo", 0755);
|
||||
ASSERT_NE(-1, dup2(1, 2));
|
||||
success = false;
|
||||
if (GETEXITSTATUS(system("./echo.com aaa 2>&1")) == 0) {
|
||||
if (GETEXITSTATUS(system("./echo aaa 2>&1")) == 0) {
|
||||
success = read(pipefd[0], buf, 4) == (4);
|
||||
}
|
||||
ASSERT_NE(-1, dup2(stderrBack, 2));
|
||||
|
@ -176,17 +175,17 @@ TEST(system, kill) {
|
|||
}
|
||||
|
||||
TEST(system, exitStatusPreservedAfterSemiColon) {
|
||||
testlib_extract("/zip/false.com", "false.com", 0755);
|
||||
testlib_extract("/zip/false", "false", 0755);
|
||||
ASSERT_EQ(1, GETEXITSTATUS(system("false;")));
|
||||
ASSERT_EQ(1, GETEXITSTATUS(system("false; ")));
|
||||
ASSERT_EQ(1, GETEXITSTATUS(system("./false.com;")));
|
||||
ASSERT_EQ(1, GETEXITSTATUS(system("./false.com;")));
|
||||
ASSERT_EQ(1, GETEXITSTATUS(system("./false;")));
|
||||
ASSERT_EQ(1, GETEXITSTATUS(system("./false;")));
|
||||
CaptureStdout();
|
||||
ASSERT_EQ(0, GETEXITSTATUS(system("false; echo $?")));
|
||||
char buf[9] = {0};
|
||||
ASSERT_EQ(2, read(pipefd[0], buf, 8));
|
||||
ASSERT_STREQ("1\n", buf);
|
||||
ASSERT_EQ(0, GETEXITSTATUS(system("./false.com; echo $?")));
|
||||
ASSERT_EQ(0, GETEXITSTATUS(system("./false; echo $?")));
|
||||
ASSERT_EQ(2, read(pipefd[0], buf, 8));
|
||||
ASSERT_STREQ("1\n", buf);
|
||||
ASSERT_EQ(0, GETEXITSTATUS(system("echo -n hi")));
|
||||
|
@ -222,17 +221,17 @@ TEST(system, allowsLoneCloseCurlyBrace) {
|
|||
ASSERT_EQ(5, read(pipefd[0], buf, 5));
|
||||
ASSERT_STREQ("aaa}\n", buf);
|
||||
bzero(buf, 6);
|
||||
testlib_extract("/zip/echo.com", "echo.com", 0755);
|
||||
ASSERT_EQ(0, GETEXITSTATUS(system("./echo.com \"aaa\"}")));
|
||||
testlib_extract("/zip/echo", "echo", 0755);
|
||||
ASSERT_EQ(0, GETEXITSTATUS(system("./echo \"aaa\"}")));
|
||||
ASSERT_EQ(5, read(pipefd[0], buf, 5));
|
||||
ASSERT_STREQ("aaa}\n", buf);
|
||||
RestoreStdout();
|
||||
}
|
||||
|
||||
TEST(system, glob) {
|
||||
testlib_extract("/zip/echo.com", "echo.com", 0755);
|
||||
ASSERT_EQ(0, system("./ec*.com aaa"));
|
||||
ASSERT_EQ(0, system("./ec?o.com aaa"));
|
||||
testlib_extract("/zip/echo", "echo", 0755);
|
||||
ASSERT_EQ(0, system("./ec* aaa"));
|
||||
ASSERT_EQ(0, system("./ec?o aaa"));
|
||||
}
|
||||
|
||||
TEST(system, env) {
|
||||
|
@ -253,8 +252,8 @@ TEST(system, env) {
|
|||
TEST(system, pipelineCanOutputToFile) {
|
||||
ASSERT_EQ(0, GETEXITSTATUS(system("echo hello | tr a-z A-Z >res")));
|
||||
ASSERT_STREQ("HELLO\n", gc(xslurp("res", 0)));
|
||||
testlib_extract("/zip/echo.com", "echo.com", 0755);
|
||||
ASSERT_EQ(0, GETEXITSTATUS(system("./echo.com hello | tr a-z A-Z >res")));
|
||||
testlib_extract("/zip/echo", "echo", 0755);
|
||||
ASSERT_EQ(0, GETEXITSTATUS(system("./echo hello | tr a-z A-Z >res")));
|
||||
ASSERT_STREQ("HELLO\n", gc(xslurp("res", 0)));
|
||||
}
|
||||
|
||||
|
@ -267,11 +266,11 @@ TEST(system, pipelineCanOutputBackToSelf) {
|
|||
ASSERT_EQ(0, GETEXITSTATUS(system("echo hello | exec tr a-z A-Z")));
|
||||
ASSERT_SYS(0, 6, read(pipefd[0], buf, 16));
|
||||
ASSERT_STREQ("HELLO\n", buf);
|
||||
testlib_extract("/zip/echo.com", "echo.com", 0755);
|
||||
ASSERT_EQ(0, GETEXITSTATUS(system("./echo.com hello | tr a-z A-Z")));
|
||||
testlib_extract("/zip/echo", "echo", 0755);
|
||||
ASSERT_EQ(0, GETEXITSTATUS(system("./echo hello | tr a-z A-Z")));
|
||||
ASSERT_SYS(0, 6, read(pipefd[0], buf, 16));
|
||||
ASSERT_STREQ("HELLO\n", buf);
|
||||
ASSERT_EQ(0, GETEXITSTATUS(system("./echo.com hello | exec tr a-z A-Z")));
|
||||
ASSERT_EQ(0, GETEXITSTATUS(system("./echo hello | exec tr a-z A-Z")));
|
||||
ASSERT_SYS(0, 6, read(pipefd[0], buf, 16));
|
||||
ASSERT_STREQ("HELLO\n", buf);
|
||||
RestoreStdout();
|
||||
|
@ -280,10 +279,10 @@ TEST(system, pipelineCanOutputBackToSelf) {
|
|||
int system2(const char *);
|
||||
|
||||
BENCH(system, bench) {
|
||||
testlib_extract("/zip/echo.com", "echo.com", 0755);
|
||||
EZBENCH2("system cmd", donothing, system("./echo.com hi >/dev/null"));
|
||||
testlib_extract("/zip/echo", "echo", 0755);
|
||||
EZBENCH2("system cmd", donothing, system("./echo hi >/dev/null"));
|
||||
EZBENCH2("systemvpe cmd", donothing,
|
||||
systemvpe("./echo.com", (char *[]){"./echo.com", "hi", 0}, 0));
|
||||
systemvpe("./echo", (char *[]){"./echo", "hi", 0}, 0));
|
||||
EZBENCH2("cocmd echo", donothing, system("echo hi >/dev/null"));
|
||||
EZBENCH2("cocmd exit", donothing, system("exit"));
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue