OSDN Git Service

Upgrade to mksh 51.
[android-x86/external-mksh.git] / src / syn.c
index 67a8ed7..dafeda9 100644 (file)
--- a/src/syn.c
+++ b/src/syn.c
@@ -23,7 +23,7 @@
 
 #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) */
@@ -214,10 +214,10 @@ synio(int cf)
 
                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;
@@ -243,10 +243,10 @@ nested(int type, int smark, int emark)
 }
 
 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
@@ -712,7 +712,7 @@ function_body(char *name,
                /* (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;
@@ -1074,7 +1074,8 @@ parse_usec(const char *s, struct timeval *tv)
        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);
@@ -1095,7 +1096,7 @@ parse_usec(const char *s, struct timeval *tv)
        /* 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;