aboutsummaryrefslogtreecommitdiff
path: root/sh.set.c
diff options
context:
space:
mode:
authorDmitry Chagin <dchagin@FreeBSD.org>2023-01-29 20:46:19 +0000
committerDmitry Chagin <dchagin@FreeBSD.org>2023-01-29 20:46:19 +0000
commit143ef44f06822f82a8358d4c02f07102d963fe5f (patch)
treef9080b8a265dd926053ee7ae187e8fa46f3fb5e0 /sh.set.c
parent174d8b60324d7e8754709f7155e13ca95220b48c (diff)
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));
+}