X-Git-Url: https://git.subgeniuskitty.com/unix-history/.git/blobdiff_plain/ed144646f0881b9d8e9cf24969d54f1ffc152cde..31cef89cb428866f787983e68246030321893df4:/usr/src/cmd/csh/sh.set.c diff --git a/usr/src/cmd/csh/sh.set.c b/usr/src/cmd/csh/sh.set.c index b849c95cdb..9228f54587 100644 --- a/usr/src/cmd/csh/sh.set.c +++ b/usr/src/cmd/csh/sh.set.c @@ -1,4 +1,5 @@ -/* Copyright (c) 1979 Regents of the University of California */ +static char *sccsid = "@(#)sh.set.c 4.1 10/9/80"; + #include "sh.h" /* @@ -10,6 +11,7 @@ doset(v) { register char *p; char *vp, op; + char **vecp; bool hadsub; int subscr; @@ -21,7 +23,7 @@ doset(v) } do { hadsub = 0; - for (vp = p; letter(*p); p++) + for (vp = p; alnum(*p); p++) continue; if (vp == p) goto setsyn; @@ -53,14 +55,30 @@ setsyn: break; e++; } - p = *e, *e = 0, set1(vp, saveblk(v), &shvhed), *e = p; + p = *e; + *e = 0; + vecp = saveblk(v); + set1(vp, vecp, &shvhed); + *e = p; v = e + 1; } else if (hadsub) asx(vp, subscr, savestr(p)); else set(vp, savestr(p)); - if (strcmp(vp, "path") == 0) + if (eq(vp, "path")) { + exportpath(adrof("path")->vec); dohash(); + } else if (eq(vp, "histchars")) { + register char *p = value("histchars"); + + HIST = *p++; + HISTSUB = *p; + } else if (eq(vp, "user")) + setenv("USER", value(vp)); + else if (eq(vp, "term")) + setenv("TERM", value(vp)); + else if (eq(vp, "home")) + setenv("HOME", value(vp)); } while (p = *v++); } @@ -248,10 +266,12 @@ char * savestr(s) register char *s; { + register char *n; if (s == 0) s = ""; - return (strcpy(calloc(1, strlen(s) + 1), s)); + strcpy(n = calloc(1, strlen(s) + 1), s); + return (n); } static char *putp; @@ -439,6 +459,10 @@ unset(v) { unset1(v, &shvhed); + if (adrof("histchars") == 0) { + HIST = '!'; + HISTSUB = '^'; + } } unset1(v, head) @@ -454,10 +478,8 @@ unset1(v, head) cnt = 0; while (vp = madrof(var, head)) unsetv1(vp->name, head), cnt++; -/* if (cnt == 0) - setname(var), bferr("No match"); -*/ + setname(var); } } @@ -481,7 +503,7 @@ unsetv1(var, head) shprev->link = vp->link; blkfree(vp->vec); xfree(vp->name); - xfree(vp); + xfree((char *)vp); } setNS(cp) @@ -511,10 +533,23 @@ shift(v) lshift(argv->vec, 1); } -deletev(cp) - register char *cp; +exportpath(val) +char **val; { - - if (adrof(cp)) - unsetv(cp); + char exppath[BUFSIZ]; + register char *dir; + + exppath[0] = 0; + if (val) + while (*val) { + if (strlen(*val) + strlen(exppath) + 2 > BUFSIZ) { + printf("Warning: ridiculously long PATH truncated\n"); + break; + } + strcat(exppath, *val++); + if (*val == 0 || eq(*val, ")")) + break; + strcat(exppath, ":"); + } + setenv("PATH", exppath); }