Skip to content

Commit cafdb45

Browse files
committed
Strongly link glob() into system() and popen()
1 parent 4e9566c commit cafdb45

File tree

24 files changed

+216
-59
lines changed

24 files changed

+216
-59
lines changed

Makefile

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,7 @@ include libc/BUILD.mk #─┘
274274
include libc/sock/BUILD.mk #─┐
275275
include net/http/BUILD.mk # ├──ONLINE RUNTIME
276276
include third_party/musl/BUILD.mk # │ You can communicate with the network
277+
include libc/system/BUILD.mk #
277278
include libc/x/BUILD.mk #
278279
include dsp/scale/BUILD.mk #
279280
include dsp/mpeg/BUILD.mk #
@@ -367,6 +368,7 @@ include test/libc/fmt/BUILD.mk
367368
include test/libc/time/BUILD.mk
368369
include test/libc/proc/BUILD.mk
369370
include test/libc/stdio/BUILD.mk
371+
include test/libc/system/BUILD.mk
370372
include test/libc/BUILD.mk
371373
include test/net/http/BUILD.mk
372374
include test/net/https/BUILD.mk
@@ -449,14 +451,14 @@ COSMOPOLITAN = \
449451
LIBC_NT_BCRYPTPRIMITIVES \
450452
LIBC_NT_COMDLG32 \
451453
LIBC_NT_GDI32 \
452-
LIBC_NT_SHELL32 \
453454
LIBC_NT_IPHLPAPI \
454455
LIBC_NT_KERNEL32 \
455456
LIBC_NT_NTDLL \
456457
LIBC_NT_PDH \
457458
LIBC_NT_POWRPROF \
458459
LIBC_NT_PSAPI \
459460
LIBC_NT_REALTIME \
461+
LIBC_NT_SHELL32 \
460462
LIBC_NT_SYNCHRONIZATION \
461463
LIBC_NT_USER32 \
462464
LIBC_NT_WS2_32 \
@@ -465,6 +467,7 @@ COSMOPOLITAN = \
465467
LIBC_SOCK \
466468
LIBC_STDIO \
467469
LIBC_STR \
470+
LIBC_SYSTEM \
468471
LIBC_SYSV \
469472
LIBC_SYSV_CALLS \
470473
LIBC_THREAD \

examples/BUILD.mk

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,8 @@ EXAMPLES_DIRECTDEPS = \
5454
LIBC_NEXGEN32E \
5555
LIBC_NT_ADVAPI32 \
5656
LIBC_NT_IPHLPAPI \
57-
LIBC_NT_MEMORY \
5857
LIBC_NT_KERNEL32 \
58+
LIBC_NT_MEMORY \
5959
LIBC_NT_NTDLL \
6060
LIBC_NT_USER32 \
6161
LIBC_NT_WS2_32 \
@@ -64,6 +64,7 @@ EXAMPLES_DIRECTDEPS = \
6464
LIBC_SOCK \
6565
LIBC_STDIO \
6666
LIBC_STR \
67+
LIBC_SYSTEM \
6768
LIBC_SYSV \
6869
LIBC_SYSV_CALLS \
6970
LIBC_TESTLIB \
@@ -81,6 +82,8 @@ EXAMPLES_DIRECTDEPS = \
8182
THIRD_PARTY_GETOPT \
8283
THIRD_PARTY_HIREDIS \
8384
THIRD_PARTY_LIBCXX \
85+
THIRD_PARTY_LIBCXXABI \
86+
THIRD_PARTY_LIBUNWIND \
8487
THIRD_PARTY_LINENOISE \
8588
THIRD_PARTY_LUA \
8689
THIRD_PARTY_MBEDTLS \
@@ -94,12 +97,10 @@ EXAMPLES_DIRECTDEPS = \
9497
THIRD_PARTY_TZ \
9598
THIRD_PARTY_VQSORT \
9699
THIRD_PARTY_XED \
97-
THIRD_PARTY_LIBCXXABI \
98-
THIRD_PARTY_LIBUNWIND \
99100
THIRD_PARTY_ZLIB \
100101
TOOL_ARGS \
101102
TOOL_BUILD_LIB \
102-
TOOL_VIZ_LIB
103+
TOOL_VIZ_LIB \
103104

104105
EXAMPLES_DEPS := \
105106
$(call uniq,$(foreach x,$(EXAMPLES_DIRECTDEPS),$($(x))))

