Skip to content

Commit

Permalink
Strongly link tr and sed into system() and popen()
Browse files Browse the repository at this point in the history
  • Loading branch information
jart committed Nov 16, 2024
1 parent cafdb45 commit 1312f60
Show file tree
Hide file tree
Showing 9 changed files with 51 additions and 22 deletions.
8 changes: 4 additions & 4 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -274,6 +274,9 @@ 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 third_party/regex/BUILD.mk #
include third_party/tr/BUILD.mk #
include third_party/sed/BUILD.mk #
include libc/system/BUILD.mk #
include libc/x/BUILD.mk #
include dsp/scale/BUILD.mk #
Expand All @@ -294,8 +297,7 @@ include third_party/libcxx/BUILD.mk # │
include third_party/openmp/BUILD.mk #
include third_party/pcre/BUILD.mk #
include third_party/less/BUILD.mk #
include net/https/BUILD.mk #
include third_party/regex/BUILD.mk #─┘
include net/https/BUILD.mk #─┘
include third_party/tidy/BUILD.mk
include third_party/BUILD.mk
include third_party/nsync/testing/BUILD.mk
Expand All @@ -314,8 +316,6 @@ include third_party/double-conversion/test/BUILD.mk
include third_party/lua/BUILD.mk
include third_party/tree/BUILD.mk
include third_party/zstd/BUILD.mk
include third_party/tr/BUILD.mk
include third_party/sed/BUILD.mk
include third_party/awk/BUILD.mk
include third_party/hiredis/BUILD.mk
include third_party/make/BUILD.mk
Expand Down
2 changes: 2 additions & 0 deletions libc/system/BUILD.mk
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@ LIBC_SYSTEM_A_DIRECTDEPS = \
LIBC_STR \
LIBC_SYSV \
THIRD_PARTY_MUSL \
THIRD_PARTY_SED \
THIRD_PARTY_TR \

LIBC_SYSTEM_A_DEPS := \
$(call uniq,$(foreach x,$(LIBC_SYSTEM_A_DIRECTDEPS),$($(x))))
Expand Down
13 changes: 5 additions & 8 deletions libc/system/cocmd.c
Original file line number Diff line number Diff line change
Expand Up @@ -743,15 +743,12 @@ static int TryBuiltin(bool wantexec) {
return Usleep();
if (!strcmp(args[0], "toupper"))
return Toupper();
if (_weaken(_tr) && !strcmp(args[0], "tr")) {
return Fake(_weaken(_tr), wantexec);
}
if (_weaken(_sed) && !strcmp(args[0], "sed")) {
return Fake(_weaken(_sed), wantexec);
}
if (_weaken(_awk) && !strcmp(args[0], "awk")) {
if (!strcmp(args[0], "tr"))
return Fake(_tr, wantexec);
if (!strcmp(args[0], "sed"))
return Fake(_sed, wantexec);
if (_weaken(_awk) && strcmp(args[0], "awk"))
return Fake(_weaken(_awk), wantexec);
}
if (_weaken(_curl) && !strcmp(args[0], "curl")) {
return Fake(_weaken(_curl), wantexec);
}
Expand Down
4 changes: 1 addition & 3 deletions libc/system/system.c
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,7 @@
* provides Bourne-like syntax on all platforms, including Windows. Many
* builtin commands are included, e.g. exit, cd, rm, [, cat, wait, exec,
* env, echo, read, true, test, kill, touch, rmdir, mkdir, false, mktemp
* and usleep. It's also possible to __static_yoink() the symbols `_tr`,
* `_sed`, `_awk`, and `_curl` for the tr, sed, awk and curl commands if
* you're using the Cosmopolitan mono-repo.
* sed, tr, and usleep.
*
* If you just have a program name and arguments, and you don't need the
* full power of a UNIX-like shell, then consider using the Cosmopolitan
Expand Down
1 change: 1 addition & 0 deletions third_party/sed/defs.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
#include "libc/calls/typedef/u.h"
#include "libc/limits.h"
#include "third_party/regex/regex.h"
#include "third_party/sed/shade.h"
COSMOPOLITAN_C_START_

/*
Expand Down
1 change: 1 addition & 0 deletions third_party/sed/extern.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
#include "libc/stdio/stdio.h"
#include "third_party/regex/regex.h"
#include "third_party/sed/defs.h"
#include "third_party/sed/shade.h"
COSMOPOLITAN_C_START_

extern struct s_command *prog;
Expand Down
31 changes: 31 additions & 0 deletions third_party/sed/shade.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
#ifndef COSMOPOLITAN_THIRD_PARTY_SED_SHADE_H_
#define COSMOPOLITAN_THIRD_PARTY_SED_SHADE_H_

#define prog _sed_prog
#define appends_ _sed_appends_
#define g_match _sed_g_match
#define maxnsub _sed_maxnsub
#define linenum _sed_linenum
#define appendnum _sed_appendnum
#define aflag _sed_aflag
#define eflag _sed_eflag
#define nflag _sed_nflag
#define fname _sed_fname
#define outfname _sed_outfname
#define infile _sed_infile
#define outfile _sed_outfile
#define rflags _sed_rflags
#define cfclose _sed_cfclose
#define compile _sed_compile
#define cspace _sed_cspace
#define cu_fgets _sed_cu_fgets
#define mf_fgets _sed_mf_fgets
#define lastline _sed_lastline
#define process _sed_process
#define resetstate _sed_resetstate
#define strregerror _sed_strregerror
#define xmalloc _sed_xmalloc
#define xrealloc _sed_xrealloc
#define xcalloc _sed_xcalloc

#endif /* COSMOPOLITAN_THIRD_PARTY_SED_SHADE_H_ */
2 changes: 2 additions & 0 deletions third_party/tr/extern.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
#include "libc/limits.h"
COSMOPOLITAN_C_START_

#define next _tr_next

typedef struct {
enum { STRING1, STRING2 } which;
enum { EOS, INFINITE, NORMAL, RANGE, SEQUENCE, SET } state;
Expand Down
11 changes: 4 additions & 7 deletions third_party/tr/tr.c
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,8 @@
#include "third_party/tr/cmd.h"
#include "third_party/tr/extern.h"

int delete[NCHARS], squeeze[NCHARS];
int translate[NCHARS] = {
static int delete[NCHARS], squeeze[NCHARS];
static int translate[NCHARS] = {
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* ASCII */
0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
Expand Down Expand Up @@ -78,8 +78,8 @@ int translate[NCHARS] = {
0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
};

STR s1 = { STRING1, NORMAL, 0, OOBCH, { 0, OOBCH }, NULL, NULL };
STR s2 = { STRING2, NORMAL, 0, OOBCH, { 0, OOBCH }, NULL, NULL };
static STR s1 = { STRING1, NORMAL, 0, OOBCH, { 0, OOBCH }, NULL, NULL };
static STR s2 = { STRING2, NORMAL, 0, OOBCH, { 0, OOBCH }, NULL, NULL };

static void setup(int *, char *, STR *, int);
static void usage(void);
Expand All @@ -90,9 +90,6 @@ _tr(int argc, char *argv[])
int ch, cnt, lastch, *p;
int cflag, dflag, sflag;

if (pledge("stdio", NULL) == -1)
err(1, "pledge");

cflag = dflag = sflag = 0;
while ((ch = getopt(argc, argv, "Ccds")) != -1)
switch(ch) {
Expand Down

0 comments on commit 1312f60

Please sign in to comment.