summaryrefslogtreecommitdiff
path: root/hash.c
diff options
context:
space:
mode:
authorToby Goodwin <tjg@star.le.ac.uk>2002-05-22 14:25:10 +0100
committerToby Goodwin <toby@paccrat.org>2015-05-16 21:22:10 +0100
commit2e67f638ea031ce0138891b6356806b463f5e9af (patch)
treee44106cf9680da9e45153b282a4d3603252ede99 /hash.c
parente354cf4fd756584239e7778217ee8860009e6728 (diff)
candidate: rc-1.6c7
Diffstat (limited to 'hash.c')
-rw-r--r--hash.c35
1 files changed, 29 insertions, 6 deletions
diff --git a/hash.c b/hash.c
index 16971ef..3f65ad8 100644
--- a/hash.c
+++ b/hash.c
@@ -228,14 +228,37 @@ extern void initenv(char **envp) {
}
}
+static char *neverexport[] = {
+ "apid", "apids", "bqstatus", "cdpath", "home",
+ "ifs", "path", "pid", "status", "*"
+};
+
+/* for a few variables that have default values, we export them only
+if they've been explicitly set; maybeexport[n].flag is TRUE if this
+has occurred. */
+struct nameflag {
+ char *name;
+ bool flag;
+};
+static struct nameflag maybeexport[] = {
+ { "prompt", FALSE },
+ { "version", FALSE }
+};
+
+void set_exportable(char *s, bool b) {
+ int i;
+ for (i = 0; i < arraysize(maybeexport); ++i)
+ if (maybeexport[i].flag != b && streq(s, maybeexport[i].name))
+ maybeexport[i].flag = b;
+}
+
static bool var_exportable(char *s) {
- static char *notforexport[] = {
- "apid", "apids", "cdpath", "home", "ifs",
- "path", "pid", "version", "*"
- };
int i;
- for (i = 0; i < arraysize(notforexport); i++)
- if (streq(s, notforexport[i]))
+ for (i = 0; i < arraysize(neverexport); i++)
+ if (streq(s, neverexport[i]))
+ return FALSE;
+ for (i = 0; i < arraysize(maybeexport); i++)
+ if (maybeexport[i].flag == FALSE && streq(s, maybeexport[i].name))
return FALSE;
return TRUE;
}