Strongly link glob() into system() and popen()

This commit is contained in:
Justine Tunney 2024-11-15 20:37:34 -08:00
parent 4e9566cd33
commit cafdb456ed
No known key found for this signature in database
GPG key ID: BE714B4575D6E328
24 changed files with 216 additions and 59 deletions

View file

@ -274,6 +274,7 @@ include libc/BUILD.mk #─┘
include libc/sock/BUILD.mk #─┐
include net/http/BUILD.mk # ├──ONLINE RUNTIME
include third_party/musl/BUILD.mk # │ You can communicate with the network
include libc/system/BUILD.mk # │
include libc/x/BUILD.mk # │
include dsp/scale/BUILD.mk # │
include dsp/mpeg/BUILD.mk # │
@ -367,6 +368,7 @@ include test/libc/fmt/BUILD.mk
include test/libc/time/BUILD.mk
include test/libc/proc/BUILD.mk
include test/libc/stdio/BUILD.mk
include test/libc/system/BUILD.mk
include test/libc/BUILD.mk
include test/net/http/BUILD.mk
include test/net/https/BUILD.mk
@ -449,7 +451,6 @@ COSMOPOLITAN = \
LIBC_NT_BCRYPTPRIMITIVES \
LIBC_NT_COMDLG32 \
LIBC_NT_GDI32 \
LIBC_NT_SHELL32 \
LIBC_NT_IPHLPAPI \
LIBC_NT_KERNEL32 \
LIBC_NT_NTDLL \
@ -457,6 +458,7 @@ COSMOPOLITAN = \
LIBC_NT_POWRPROF \
LIBC_NT_PSAPI \
LIBC_NT_REALTIME \
LIBC_NT_SHELL32 \
LIBC_NT_SYNCHRONIZATION \
LIBC_NT_USER32 \
LIBC_NT_WS2_32 \
@ -465,6 +467,7 @@ COSMOPOLITAN = \
LIBC_SOCK \
LIBC_STDIO \
LIBC_STR \
LIBC_SYSTEM \
LIBC_SYSV \
LIBC_SYSV_CALLS \
LIBC_THREAD \

View file

@ -54,8 +54,8 @@ EXAMPLES_DIRECTDEPS = \
LIBC_NEXGEN32E \
LIBC_NT_ADVAPI32 \
LIBC_NT_IPHLPAPI \
LIBC_NT_MEMORY \
LIBC_NT_KERNEL32 \
LIBC_NT_MEMORY \
LIBC_NT_NTDLL \
LIBC_NT_USER32 \
LIBC_NT_WS2_32 \
@ -64,6 +64,7 @@ EXAMPLES_DIRECTDEPS = \
LIBC_SOCK \
LIBC_STDIO \
LIBC_STR \
LIBC_SYSTEM \
LIBC_SYSV \
LIBC_SYSV_CALLS \
LIBC_TESTLIB \
@ -81,6 +82,8 @@ EXAMPLES_DIRECTDEPS = \
THIRD_PARTY_GETOPT \
THIRD_PARTY_HIREDIS \
THIRD_PARTY_LIBCXX \
THIRD_PARTY_LIBCXXABI \
THIRD_PARTY_LIBUNWIND \
THIRD_PARTY_LINENOISE \
THIRD_PARTY_LUA \
THIRD_PARTY_MBEDTLS \
@ -94,12 +97,10 @@ EXAMPLES_DIRECTDEPS = \
THIRD_PARTY_TZ \
THIRD_PARTY_VQSORT \
THIRD_PARTY_XED \
THIRD_PARTY_LIBCXXABI \
THIRD_PARTY_LIBUNWIND \
THIRD_PARTY_ZLIB \
TOOL_ARGS \
TOOL_BUILD_LIB \
TOOL_VIZ_LIB
TOOL_VIZ_LIB \
EXAMPLES_DEPS := \
$(call uniq,$(foreach x,$(EXAMPLES_DIRECTDEPS),$($(x))))

81
libc/system/BUILD.mk Normal file
View file

