0001-Avoid-multiple-definitions-of-global-variables.patch (5732B)
- 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