aboutsummaryrefslogtreecommitdiff
path: root/sh.set.c
diff options
context:
space:
mode:
Diffstat (limited to 'sh.set.c')
-rw-r--r--sh.set.c25
1 files changed, 23 insertions, 2 deletions
diff --git a/sh.set.c b/sh.set.c
index e714cc726bc0..1a53d7524c07 100644
--- a/sh.set.c
+++ b/sh.set.c
@@ -726,8 +726,11 @@ setq(const Char *name, Char **vec, struct varent *p, int flags)
while ((c = p->v_link[f]) != 0) {
if ((f = *name - *c->v_name) == 0 &&
(f = Strcmp(name, c->v_name)) == 0) {
- if (c->v_flags & VAR_READONLY)
+ if (c->v_flags & VAR_READONLY) {
+ if (flags & VAR_NOERROR)
+ return;
stderror(ERR_READONLY|ERR_NAME, c->v_name);
+ }
blkfree(c->vec);
c->v_flags = flags;
trim(c->vec = vec);
@@ -1123,7 +1126,7 @@ x:
cleanup_until(&old_pintr_disabled);
}
len = blklen(p->vec);
- xprintf("%S\t", p->v_name);
+ xprintf("%" TCSH_S "\t", p->v_name);
if (len != 1)
xputchar('(');
blkpr(p->vec);
@@ -1350,3 +1353,21 @@ update_wordchars(void)
word_chars = (VImode ? STR_WORD_CHARS_VI : STR_WORD_CHARS);
}
}
+
+void
+setstrstatus(Char *str)
+{
+ setv(STRstatus, str, VAR_READWRITE|VAR_NOERROR);
+}
+
+void
+setstatus(int n)
+{
+ setcopy(STRstatus, n ? STR1 : STR0, VAR_READWRITE|VAR_NOERROR);
+}
+
+int
+getstatus(void)
+{
+ return getn(varval(STRstatus));
+}