@ -0,0 +1,81 @@
#-*-mode:makefile-gmake;indent-tabs-mode:t;tab-width:8;coding:utf-8-*-┐
#── vi: set noet ft=make ts=8 sw=8 fenc=utf-8 :vi ────────────────────┘
PKGS += LIBC_SYSTEM
LIBC_SYSTEM_ARTIFACTS += LIBC_SYSTEM_A
LIBC_SYSTEM = $(LIBC_SYSTEM_A_DEPS) $(LIBC_SYSTEM_A)
LIBC_SYSTEM_A = o/$(MODE)/libc/system/system.a
LIBC_SYSTEM_A_FILES := $(wildcard libc/system/*)
LIBC_SYSTEM_A_HDRS = $(filter %.h,$(LIBC_SYSTEM_A_FILES))
LIBC_SYSTEM_A_INCS = $(filter %.inc,$(LIBC_SYSTEM_A_FILES))
LIBC_SYSTEM_A_SRCS_S = $(filter %.S,$(LIBC_SYSTEM_A_FILES))
LIBC_SYSTEM_A_SRCS_C = $(filter %.c,$(LIBC_SYSTEM_A_FILES))
LIBC_SYSTEM_A_SRCS = \
$(LIBC_SYSTEM_A_SRCS_S) \
$(LIBC_SYSTEM_A_SRCS_C)
LIBC_SYSTEM_A_OBJS = \
$(LIBC_SYSTEM_A_SRCS_S:%.S=o/$(MODE)/%.o) \
$(LIBC_SYSTEM_A_SRCS_C:%.c=o/$(MODE)/%.o)
LIBC_SYSTEM_A_CHECKS = \
$(LIBC_SYSTEM_A).pkg \
$(LIBC_SYSTEM_A_HDRS:%=o/$(MODE)/%.ok)
LIBC_SYSTEM_A_DIRECTDEPS = \
LIBC_CALLS \
LIBC_FMT \
LIBC_INTRIN \
LIBC_NEXGEN32E \
LIBC_PROC \
LIBC_RUNTIME \
LIBC_STDIO \
LIBC_STR \
LIBC_SYSV \
THIRD_PARTY_MUSL \
LIBC_SYSTEM_A_DEPS := \
$(call uniq,$(foreach x,$(LIBC_SYSTEM_A_DIRECTDEPS),$($(x))))
$(LIBC_SYSTEM_A):libc/system/ \
$(LIBC_SYSTEM_A).pkg \
$(LIBC_SYSTEM_A_OBJS)
$(LIBC_SYSTEM_A).pkg: \
$(LIBC_SYSTEM_A_OBJS) \
$(foreach x,$(LIBC_SYSTEM_A_DIRECTDEPS),$($(x)_A).pkg)
# offer assurances about the stack safety of cosmo libc
$(LIBC_SYSTEM_A_OBJS): private COPTS += -Wframe-larger-than=4096 -Walloca-larger-than=4096
$(LIBC_SYSTEM_A_OBJS): private \
CFLAGS += \
-fno-sanitize=all \
-Wframe-larger-than=4096 \
-Walloca-larger-than=4096
o/$(MODE)/libc/system/fputc.o: private \
CFLAGS += \
-O3
o//libc/system/appendw.o: private \
CFLAGS += \
-Os
o/$(MODE)/libc/system/dirstream.o \
o/$(MODE)/libc/system/mt19937.o: private \
CFLAGS += \
-ffunction-sections
LIBC_SYSTEM_LIBS = $(foreach x,$(LIBC_SYSTEM_ARTIFACTS),$($(x)))
LIBC_SYSTEM_SRCS = $(foreach x,$(LIBC_SYSTEM_ARTIFACTS),$($(x)_SRCS))
LIBC_SYSTEM_HDRS = $(foreach x,$(LIBC_SYSTEM_ARTIFACTS),$($(x)_HDRS))
LIBC_SYSTEM_INCS = $(foreach x,$(LIBC_SYSTEM_ARTIFACTS),$($(x)_INCS))
LIBC_SYSTEM_CHECKS = $(foreach x,$(LIBC_SYSTEM_ARTIFACTS),$($(x)_CHECKS))
LIBC_SYSTEM_OBJS = $(foreach x,$(LIBC_SYSTEM_ARTIFACTS),$($(x)_OBJS))
$(LIBC_SYSTEM_OBJS): $(BUILD_FILES) libc/system/BUILD.mk
.PHONY: o/$(MODE)/libc/system
o/$(MODE)/libc/system: $(LIBC_SYSTEM_CHECKS)

View file

@ -1055,12 +1055,9 @@ int _cocmd(int argc, char **argv, char **envp) {
unsupported['('] = true;
unsupported[')'] = true;
unsupported['{'] = true;
unsupported['}'] = false; // Perl t/op/exec.t depends on unpaired } being
// passed from the shell to Perl
if (!_weaken(glob)) {
unsupported['*'] = true;
unsupported['?'] = true;
}
// Perl t/op/exec.t depends on unpaired } being
// passed from the shell to Perl
unsupported['}'] = false;
if (argc >= 3 && !strcmp(argv[1], "--")) {
for (i = 2; i < argc; ++i) {
@ -1121,18 +1118,16 @@ int _cocmd(int argc, char **argv, char **envp) {
Open(GetRedirectArg(prog, arg, 1), 0, O_RDONLY);
} else {
int globrc = GLOB_NOMATCH;
if (_weaken(glob)) {
globrc = _weaken(glob)(arg, globFlags, NULL, &globTheBuilder);
if (globrc == 0) {
for (; globCount < globTheBuilder.gl_pathc; globCount++) {
args[n++] = globTheBuilder.gl_pathv[globCount];
}
} else if (globrc != GLOB_NOMATCH) {
tinyprint(2, prog, ": error: with glob\n", NULL);
_Exit(16);
globrc = glob(arg, globFlags, NULL, &globTheBuilder);
if (globrc == 0) {
for (; globCount < globTheBuilder.gl_pathc; globCount++) {
args[n++] = globTheBuilder.gl_pathv[globCount];
}
globFlags |= GLOB_APPEND;
} else if (globrc != GLOB_NOMATCH) {
tinyprint(2, prog, ": error: with glob\n", NULL);
_Exit(16);
}
globFlags |= GLOB_APPEND;
if (globrc == GLOB_NOMATCH) {
args[n++] = arg;
}

View file

@ -28,6 +28,7 @@ NET_TURFWAR_DIRECTDEPS = \
LIBC_SOCK \
LIBC_STDIO \
LIBC_STR \
LIBC_SYSTEM \
LIBC_SYSV \
LIBC_THREAD \
LIBC_X \
@ -39,7 +40,7 @@ NET_TURFWAR_DIRECTDEPS = \
THIRD_PARTY_SQLITE3 \
THIRD_PARTY_STB \
THIRD_PARTY_TZ \
THIRD_PARTY_ZLIB
THIRD_PARTY_ZLIB \
NET_TURFWAR_DEPS := \
$(call uniq,$(foreach x,$(NET_TURFWAR_DIRECTDEPS),$($(x))))

View file

@ -20,7 +20,7 @@ TEST_CTL_DIRECTDEPS = \
LIBC_NEXGEN32E \
LIBC_PROC \
LIBC_STDIO \
LIBC_STDIO \
LIBC_SYSTEM \
LIBC_THREAD \
THIRD_PARTY_LIBCXX \
THIRD_PARTY_LIBCXXABI \

View file

@ -73,18 +73,6 @@ o/$(MODE)/test/libc/proc/posix_spawn_test.dbg: \
$(APE_NO_MODIFY_SELF)
@$(APELINK)
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.dbg: \
$(TEST_LIBC_PROC_DEPS) \
o/$(MODE)/test/libc/proc/execve_test.o \

View file

@ -28,26 +28,27 @@ TEST_LIBC_STDIO_DIRECTDEPS = \
LIBC_CALLS \
LIBC_FMT \
LIBC_INTRIN \
LIBC_LOG \
LIBC_MEM \
LIBC_NEXGEN32E \
LIBC_PROC \
LIBC_RUNTIME \
LIBC_STDIO \
LIBC_STR \
LIBC_SYSTEM \
LIBC_SYSV \
LIBC_TINYMATH \
LIBC_TESTLIB \
LIBC_THREAD \
LIBC_LOG \
LIBC_TINYMATH \
LIBC_X \
THIRD_PARTY_COMPILER_RT \
THIRD_PARTY_GDTOA \
THIRD_PARTY_MBEDTLS \
THIRD_PARTY_MUSL \
THIRD_PARTY_NSYNC \
THIRD_PARTY_TZ \
THIRD_PARTY_ZLIB \
THIRD_PARTY_ZLIB_GZ \
THIRD_PARTY_TZ
TEST_LIBC_STDIO_DEPS := \
$(call uniq,$(foreach x,$(TEST_LIBC_STDIO_DIRECTDEPS),$($(x))))
@ -66,16 +67,6 @@ o/$(MODE)/test/libc/stdio/%.dbg: \
$(APE_NO_MODIFY_SELF)
@$(APELINK)
o/$(MODE)/test/libc/stdio/popen_test.dbg: \
$(TEST_LIBC_STDIO_DEPS) \
o/$(MODE)/test/libc/stdio/popen_test.o \
o/$(MODE)/test/libc/stdio/stdio.pkg \
o/$(MODE)/tool/build/echo.zip.o \
$(LIBC_TESTMAIN) \
$(CRT) \
$(APE_NO_MODIFY_SELF)
@$(APELINK)
$(TEST_LIBC_STDIO_OBJS): private \
DEFAULT_CCFLAGS += \
-fno-builtin

88
test/libc/system/BUILD.mk Normal file
View file

@ -0,0 +1,88 @@
#-*-mode:makefile-gmake;indent-tabs-mode:t;tab-width:8;coding:utf-8-*-┐
#── vi: set noet ft=make ts=8 sw=8 fenc=utf-8 :vi ────────────────────┘
PKGS += TEST_LIBC_SYSTEM
TEST_LIBC_SYSTEM_FILES := $(wildcard test/libc/system/*)
TEST_LIBC_SYSTEM_SRCS = $(filter %.c,$(TEST_LIBC_SYSTEM_FILES))
TEST_LIBC_SYSTEM_INCS = $(filter %.inc,$(TEST_LIBC_SYSTEM_FILES))
TEST_LIBC_SYSTEM_SRCS_TEST = $(filter %_test.c,$(TEST_LIBC_SYSTEM_SRCS))
TEST_LIBC_SYSTEM_OBJS = \
$(TEST_LIBC_SYSTEM_SRCS:%.c=o/$(MODE)/%.o)
TEST_LIBC_SYSTEM_COMS = \
$(TEST_LIBC_SYSTEM_SRCS:%.c=o/$(MODE)/%)
TEST_LIBC_SYSTEM_BINS = \
$(TEST_LIBC_SYSTEM_COMS) \
$(TEST_LIBC_SYSTEM_COMS:%=%.dbg)
TEST_LIBC_SYSTEM_TESTS = \
$(TEST_LIBC_SYSTEM_SRCS_TEST:%.c=o/$(MODE)/%.ok)
TEST_LIBC_SYSTEM_CHECKS = \
$(TEST_LIBC_SYSTEM_SRCS_TEST:%.c=o/$(MODE)/%.runs)
TEST_LIBC_SYSTEM_DIRECTDEPS = \
LIBC_CALLS \
LIBC_INTRIN \
LIBC_LOG \
LIBC_MEM \
LIBC_NEXGEN32E \
LIBC_RUNTIME \
LIBC_STDIO \
LIBC_STDIO \
LIBC_SYSTEM \
LIBC_SYSV \
LIBC_TESTLIB \
LIBC_THREAD \
LIBC_X \
THIRD_PARTY_MUSL \
THIRD_PARTY_TR \
TEST_LIBC_SYSTEM_DEPS := \
$(call uniq,$(foreach x,$(TEST_LIBC_SYSTEM_DIRECTDEPS),$($(x))))
o/$(MODE)/test/libc/system/system.pkg: \
$(TEST_LIBC_SYSTEM_OBJS) \
$(foreach x,$(TEST_LIBC_SYSTEM_DIRECTDEPS),$($(x)_A).pkg)
o/$(MODE)/test/libc/system/%.dbg: \
$(TEST_LIBC_SYSTEM_DEPS) \
o/$(MODE)/test/libc/system/%.o \
o/$(MODE)/test/libc/system/system.pkg \
o/$(MODE)/tool/build/echo.zip.o \
$(LIBC_TESTMAIN) \
$(CRT) \
$(APE_NO_MODIFY_SELF)
@$(APELINK)
o/$(MODE)/test/libc/system/popen_test.dbg: \
$(TEST_LIBC_SYSTEM_DEPS) \
o/$(MODE)/test/libc/system/popen_test.o \
o/$(MODE)/test/libc/system/system.pkg \
o/$(MODE)/tool/build/echo.zip.o \
$(LIBC_TESTMAIN) \
$(CRT) \
$(APE_NO_MODIFY_SELF)
@$(APELINK)
o/$(MODE)/test/libc/system/system_test.dbg: \
$(TEST_LIBC_SYSTEM_DEPS) \
o/$(MODE)/test/libc/system/system_test.o \
o/$(MODE)/test/libc/system/system.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)
$(TEST_LIBC_SYSTEM_OBJS): test/libc/system/BUILD.mk
.PHONY: o/$(MODE)/test/libc/system
o/$(MODE)/test/libc/system: \
$(TEST_LIBC_SYSTEM_BINS) \
$(TEST_LIBC_SYSTEM_CHECKS)

View file

@ -41,6 +41,7 @@ TEST_LIBC_THREAD_DIRECTDEPS = \
LIBC_SOCK \
LIBC_STDIO \
LIBC_STR \
LIBC_SYSTEM \
LIBC_SYSV \
LIBC_SYSV_CALLS \
LIBC_TESTLIB \
@ -49,7 +50,7 @@ TEST_LIBC_THREAD_DIRECTDEPS = \
THIRD_PARTY_LIBCXXABI \
THIRD_PARTY_NSYNC \
THIRD_PARTY_NSYNC_MEM \
THIRD_PARTY_TZ
THIRD_PARTY_TZ \
TEST_LIBC_THREAD_DEPS := \
$(call uniq,$(foreach x,$(TEST_LIBC_THREAD_DIRECTDEPS),$($(x))))

View file

@ -22,11 +22,12 @@ THIRD_PARTY_AWK_A_DIRECTDEPS = \
LIBC_RUNTIME \
LIBC_STDIO \
LIBC_STR \
LIBC_SYSTEM \
LIBC_SYSV \
LIBC_TINYMATH \
TOOL_ARGS \
THIRD_PARTY_GDTOA \
THIRD_PARTY_MUSL \
TOOL_ARGS \
THIRD_PARTY_AWK_A_DEPS := \
$(call uniq,$(foreach x,$(THIRD_PARTY_AWK_A_DIRECTDEPS),$($(x))))

View file

@ -19,13 +19,14 @@ THIRD_PARTY_CTAGS_DIRECTDEPS = \
LIBC_LOG \
LIBC_MEM \
LIBC_NEXGEN32E \
LIBC_RUNTIME \
LIBC_PROC \
LIBC_RUNTIME \
LIBC_STDIO \
LIBC_STR \
LIBC_SYSTEM \
LIBC_SYSV \
THIRD_PARTY_MUSL \
THIRD_PARTY_REGEX
THIRD_PARTY_REGEX \
THIRD_PARTY_CTAGS_DEPS := \
$(call uniq,$(foreach x,$(THIRD_PARTY_CTAGS_DIRECTDEPS),$($(x))))

View file

@ -26,6 +26,7 @@ THIRD_PARTY_LESS_DIRECTDEPS = \
LIBC_RUNTIME \
LIBC_STDIO \
LIBC_STR \
LIBC_SYSTEM \
LIBC_SYSV \
THIRD_PARTY_MUSL \
THIRD_PARTY_NCURSES \

View file

@ -131,6 +131,7 @@ THIRD_PARTY_LUA_A_DIRECTDEPS = \
LIBC_RUNTIME \
LIBC_STDIO \
LIBC_STR \
LIBC_SYSTEM \
LIBC_SYSV \
LIBC_THREAD \
LIBC_TINYMATH \

View file

@ -1176,12 +1176,13 @@ THIRD_PARTY_PYTHON_STAGE2_A_DIRECTDEPS = \
LIBC_NT_KERNEL32 \
LIBC_PROC \
LIBC_RUNTIME \
LIBC_THREAD \
LIBC_SOCK \
LIBC_STDIO \
LIBC_STR \
LIBC_SYSTEM \
LIBC_SYSV \
LIBC_SYSV_CALLS \
LIBC_THREAD \
LIBC_TINYMATH \
LIBC_X \
NET_HTTP \
@ -1189,14 +1190,14 @@ THIRD_PARTY_PYTHON_STAGE2_A_DIRECTDEPS = \
THIRD_PARTY_BZIP2 \
THIRD_PARTY_GDTOA \
THIRD_PARTY_LINENOISE \
THIRD_PARTY_MUSL \
THIRD_PARTY_MBEDTLS \
THIRD_PARTY_MUSL \
THIRD_PARTY_PYTHON_STAGE1 \
THIRD_PARTY_SQLITE3 \
THIRD_PARTY_TZ \
THIRD_PARTY_ZLIB \
THIRD_PARTY_XED \
TOOL_ARGS
THIRD_PARTY_ZLIB \
TOOL_ARGS \
THIRD_PARTY_PYTHON_STAGE2_A_DEPS = \
$(call uniq,$(foreach x,$(THIRD_PARTY_PYTHON_STAGE2_A_DIRECTDEPS),$($(x))))

View file

@ -52,6 +52,7 @@ THIRD_PARTY_SQLITE3_A_DIRECTDEPS = \
LIBC_RUNTIME \
LIBC_STDIO \
LIBC_STR \
LIBC_SYSTEM \
LIBC_SYSV \
LIBC_SYSV_CALLS \
LIBC_THREAD \
@ -62,7 +63,7 @@ THIRD_PARTY_SQLITE3_A_DIRECTDEPS = \
THIRD_PARTY_MUSL \
THIRD_PARTY_TZ \
THIRD_PARTY_ZLIB \
TOOL_ARGS
TOOL_ARGS \
THIRD_PARTY_SQLITE3_A_DEPS := \
$(call uniq,$(foreach x,$(THIRD_PARTY_SQLITE3_A_DIRECTDEPS),$($(x))))

View file

@ -85,10 +85,11 @@ THIRD_PARTY_ZIP_DIRECTDEPS = \
LIBC_LOG \
LIBC_MEM \
LIBC_NEXGEN32E \
LIBC_PROC \
LIBC_RUNTIME \
LIBC_STDIO \
LIBC_PROC \
LIBC_STR \
LIBC_SYSTEM \
LIBC_SYSV \
LIBC_X \
THIRD_PARTY_BZIP2 \

View file

@ -42,6 +42,7 @@ TOOL_BUILD_DIRECTDEPS = \
LIBC_SOCK \
LIBC_STDIO \
LIBC_STR \
LIBC_SYSTEM \
LIBC_SYSV \
LIBC_SYSV_CALLS \
LIBC_THREAD \
@ -60,7 +61,7 @@ TOOL_BUILD_DIRECTDEPS = \
THIRD_PARTY_XED \
THIRD_PARTY_ZLIB \
THIRD_PARTY_ZLIB_GZ \
TOOL_BUILD_LIB
TOOL_BUILD_LIB \
TOOL_BUILD_DEPS := \
$(call uniq,$(foreach x,$(TOOL_BUILD_DIRECTDEPS),$($(x))))