mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-01-31 03:27:39 +00:00
Strongly link tr and sed into system() and popen()
This commit is contained in:
parent
cafdb456ed
commit
1312f60245
9 changed files with 51 additions and 22 deletions
8
Makefile
8
Makefile
|
@ -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 # │
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
|
|
@ -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))))
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
1
third_party/sed/defs.h
vendored
1
third_party/sed/defs.h
vendored
|
@ -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_
|
||||
|
||||
/*
|
||||
|
|
1
third_party/sed/extern.h
vendored
1
third_party/sed/extern.h
vendored
|
@ -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;
|
||||
|
|
31
third_party/sed/shade.h
vendored
Normal file
31
third_party/sed/shade.h
vendored
Normal file
|
@ -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
third_party/tr/extern.h
vendored
2
third_party/tr/extern.h
vendored
|
@ -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;
|
||||
|
|
11
third_party/tr/tr.c
vendored
11
third_party/tr/tr.c
vendored
|
@ -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,
|
||||
|
@ -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);
|
||||
|
@ -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) {
|
||||
|
|
Loading…
Reference in a new issue