pull in last OpenBSD diff - I must admit I neither fully understand
the diff nor the commit message, but they're probably knowing what they're doing on an unrelated side note, mksh-beta.cpio.gz didn't get tested by many people... so mksh R27 will be released without much more... Set the index of item[0], since it might not have been set before (A=0; A[1]=1) and do not use a static buffer in str_val, since the results might be used in a loop. Report from jared r r spiegel; help from Matthias Kilian; ok beck@
This commit is contained in:
parent
f4ea190e65
commit
14a65d55e6
14
var.c
14
var.c
@ -1,8 +1,8 @@
|
|||||||
/* $OpenBSD: var.c,v 1.29 2006/03/13 08:21:37 otto Exp $ */
|
/* $OpenBSD: var.c,v 1.30 2006/05/21 18:40:39 otto Exp $ */
|
||||||
|
|
||||||
#include "sh.h"
|
#include "sh.h"
|
||||||
|
|
||||||
__RCSID("$MirOS: src/bin/mksh/var.c,v 1.17 2006/05/10 18:54:13 tg Exp $");
|
__RCSID("$MirOS: src/bin/mksh/var.c,v 1.18 2006/05/26 22:17:21 tg Exp $");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Variables
|
* Variables
|
||||||
@ -281,7 +281,7 @@ str_val(struct tbl *vp)
|
|||||||
else { /* integer source */
|
else { /* integer source */
|
||||||
/* worst case number length is when base=2, so use BITS(long) */
|
/* worst case number length is when base=2, so use BITS(long) */
|
||||||
/* minus base # number null */
|
/* minus base # number null */
|
||||||
static char strbuf[1 + 2 + 1 + 8 * sizeof(long) + 1];
|
char strbuf[1 + 2 + 1 + 8 * sizeof(long) + 1];
|
||||||
const char *digits = (vp->flag & UCASEV_AL) ?
|
const char *digits = (vp->flag & UCASEV_AL) ?
|
||||||
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" :
|
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" :
|
||||||
"0123456789abcdefghijklmnopqrstuvwxyz";
|
"0123456789abcdefghijklmnopqrstuvwxyz";
|
||||||
@ -310,6 +310,8 @@ str_val(struct tbl *vp)
|
|||||||
*--s = '-';
|
*--s = '-';
|
||||||
if (vp->flag & (RJUST|LJUST)) /* case already dealt with */
|
if (vp->flag & (RJUST|LJUST)) /* case already dealt with */
|
||||||
s = formatstr(vp, s);
|
s = formatstr(vp, s);
|
||||||
|
else
|
||||||
|
s = str_save(s, ATEMP);
|
||||||
}
|
}
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
@ -1070,12 +1072,10 @@ arraysearch(struct tbl *vp, int val)
|
|||||||
size_t namelen = strlen(vp->name) + 1;
|
size_t namelen = strlen(vp->name) + 1;
|
||||||
|
|
||||||
vp->flag |= ARRAY|DEFINED;
|
vp->flag |= ARRAY|DEFINED;
|
||||||
|
vp->index = 0;
|
||||||
/* The table entry is always [0] */
|
/* The table entry is always [0] */
|
||||||
if (val == 0) {
|
if (val == 0)
|
||||||
vp->index = 0;
|
|
||||||
return vp;
|
return vp;
|
||||||
}
|
|
||||||
prev = vp;
|
prev = vp;
|
||||||
curr = vp->u.array;
|
curr = vp->u.array;
|
||||||
while (curr && curr->index < val) {
|
while (curr && curr->index < val) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user