• syn.c: replace expanded use of str_save() with the actual macro

• others: fix 6 (!) cases of non-constant or side-effect arguments
  to the str_save() or str_nsave() macros, and other abuse of them
• also fix some cosmetics and other un-nice code while here
This commit is contained in:
tg 2008-07-12 16:56:40 +00:00
parent 9eae0851ef
commit 0b4f34e0a8
7 changed files with 40 additions and 37 deletions

10
eval.c
View File

@ -2,7 +2,7 @@
#include "sh.h"
__RCSID("$MirOS: src/bin/mksh/eval.c,v 1.46 2008/05/17 18:46:58 tg Exp $");
__RCSID("$MirOS: src/bin/mksh/eval.c,v 1.47 2008/07/12 16:56:38 tg Exp $");
#ifdef MKSH_SMALL
#define MKSH_NOPWNAM
@ -425,7 +425,8 @@ expand(const char *cp, /* input word */
goto no_repl;
/* prepare string on which to work */
sbeg = s = str_save(str_val(st->var), ATEMP);
tpat0 = str_val(st->var);
sbeg = s = str_save(tpat0, ATEMP);
/* first see if we have any match at all */
tpat0 = pat;
@ -769,10 +770,7 @@ expand(const char *cp, /* input word */
Xlength(ds, dp) == 0) {
char *p;
if ((p = str_nsave(null, 0, ATEMP))
== NULL)
internal_errorf("unable "
"to allocate memory");
*(p = alloc(1, ATEMP)) = '\0';
XPput(*wp, p);
}
type = XSUBMID;

7
expr.c
View File

@ -2,7 +2,7 @@
#include "sh.h"
__RCSID("$MirOS: src/bin/mksh/expr.c,v 1.17 2008/04/20 00:24:25 tg Exp $");
__RCSID("$MirOS: src/bin/mksh/expr.c,v 1.18 2008/07/12 16:56:38 tg Exp $");
/* The order of these enums is constrained by the order of opinfo[] */
enum token {
@ -480,9 +480,12 @@ exprtoken(Expr_state *es)
tvar = str_nsave(es->tokp, cp - es->tokp, ATEMP);
goto process_tvar;
} else if (ksh_isdigit(c)) {
int i;
while (c != '_' && (ksh_isalnux(c) || c == '#'))
c = *cp++;
tvar = str_nsave(es->tokp, --cp - es->tokp, ATEMP);
i = --cp - es->tokp;
tvar = str_nsave(es->tokp, i, ATEMP);
process_tvar:
es->val = tempvar();
es->val->flag &= ~INTEGER;

11
funcs.c
View File

@ -5,7 +5,7 @@
#include "sh.h"
__RCSID("$MirOS: src/bin/mksh/funcs.c,v 1.83 2008/06/08 17:16:25 tg Exp $");
__RCSID("$MirOS: src/bin/mksh/funcs.c,v 1.84 2008/07/12 16:56:39 tg Exp $");
/* A leading = means assignments before command are kept;
* a leading * means a POSIX special builtin;
@ -1074,8 +1074,10 @@ c_alias(const char **wp)
struct tbl *ap;
int h;
if ((val = cstrchr(alias, '=')))
alias = xalias = str_nsave(alias, val++ - alias, ATEMP);
if ((val = cstrchr(alias, '='))) {
h = val++ - alias;
alias = xalias = str_nsave(alias, h, ATEMP);
}
h = hash(alias);
if (val == NULL && !tflag && !xflag) {
ap = ktsearch(t, alias, h);
@ -1103,8 +1105,7 @@ c_alias(const char **wp)
afree((void*)ap->val.s, APERM);
}
/* ignore values for -t (at&t ksh does this) */
newval = tflag ? search(alias, path, X_OK, NULL) :
val;
newval = tflag ? search(alias, path, X_OK, NULL) : val;
if (newval) {
ap->val.s = str_save(newval, APERM);
ap->flag |= ALLOC|ISSET;

View File

@ -3,7 +3,7 @@
#include "sh.h"
__RCSID("$MirOS: src/bin/mksh/histrap.c,v 1.65 2008/07/06 22:41:08 tg Exp $");
__RCSID("$MirOS: src/bin/mksh/histrap.c,v 1.66 2008/07/12 16:56:39 tg Exp $");
/*-
* MirOS: This is the default mapping type, and need not be specified.
@ -21,7 +21,7 @@ static int hist_count_lines(unsigned char *, int);
static int hist_shrink(unsigned char *, int);
static unsigned char *hist_skip_back(unsigned char *,int *,int);
static void histload(Source *, unsigned char *, int);
static void histinsert(Source *, int, unsigned char *);
static void histinsert(Source *, int, const char *);
static void writehistfile(int, char *);
static int sprinkle(int);
#endif
@ -68,7 +68,8 @@ c_fc(const char **wp)
sflag++;
else {
size_t len = strlen(p);
editor = str_nsave(p, len + 4, ATEMP);
editor = alloc(len + 4, ATEMP);
memcpy(editor, p, len);
memcpy(editor + len, " $_", 4);
}
break;
@ -639,8 +640,7 @@ hist_init(Source *s)
hist_source = s;
#if HAVE_PERSISTENT_HISTORY
hname = str_val(global("HISTFILE"));
if (hname == NULL)
if ((hname = str_val(global("HISTFILE"))) == NULL)
return;
hname = str_save(hname, APERM);
@ -855,7 +855,7 @@ histload(Source *s, unsigned char *base, int bytes)
/* worry about line numbers */
if (histptr >= history && lno-1 != s->line) {
/* a replacement ? */
histinsert(s, lno, line);
histinsert(s, lno, (char *)line);
} else {
s->line = lno;
histsave(lno, (char *)line, 0);
@ -870,15 +870,15 @@ histload(Source *s, unsigned char *base, int bytes)
* Insert a line into the history at a specified number
*/
static void
histinsert(Source *s, int lno, unsigned char *line)
histinsert(Source *s, int lno, const char *line)
{
char **hp;
if (lno >= s->line-(histptr-history) && lno <= s->line) {
hp = &histptr[lno-s->line];
if (lno >= s->line - (histptr - history) && lno <= s->line) {
hp = &histptr[lno - s->line];
if (*hp)
afree((void*)*hp, APERM);
*hp = str_save((char *)line, APERM);
*hp = str_save(line, APERM);
}
}
@ -1005,9 +1005,8 @@ inittraps(void)
else {
char *s;
sigtraps[i].name = s = str_save(
!strncasecmp(cs, "SIG", 3) ? cs + 3 : cs,
APERM);
s = !strncasecmp(cs, "SIG", 3) ? cs + 3 : cs;
sigtraps[i].name = s = str_save(s, APERM);
while ((*s = ksh_toupper(*s)))
++s;
}

9
lex.c
View File

@ -2,7 +2,7 @@
#include "sh.h"
__RCSID("$MirOS: src/bin/mksh/lex.c,v 1.65 2008/07/09 21:32:43 tg Exp $");
__RCSID("$MirOS: src/bin/mksh/lex.c,v 1.66 2008/07/12 16:56:39 tg Exp $");
/*
* states while lexing word
@ -1290,9 +1290,10 @@ set_prompt(int to, Source *s)
* unwinding its stack through this code as it
* exits.
*/
} else
prompt = str_save(substitute(ps1, 0),
saved_atemp);
} else {
char *cp = substitute(ps1, 0);
prompt = str_save(cp, saved_atemp);
}
quitenv(NULL);
}
break;

4
syn.c
View File

@ -2,7 +2,7 @@
#include "sh.h"
__RCSID("$MirOS: src/bin/mksh/syn.c,v 1.22 2008/06/28 22:51:56 tg Exp $");
__RCSID("$MirOS: src/bin/mksh/syn.c,v 1.23 2008/07/12 16:56:40 tg Exp $");
struct nesting_state {
int start_token; /* token than began nesting (eg, FOR) */
@ -366,7 +366,7 @@ get_command(int cf)
if (!is_wdvarname(yylval.cp, true))
yyerror("%s: bad identifier\n",
c == FOR ? "for" : "select");
t->str = str_nsave(ident, strlen(ident), ATEMP);
t->str = str_save(ident, ATEMP);
nesting_push(&old_nesting, c);
t->vars = wordlist();
t->left = dogroup();

11
var.c
View File

@ -2,7 +2,7 @@
#include "sh.h"
__RCSID("$MirOS: src/bin/mksh/var.c,v 1.56 2008/05/17 18:47:03 tg Exp $");
__RCSID("$MirOS: src/bin/mksh/var.c,v 1.57 2008/07/12 16:56:40 tg Exp $");
/*
* Variables
@ -130,7 +130,7 @@ array_index_calc(const char *n, bool *arrayp, uint32_t *valp)
/* Calculate the value of the subscript */
*arrayp = true;
tmp = str_nsave(p+1, len-2, ATEMP);
tmp = str_nsave(p + 1, len - 2, ATEMP);
sub = substitute(tmp, 0);
afree(tmp, ATEMP);
n = str_nsave(n, p - n, ATEMP);
@ -642,9 +642,10 @@ typeset(const char *var, Tflag set, Tflag clr, int field, int base)
}
val += len;
}
if (*val == '=')
tvar = str_nsave(var, val++ - var, ATEMP);
else {
if (*val == '=') {
int i = val++ - var;
tvar = str_nsave(var, i, ATEMP);
} else {
/* Importing from original environment: must have an = */
if (set & IMPORT)
return NULL;