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 libc/sock/BUILD.mk #─┐
|
||||||
include net/http/BUILD.mk # ├──ONLINE RUNTIME
|
include net/http/BUILD.mk # ├──ONLINE RUNTIME
|
||||||
include third_party/musl/BUILD.mk # │ You can communicate with the network
|
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/system/BUILD.mk # │
|
||||||
include libc/x/BUILD.mk # │
|
include libc/x/BUILD.mk # │
|
||||||
include dsp/scale/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/openmp/BUILD.mk # │
|
||||||
include third_party/pcre/BUILD.mk # │
|
include third_party/pcre/BUILD.mk # │
|
||||||
include third_party/less/BUILD.mk # │
|
include third_party/less/BUILD.mk # │
|
||||||
include net/https/BUILD.mk # │
|
include net/https/BUILD.mk #─┘
|
||||||
include third_party/regex/BUILD.mk #─┘
|
|
||||||
include third_party/tidy/BUILD.mk
|
include third_party/tidy/BUILD.mk
|
||||||
include third_party/BUILD.mk
|
include third_party/BUILD.mk
|
||||||
include third_party/nsync/testing/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/lua/BUILD.mk
|
||||||
include third_party/tree/BUILD.mk
|
include third_party/tree/BUILD.mk
|
||||||
include third_party/zstd/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/awk/BUILD.mk
|
||||||
include third_party/hiredis/BUILD.mk
|
include third_party/hiredis/BUILD.mk
|
||||||
include third_party/make/BUILD.mk
|
include third_party/make/BUILD.mk
|
||||||
|
|
|
@ -35,6 +35,8 @@ LIBC_SYSTEM_A_DIRECTDEPS = \
|
||||||
LIBC_STR \
|
LIBC_STR \
|
||||||
LIBC_SYSV \
|
LIBC_SYSV \
|
||||||
THIRD_PARTY_MUSL \
|
THIRD_PARTY_MUSL \
|
||||||
|
THIRD_PARTY_SED \
|
||||||
|
THIRD_PARTY_TR \
|
||||||
|
|
||||||
LIBC_SYSTEM_A_DEPS := \
|
LIBC_SYSTEM_A_DEPS := \
|
||||||
$(call uniq,$(foreach x,$(LIBC_SYSTEM_A_DIRECTDEPS),$($(x))))
|
$(call uniq,$(foreach x,$(LIBC_SYSTEM_A_DIRECTDEPS),$($(x))))
|
||||||
|
|
|
@ -743,15 +743,12 @@ static int TryBuiltin(bool wantexec) {
|
||||||
return Usleep();
|
return Usleep();
|
||||||
if (!strcmp(args[0], "toupper"))
|
if (!strcmp(args[0], "toupper"))
|
||||||
return Toupper();
|
return Toupper();
|
||||||
if (_weaken(_tr) && !strcmp(args[0], "tr")) {
|
if (!strcmp(args[0], "tr"))
|
||||||
return Fake(_weaken(_tr), wantexec);
|
return Fake(_tr, wantexec);
|
||||||
}
|
if (!strcmp(args[0], "sed"))
|
||||||
if (_weaken(_sed) && !strcmp(args[0], "sed")) {
|
return Fake(_sed, wantexec);
|
||||||
return Fake(_weaken(_sed), wantexec);
|
if (_weaken(_awk) && strcmp(args[0], "awk"))
|
||||||
}
|
|
||||||
if (_weaken(_awk) && !strcmp(args[0], "awk")) {
|
|
||||||
return Fake(_weaken(_awk), wantexec);
|
return Fake(_weaken(_awk), wantexec);
|
||||||
}
|
|
||||||
if (_weaken(_curl) && !strcmp(args[0], "curl")) {
|
if (_weaken(_curl) && !strcmp(args[0], "curl")) {
|
||||||
return Fake(_weaken(_curl), wantexec);
|
return Fake(_weaken(_curl), wantexec);
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,9 +38,7 @@
|
||||||
* provides Bourne-like syntax on all platforms, including Windows. Many
|
* provides Bourne-like syntax on all platforms, including Windows. Many
|
||||||
* builtin commands are included, e.g. exit, cd, rm, [, cat, wait, exec,
|
* builtin commands are included, e.g. exit, cd, rm, [, cat, wait, exec,
|
||||||
* env, echo, read, true, test, kill, touch, rmdir, mkdir, false, mktemp
|
* env, echo, read, true, test, kill, touch, rmdir, mkdir, false, mktemp
|
||||||
* and usleep. It's also possible to __static_yoink() the symbols `_tr`,
|
* sed, tr, and usleep.
|
||||||
* `_sed`, `_awk`, and `_curl` for the tr, sed, awk and curl commands if
|
|
||||||
* you're using the Cosmopolitan mono-repo.
|
|
||||||
*
|
*
|
||||||
* If you just have a program name and arguments, and you don't need the
|
* 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
|
* 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/calls/typedef/u.h"
|
||||||
#include "libc/limits.h"
|
#include "libc/limits.h"
|
||||||
#include "third_party/regex/regex.h"
|
#include "third_party/regex/regex.h"
|
||||||
|
#include "third_party/sed/shade.h"
|
||||||
COSMOPOLITAN_C_START_
|
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 "libc/stdio/stdio.h"
|
||||||
#include "third_party/regex/regex.h"
|
#include "third_party/regex/regex.h"
|
||||||
#include "third_party/sed/defs.h"
|
#include "third_party/sed/defs.h"
|
||||||
|
#include "third_party/sed/shade.h"
|
||||||
COSMOPOLITAN_C_START_
|
COSMOPOLITAN_C_START_
|
||||||
|
|
||||||
extern struct s_command *prog;
|
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"
|
#include "libc/limits.h"
|
||||||
COSMOPOLITAN_C_START_
|
COSMOPOLITAN_C_START_
|
||||||
|
|
||||||
|
#define next _tr_next
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
enum { STRING1, STRING2 } which;
|
enum { STRING1, STRING2 } which;
|
||||||
enum { EOS, INFINITE, NORMAL, RANGE, SEQUENCE, SET } state;
|
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/cmd.h"
|
||||||
#include "third_party/tr/extern.h"
|
#include "third_party/tr/extern.h"
|
||||||
|
|
||||||
int delete[NCHARS], squeeze[NCHARS];
|
static int delete[NCHARS], squeeze[NCHARS];
|
||||||
int translate[NCHARS] = {
|
static int translate[NCHARS] = {
|
||||||
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* ASCII */
|
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* ASCII */
|
||||||
0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
|
0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
|
||||||
0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
|
0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
|
||||||
|
@ -78,8 +78,8 @@ int translate[NCHARS] = {
|
||||||
0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
|
0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
|
||||||
};
|
};
|
||||||
|
|
||||||
STR s1 = { STRING1, NORMAL, 0, OOBCH, { 0, OOBCH }, NULL, NULL };
|
static STR s1 = { STRING1, NORMAL, 0, OOBCH, { 0, OOBCH }, NULL, NULL };
|
||||||
STR s2 = { STRING2, 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 setup(int *, char *, STR *, int);
|
||||||
static void usage(void);
|
static void usage(void);
|
||||||
|
@ -90,9 +90,6 @@ _tr(int argc, char *argv[])
|
||||||
int ch, cnt, lastch, *p;
|
int ch, cnt, lastch, *p;
|
||||||
int cflag, dflag, sflag;
|
int cflag, dflag, sflag;
|
||||||
|
|
||||||
if (pledge("stdio", NULL) == -1)
|
|
||||||
err(1, "pledge");
|
|
||||||
|
|
||||||
cflag = dflag = sflag = 0;
|
cflag = dflag = sflag = 0;
|
||||||
while ((ch = getopt(argc, argv, "Ccds")) != -1)
|
while ((ch = getopt(argc, argv, "Ccds")) != -1)
|
||||||
switch(ch) {
|
switch(ch) {
|
||||||
|
|
Loading…
Reference in a new issue