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