libc/system/BUILD.mk

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
#-*-mode:makefile-gmake;indent-tabs-mode:t;tab-width:8;coding:utf-8-*-┐
2+
#── vi: set noet ft=make ts=8 sw=8 fenc=utf-8 :vi ────────────────────┘
3+
4+
PKGS += LIBC_SYSTEM
5+
6+
LIBC_SYSTEM_ARTIFACTS += LIBC_SYSTEM_A
7+
LIBC_SYSTEM = $(LIBC_SYSTEM_A_DEPS) $(LIBC_SYSTEM_A)
8+
LIBC_SYSTEM_A = o/$(MODE)/libc/system/system.a
9+
LIBC_SYSTEM_A_FILES := $(wildcard libc/system/*)
10+
LIBC_SYSTEM_A_HDRS = $(filter %.h,$(LIBC_SYSTEM_A_FILES))
11+
LIBC_SYSTEM_A_INCS = $(filter %.inc,$(LIBC_SYSTEM_A_FILES))
12+
LIBC_SYSTEM_A_SRCS_S = $(filter %.S,$(LIBC_SYSTEM_A_FILES))
13+
LIBC_SYSTEM_A_SRCS_C = $(filter %.c,$(LIBC_SYSTEM_A_FILES))
14+
15+
LIBC_SYSTEM_A_SRCS = \
16+
$(LIBC_SYSTEM_A_SRCS_S) \
17+
$(LIBC_SYSTEM_A_SRCS_C)
18+
19+
LIBC_SYSTEM_A_OBJS = \
20+
$(LIBC_SYSTEM_A_SRCS_S:%.S=o/$(MODE)/%.o) \
21+
$(LIBC_SYSTEM_A_SRCS_C:%.c=o/$(MODE)/%.o)
22+
23+
LIBC_SYSTEM_A_CHECKS = \
24+
$(LIBC_SYSTEM_A).pkg \
25+
$(LIBC_SYSTEM_A_HDRS:%=o/$(MODE)/%.ok)
26+
27+
LIBC_SYSTEM_A_DIRECTDEPS = \
28+
LIBC_CALLS \
29+
LIBC_FMT \
30+
LIBC_INTRIN \
31+
LIBC_NEXGEN32E \
32+
LIBC_PROC \
33+
LIBC_RUNTIME \
34+
LIBC_STDIO \
35+
LIBC_STR \
36+
LIBC_SYSV \
37+
THIRD_PARTY_MUSL \
38+
39+
LIBC_SYSTEM_A_DEPS := \
40+
$(call uniq,$(foreach x,$(LIBC_SYSTEM_A_DIRECTDEPS),$($(x))))
41+
42+
$(LIBC_SYSTEM_A):libc/system/ \
43+
$(LIBC_SYSTEM_A).pkg \
44+
$(LIBC_SYSTEM_A_OBJS)
45+
46+
$(LIBC_SYSTEM_A).pkg: \
47+
$(LIBC_SYSTEM_A_OBJS) \
48+
$(foreach x,$(LIBC_SYSTEM_A_DIRECTDEPS),$($(x)_A).pkg)
49+
50+
# offer assurances about the stack safety of cosmo libc
51+
$(LIBC_SYSTEM_A_OBJS): private COPTS += -Wframe-larger-than=4096 -Walloca-larger-than=4096
52+
53+
$(LIBC_SYSTEM_A_OBJS): private \
54+
CFLAGS += \
55+
-fno-sanitize=all \
56+
-Wframe-larger-than=4096 \
57+
-Walloca-larger-than=4096
58+
59+
o/$(MODE)/libc/system/fputc.o: private \
60+
CFLAGS += \
61+
-O3
62+
63+
o//libc/system/appendw.o: private \
64+
CFLAGS += \
65+
-Os
66+
67+
o/$(MODE)/libc/system/dirstream.o \
68+
o/$(MODE)/libc/system/mt19937.o: private \
69+
CFLAGS += \
70+
-ffunction-sections
71+
72+
LIBC_SYSTEM_LIBS = $(foreach x,$(LIBC_SYSTEM_ARTIFACTS),$($(x)))
73+
LIBC_SYSTEM_SRCS = $(foreach x,$(LIBC_SYSTEM_ARTIFACTS),$($(x)_SRCS))
74+
LIBC_SYSTEM_HDRS = $(foreach x,$(LIBC_SYSTEM_ARTIFACTS),$($(x)_HDRS))
75+
LIBC_SYSTEM_INCS = $(foreach x,$(LIBC_SYSTEM_ARTIFACTS),$($(x)_INCS))
76+
LIBC_SYSTEM_CHECKS = $(foreach x,$(LIBC_SYSTEM_ARTIFACTS),$($(x)_CHECKS))
77+
LIBC_SYSTEM_OBJS = $(foreach x,$(LIBC_SYSTEM_ARTIFACTS),$($(x)_OBJS))
78+
$(LIBC_SYSTEM_OBJS): $(BUILD_FILES) libc/system/BUILD.mk
79+
80+
.PHONY: o/$(MODE)/libc/system
81+
o/$(MODE)/libc/system: $(LIBC_SYSTEM_CHECKS)

libc/proc/cocmd.c renamed to libc/system/cocmd.c

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1055,12 +1055,9 @@ int _cocmd(int argc, char **argv, char **envp) {
10551055
unsupported['('] = true;
10561056
unsupported[')'] = true;
10571057
unsupported['{'] = true;
1058-
unsupported['}'] = false; // Perl t/op/exec.t depends on unpaired } being
1059-
// passed from the shell to Perl
1060-
if (!_weaken(glob)) {
1061-
unsupported['*'] = true;
1062-
unsupported['?'] = true;
1063-
}
1058+
// Perl t/op/exec.t depends on unpaired } being
1059+
// passed from the shell to Perl
1060+
unsupported['}'] = false;
10641061

10651062
if (argc >= 3 && !strcmp(argv[1], "--")) {
10661063
for (i = 2; i < argc; ++i) {
@@ -1121,18 +1118,16 @@ int _cocmd(int argc, char **argv, char **envp) {
11211118
Open(GetRedirectArg(prog, arg, 1), 0, O_RDONLY);
11221119
} else {
11231120
int globrc = GLOB_NOMATCH;
1124-
if (_weaken(glob)) {
1125-
globrc = _weaken(glob)(arg, globFlags, NULL, &globTheBuilder);
1126-
if (globrc == 0) {
1127-
for (; globCount < globTheBuilder.gl_pathc; globCount++) {
1128-
args[n++] = globTheBuilder.gl_pathv[globCount];
1129-
}
1130-
} else if (globrc != GLOB_NOMATCH) {
1131-
tinyprint(2, prog, ": error: with glob\n", NULL);
1132-
_Exit(16);
1121+
globrc = glob(arg, globFlags, NULL, &globTheBuilder);
1122+
if (globrc == 0) {
1123+
for (; globCount < globTheBuilder.gl_pathc; globCount++) {
1124+
args[n++] = globTheBuilder.gl_pathv[globCount];
11331125
}
1134-
globFlags |= GLOB_APPEND;
1126+
} else if (globrc != GLOB_NOMATCH) {
1127+
tinyprint(2, prog, ": error: with glob\n", NULL);
1128+
_Exit(16);
11351129
}
1130+
globFlags |= GLOB_APPEND;
11361131
if (globrc == GLOB_NOMATCH) {
11371132
args[n++] = arg;
11381133
}
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.

net/turfwar/BUILD.mk

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ NET_TURFWAR_DIRECTDEPS = \
2828
LIBC_SOCK \
2929
LIBC_STDIO \
3030
LIBC_STR \
31+
LIBC_SYSTEM \
3132
LIBC_SYSV \
3233
LIBC_THREAD \
3334
LIBC_X \
@@ -39,7 +40,7 @@ NET_TURFWAR_DIRECTDEPS = \
3940
THIRD_PARTY_SQLITE3 \
4041
THIRD_PARTY_STB \
4142
THIRD_PARTY_TZ \
42-
THIRD_PARTY_ZLIB
43+
THIRD_PARTY_ZLIB \
4344

4445
NET_TURFWAR_DEPS := \
4546
$(call uniq,$(foreach x,$(NET_TURFWAR_DIRECTDEPS),$($(x))))

test/ctl/BUILD.mk

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ TEST_CTL_DIRECTDEPS = \
2020
LIBC_NEXGEN32E \
2121
LIBC_PROC \
2222
LIBC_STDIO \
23-
LIBC_STDIO \
23+
LIBC_SYSTEM \
2424
LIBC_THREAD \
2525
THIRD_PARTY_LIBCXX \
2626
THIRD_PARTY_LIBCXXABI \

0 commit comments

Comments
 (0)