diff options
author | Andy Fiddaman <omnios@citrus-it.co.uk> | 2020-12-27 17:47:37 +0000 |
---|---|---|
committer | Andy Fiddaman <omnios@citrus-it.co.uk> | 2021-01-30 17:13:33 +0000 |
commit | b30d193948be5a7794d7ae3ba0ed9c2f72c88e0f (patch) | |
tree | 6a37e590faffb9bb9af66887de645c546445036c /usr/src/lib/libpp/common/ppmisc.c | |
parent | df36e06d12cbf655ddf22339ef8c39fa2b83ebf8 (diff) | |
download | illumos-joyent-b30d193948be5a7794d7ae3ba0ed9c2f72c88e0f.tar.gz |
13405 ksh93 update to 2012-08-01
13434 sh: mishandles backslash as last character of a block of input
11750 ksh mkdir builtin doesn't honor special file permissions
9199 ksh93 builtin *grep -v mishandles blank lines, blows up libgcrypt-config
6756 sh (and ksh) have issues with ${1+"$@"}
6520 ksh: sleep could wait forever
4860 ksh93: core in printf
3791 /bin/sh's builtin 'rm' busted: 'rm -f' without arguments returns error
1047 ksh overwrites child core files
880 ksh93 coredumps on 'unset'
499 "interrupted system call" when using "tee" builtin in ksh
Reviewed by: Robert Mustacchi <rm@fingolfin.org>
Reviewed by: Hans Rosenfeld <rosenfeld@grumpf.hope-2000.org>
Reviewed by: Dominik Hassler <hadfl@omnios.org>
Approved by: Rich Lowe <richlowe@richlowe.net>
Diffstat (limited to 'usr/src/lib/libpp/common/ppmisc.c')
-rw-r--r-- | usr/src/lib/libpp/common/ppmisc.c | 242 |
1 files changed, 0 insertions, 242 deletions
diff --git a/usr/src/lib/libpp/common/ppmisc.c b/usr/src/lib/libpp/common/ppmisc.c deleted file mode 100644 index f4dea77f5c..0000000000 --- a/usr/src/lib/libpp/common/ppmisc.c +++ /dev/null @@ -1,242 +0,0 @@ -/*********************************************************************** -* * -* This software is part of the ast package * -* Copyright (c) 1986-2009 AT&T Intellectual Property * -* and is licensed under the * -* Common Public License, Version 1.0 * -* by AT&T Intellectual Property * -* * -* A copy of the License is available at * -* http://www.opensource.org/licenses/cpl1.0.txt * -* (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) * -* * -* Information and Software Systems Research * -* AT&T Research * -* Florham Park NJ * -* * -* Glenn Fowler <gsf@research.att.com> * -* * -***********************************************************************/ -#pragma prototyped -/* - * Glenn Fowler - * AT&T Research - * - * miscellaneous preprocessor support - */ - -#include "pplib.h" - -/* - * macro symbol def|ref - */ - -struct ppsymbol* -pprefmac(char* name, int ref) -{ - register struct ppsymbol* sym; - - if (!(sym = ppsymget(pp.symtab, name)) && (ref <= REF_NORMAL && pp.macref || ref == REF_CREATE || ref == REF_DELETE && (pp.mode & (INIT|READONLY)))) - { - if ((pp.state & COMPILE) && pp.truncate && strlen(name) > pp.truncate) - name[pp.truncate] = 0; - sym = ppsymset(pp.symtab, NiL); - } - if (sym && ref <= REF_NORMAL) - { - if (pp.macref) (*pp.macref)(sym, error_info.file, error_info.line, ref == REF_NORMAL && (pp.state & CONDITIONAL) ? REF_IF : ref, 0L); - if (!sym->macro) sym = 0; - } -#if COMPATIBLE - if (!(pp.state & COMPATIBILITY)) -#endif - if (ref == REF_IF && sym && (sym->flags & SYM_PREDEFINED) && *name != '_' && !(pp.mode & (HOSTED|INACTIVE))) - { - if (pp.state & STRICT) - { - error(1, "%s: obsolete predefined symbol reference disabled", name); - return(0); - } - error(1, "%s: obsolete predefined symbol referenced", name); - } - return(sym); -} - -/* - * common predicate assertion operations - * op is DEFINE or UNDEF - */ - -void -ppassert(int op, char* pred, char* args) -{ - register struct pplist* a; - register struct ppsymbol* sym; - register struct pplist* p; - register struct pplist* q; - - if (!args) switch (op) - { - case DEFINE: - goto mark; - case UNDEF: - a = 0; - goto unmark; - } - if (a = (struct pplist*)hashget(pp.prdtab, pred)) - { - p = 0; - q = a; - while (q) - { - if (streq(q->value, args)) - { - if (op == DEFINE) return; - q = q->next; - if (p) p->next = q; - else a = q; - } - else - { - p = q; - q = q->next; - } - } - if (op == UNDEF) - { - unmark: - hashput(pp.prdtab, pred, a); - if (sym = ppsymref(pp.symtab, pred)) - sym->flags &= ~SYM_PREDICATE; - return; - } - } - if (op == DEFINE) - { - p = newof(0, struct pplist, 1, 0); - p->next = a; - p->value = strdup(args); - hashput(pp.prdtab, NiL, p); - mark: - if ((pp.state & COMPILE) && pp.truncate) return; - if (sym = ppsymset(pp.symtab, pred)) - sym->flags |= SYM_PREDICATE; - } -} - -/* - * parse a predicate argument list - * the args are placed in pp.args - * the first non-space/paren argument token type is returned - * forms: - * - * predicate <identifier> type=T_ID - * predicate ( <identifier> ) type=T_ID - * predicate ( ) type=0 - * predicate ( <balanced-paren-list> ) type=T_STRING - * otherwise type=<other> - */ - -int -pppredargs(void) -{ - register int c; - register int n; - register int type; - char* pptoken; - - pptoken = pp.token; - pp.token = pp.args; - switch (type = pplex()) - { - case '(': - type = 0; - n = 1; - pp.state |= HEADER; - pp.state &= ~STRIP; - c = pplex(); - pp.state &= ~NOSPACE; - for (;;) - { - switch (c) - { - case '(': - n++; - break; - case '\n': - ungetchr(c); - error(2, "missing %d )%s in predicate argument list", n, n == 1 ? "" : "'s"); - type = 0; - goto done; - case ')': - if (!--n) goto done; - break; - } - pp.token = pp.toknxt; - if (c != ' ') - { - if (type) type = T_STRING; - else type = (c == T_ID) ? T_ID : T_STRING; - } - c = pplex(); - } - done: - pp.state &= ~HEADER; - pp.state |= NOSPACE|STRIP; - if (pp.token > pp.args && *(pp.token - 1) == ' ') pp.token--; - *pp.token = 0; - break; - case '\n': - ungetchr('\n'); - type = 0; - break; - } - pp.token = pptoken; - return(type); -} - -/* - * sync output line number - */ - -int -ppsync(void) -{ - long m; - - if ((pp.state & (ADD|HIDDEN))) - { - if (pp.state & ADD) - { - pp.state &= ~ADD; - m = pp.addp - pp.addbuf; - pp.addp = pp.addbuf; - ppprintf("%-.*s", m, pp.addbuf); - } - if (pp.linesync) - { - if ((pp.state & SYNCLINE) || pp.hidden >= MAXHIDDEN) - { - pp.hidden = 0; - pp.state &= ~(HIDDEN|SYNCLINE); - if (error_info.line) - (*pp.linesync)(error_info.line, error_info.file); - } - else - { - m = pp.hidden; - pp.hidden = 0; - pp.state &= ~HIDDEN; - while (m-- > 0) - ppputchar('\n'); - } - } - else - { - pp.hidden = 0; - pp.state &= ~HIDDEN; - ppputchar('\n'); - } - } - return 0; -} |