diff options
-rwxr-xr-x | extra/rc/build | 33 | ||||
-rw-r--r-- | extra/rc/checksums | 3 | ||||
-rw-r--r-- | extra/rc/patches/0001-Avoid-multiple-definitions-of-global-variables.patch | 242 | ||||
-rw-r--r-- | extra/rc/patches/0002-Use-proc-self-fd-0-instead-of-dev-fd-0.patch | 28 | ||||
-rw-r--r-- | extra/rc/sources | 3 | ||||
-rw-r--r-- | extra/rc/version | 1 |
6 files changed, 310 insertions, 0 deletions
diff --git a/extra/rc/build b/extra/rc/build new file mode 100755 index 00000000..caaeb043 --- /dev/null +++ b/extra/rc/build @@ -0,0 +1,33 @@ +#!/bin/sh -e + +for patch in *.patch; do + patch -p1 < "$patch" +done + +# Change the location of rcmain to the /etc directory. +sed -i 's|/lib/rcmain|/etc/rcmain|;s|PREFIX||' unix.c + +mkdir -p "$1/usr/bin" +"${CC:-cc}" -o "$1/usr/bin/rc" \ + $CFLAGS -static \ + code.c \ + exec.c \ + getflags.c \ + glob.c \ + here.c \ + io.c \ + lex.c \ + pcmd.c \ + pfnc.c \ + simple.c \ + subr.c \ + trap.c \ + tree.c \ + var.c \ + y.tab.c \ + unix.c \ + havefork.c \ + prompt-null.c + +install -Dm644 rc.1 "$1/usr/share/man/man1/rc.1" +install -Dm644 rcmain.unix "$1/etc/rcmain" diff --git a/extra/rc/checksums b/extra/rc/checksums new file mode 100644 index 00000000..33c6e215 --- /dev/null +++ b/extra/rc/checksums @@ -0,0 +1,3 @@ +97f01ecc496e1130e20c0b49bb259a926c018c3f81336c194d09bdf7d9bd7d95 50b729e65d6f250ab9ab72487bd3c3d7c674e1fc.tar.gz +32a3ca9f25acf363a981eadf9fc52a522fe68ae1bbe96ac8ad6bc238f8daa6f6 0001-Avoid-multiple-definitions-of-global-variables.patch +cb560db5fd5c5a5a95113fcf77f736a97449c8b68b9e371c28751bd364b0fa65 0002-Use-proc-self-fd-0-instead-of-dev-fd-0.patch diff --git a/extra/rc/patches/0001-Avoid-multiple-definitions-of-global-variables.patch b/extra/rc/patches/0001-Avoid-multiple-definitions-of-global-variables.patch new file mode 100644 index 00000000..d8ca6e98 --- /dev/null +++ b/extra/rc/patches/0001-Avoid-multiple-definitions-of-global-variables.patch @@ -0,0 +1,242 @@ +From 8d15541e85b391c1cd86907089d33f70d7ca0f65 Mon Sep 17 00:00:00 2001 +From: Michael Forney <mforney@mforney.org> +Date: Mon, 4 Nov 2019 20:50:08 -0800 +Subject: [PATCH] Avoid multiple definitions of global variables + +--- + exec.c | 9 ++++++++- + exec.h | 12 ++++++------ + io.c | 1 + + io.h | 2 +- + lex.c | 3 +++ + rc.h | 30 +++++++++++++++--------------- + simple.c | 2 ++ + subr.c | 1 + + var.c | 1 + + 9 files changed, 38 insertions(+), 23 deletions(-) + +diff --git a/exec.c b/exec.c +index 3ad8a0d..268f429 100644 +--- a/exec.c ++++ b/exec.c +@@ -3,10 +3,17 @@ + #include "exec.h" + #include "io.h" + #include "fns.h" ++int mypid; ++thread *runq; ++code *codebuf; ++int ntrap; ++int trap[NSIG]; ++int eflagok; ++ + /* + * Start executing the given code at the given pc with the given redirection + */ +-char *argv0="rc"; ++char *argv0 = "rc"; + + void + start(code *c, int pc, var *local) +diff --git a/exec.h b/exec.h +index 06d2991..ab0bfb4 100644 +--- a/exec.h ++++ b/exec.h +@@ -56,18 +56,18 @@ struct thread{ + tree *treenodes; /* tree nodes created by this process */ + thread *ret; /* who continues when this finishes */ + }; +-thread *runq; ++extern thread *runq; + code *codecopy(code*); +-code *codebuf; /* compiler output */ +-int ntrap; /* number of outstanding traps */ +-int trap[NSIG]; /* number of outstanding traps per type */ ++extern code *codebuf; /* compiler output */ ++extern int ntrap; /* number of outstanding traps */ ++extern int trap[NSIG]; /* number of outstanding traps per type */ + struct builtin{ + char *name; + void (*fnc)(void); + }; + extern struct builtin Builtin[]; +-int eflagok; /* kludge flag so that -e doesn't exit in startup */ +-int havefork; ++extern int eflagok; /* kludge flag so that -e doesn't exit in startup */ ++extern int havefork; + + void execcd(void), execwhatis(void), execeval(void), execexec(void); + int execforkexec(void); +diff --git a/io.c b/io.c +index bb8af4a..228ec56 100644 +--- a/io.c ++++ b/io.c +@@ -3,6 +3,7 @@ + #include "exec.h" + #include "io.h" + #include "fns.h" ++io *err; + int pfmtnest = 0; + + void +diff --git a/io.h b/io.h +index 21cc6b8..68b9e89 100644 +--- a/io.h ++++ b/io.h +@@ -10,7 +10,7 @@ struct io{ + int fd; + char *bufp, *ebuf, *strp, buf[NBUF]; + }; +-io *err; ++extern io *err; + io *openfd(int), *openstr(void), *opencore(char *, int); + int emptybuf(io*); + void pchr(io*, int); +diff --git a/lex.c b/lex.c +index d2bef32..943112a 100644 +--- a/lex.c ++++ b/lex.c +@@ -22,6 +22,7 @@ idchr(int c) + return c>' ' && !strchr("!\"#$%&'()+,-./:;<=>?@[\\]^`{|}~", c); + } + int future = EOF; ++char *promptstr; + int doprompt = 1; + int inquote; + int incomm; +@@ -36,6 +37,7 @@ nextc(void) + future = getnext(); + return future; + } ++int lastc; + /* + * Consume the lookahead character. + */ +@@ -131,6 +133,7 @@ nextis(int c) + } + return 0; + } ++char tok[NTOK]; + + char* + addtok(char *p, int val) +diff --git a/rc.h b/rc.h +index 8a6a5bb..cbec275 100644 +--- a/rc.h ++++ b/rc.h +@@ -53,7 +53,7 @@ tree *mung1(tree*, tree*), *mung2(tree*, tree*, tree*); + tree *mung3(tree*, tree*, tree*, tree*), *epimung(tree*, tree*); + tree *simplemung(tree*), *heredoc(tree*); + void freetree(tree*); +-tree *cmdtree; ++extern tree *cmdtree; + /* + * The first word of any code vector is a reference count. + * Always create a new reference to a code vector by calling codecopy(.). +@@ -64,10 +64,10 @@ union code{ + int i; + char *s; + }; +-char *promptstr; +-int doprompt; ++extern char *promptstr; ++extern int doprompt; + #define NTOK 8192 +-char tok[NTOK]; ++extern char tok[NTOK]; + #define APPEND 1 + #define WRITE 2 + #define READ 3 +@@ -87,7 +87,7 @@ struct var{ + }; + var *vlook(char*), *gvlook(char*), *newvar(char*, var*); + #define NVAR 521 +-var *gvar[NVAR]; /* hash for globals */ ++extern var *gvar[NVAR]; /* hash for globals */ + #define new(type) ((type *)emalloc(sizeof(type))) + void *emalloc(long); + void *Malloc(ulong); +@@ -98,7 +98,7 @@ struct here{ + char *name; + struct here *next; + }; +-int mypid; ++extern int mypid; + /* + * Glob character escape in strings: + * In a string, GLOB must be followed by *?[ or GLOB. +@@ -117,10 +117,10 @@ int mypid; + #define threebyte(c) ((c&0xf0)==0xe0) + #define fourbyte(c) ((c&0xf8)==0xf0) + +-char **argp; +-char **args; +-int nerror; /* number of errors encountered during compilation */ +-int doprompt; /* is it time for a prompt? */ ++extern char **argp; ++extern char **args; ++extern int nerror; /* number of errors encountered during compilation */ ++extern int doprompt; /* is it time for a prompt? */ + /* + * Which fds are the reading/writing end of a pipe? + * Unfortunately, this can vary from system to system. +@@ -129,14 +129,14 @@ int doprompt; /* is it time for a prompt? */ + */ + #define PRD 0 + #define PWR 1 +-char *Rcmain, *Fdprefix; ++extern char *Rcmain, *Fdprefix; + #define register + /* + * How many dot commands have we executed? + * Used to ensure that -v flag doesn't print rcmain. + */ +-int ndot; ++extern int ndot; + char *getstatus(void); +-int lastc; +-int lastword; +-int kidpid; ++extern int lastc; ++extern int lastword; ++extern int kidpid; +diff --git a/simple.c b/simple.c +index d587227..7f1ee12 100644 +--- a/simple.c ++++ b/simple.c +@@ -6,6 +6,8 @@ + #include "exec.h" + #include "io.h" + #include "fns.h" ++int ndot; ++ + /* + * Search through the following code to see if we're just going to exit. + */ +diff --git a/subr.c b/subr.c +index a2d8a18..f031be5 100644 +--- a/subr.c ++++ b/subr.c +@@ -23,6 +23,7 @@ efree(void *p) + else pfmt(err, "free 0\n"); + } + extern int lastword, lastdol; ++int nerror; + + void + yyerror(char *m) +diff --git a/var.c b/var.c +index 2564ba2..b4a3ef5 100644 +--- a/var.c ++++ b/var.c +@@ -1,6 +1,7 @@ + #include "rc.h" + #include "exec.h" + #include "fns.h" ++var *gvar[NVAR]; + + int + hash(char *s, int n) +-- +2.24.0 + diff --git a/extra/rc/patches/0002-Use-proc-self-fd-0-instead-of-dev-fd-0.patch b/extra/rc/patches/0002-Use-proc-self-fd-0-instead-of-dev-fd-0.patch new file mode 100644 index 00000000..20edd9b6 --- /dev/null +++ b/extra/rc/patches/0002-Use-proc-self-fd-0-instead-of-dev-fd-0.patch @@ -0,0 +1,28 @@ +From 56359f53946306347ef9bb1f8f3c402adb8f8a5b Mon Sep 17 00:00:00 2001 +From: Michael Forney <mforney@mforney.org> +Date: Mon, 4 Nov 2019 20:59:30 -0800 +Subject: [PATCH] Use /proc/self/fd/0 instead of /dev/fd/0 + +--- + rcmain.unix | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/rcmain.unix b/rcmain.unix +index 42b3be4..1b5d6d2 100644 +--- a/rcmain.unix ++++ b/rcmain.unix +@@ -25,9 +25,9 @@ if not if(flag i){ + if(flag l && test -r $profile) . $profile + status='' + if(! ~ $#* 0) . $* +- . -i /dev/fd/0 ++ . -i /proc/self/fd/0 + } +-if not if(~ $#* 0) . /dev/fd/0 ++if not if(~ $#* 0) . /proc/self/fd/0 + if not{ + status='' + . $* +-- +2.24.0 + diff --git a/extra/rc/sources b/extra/rc/sources new file mode 100644 index 00000000..39df9510 --- /dev/null +++ b/extra/rc/sources @@ -0,0 +1,3 @@ +https://github.com/benavento/rc/archive/50b729e65d6f250ab9ab72487bd3c3d7c674e1fc.tar.gz +patches/0001-Avoid-multiple-definitions-of-global-variables.patch +patches/0002-Use-proc-self-fd-0-instead-of-dev-fd-0.patch diff --git a/extra/rc/version b/extra/rc/version new file mode 100644 index 00000000..5aee2628 --- /dev/null +++ b/extra/rc/version @@ -0,0 +1 @@ +50b729e65d 1 |