From 8d15541e85b391c1cd86907089d33f70d7ca0f65 Mon Sep 17 00:00:00 2001 From: Michael Forney 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