#include "sh.h"
-__RCSID("$MirOS: src/bin/mksh/syn.c,v 1.94.2.3 2015/04/12 22:32:35 tg Exp $");
+__RCSID("$MirOS: src/bin/mksh/syn.c,v 1.101 2015/04/29 20:07:35 tg Exp $");
struct nesting_state {
int start_token; /* token than began nesting (eg, FOR) */
if (iop->unit > 9) {
*cp++ = CHAR;
- *cp++ = '0' + (iop->unit / 10);
+ *cp++ = digits_lc[iop->unit / 10];
}
*cp++ = CHAR;
- *cp++ = '0' + (iop->unit % 10);
+ *cp++ = digits_lc[iop->unit % 10];
*cp = EOS;
iop->ioflag &= ~IOBASH;
}
static const char let_cmd[] = {
- CHAR, 'l', CHAR, 'e', CHAR, 't', CHAR, ']', EOS
+ QCHAR, 'l', CHAR, 'e', CHAR, 't', CHAR, ']', EOS
};
static const char setA_cmd0[] = {
- CHAR, 's', CHAR, 'e', CHAR, 't', EOS
+ QCHAR, 's', CHAR, 'e', CHAR, 't', EOS
};
static const char setA_cmd1[] = {
CHAR, '-', CHAR, 'A', EOS
/* (2 * sizeof(char *)) is small enough */
t->left->args = alloc(2 * sizeof(char *), ATEMP);
t->left->args[0] = tv = alloc(3, ATEMP);
- tv[0] = CHAR;
+ tv[0] = QCHAR;
tv[1] = ':';
tv[2] = EOS;
t->left->args[1] = NULL;
tv->tv_sec = 0;
/* parse integral part */
while (ksh_isdigit(*s)) {
- tt.tv_sec = tv->tv_sec * 10 + (*s++ - '0');
+ tt.tv_sec = tv->tv_sec * 10 + ksh_numdig(*s++);
+ /*XXX this overflow check maybe UB */
if (tt.tv_sec / 10 != tv->tv_sec) {
errno = EOVERFLOW;
return (true);
/* parse decimal fraction */
i = 100000;
while (ksh_isdigit(*s)) {
- tv->tv_usec += i * (*s++ - '0');
+ tv->tv_usec += i * ksh_numdig(*s++);
if (i == 1)
break;
i /= 10;