]> git.lizzy.rs Git - plan9front.git/commitdiff
fix awk format printing bugs (thanks aiju)
authorspew <devnull@localhost>
Thu, 18 Aug 2016 13:52:58 +0000 (08:52 -0500)
committerspew <devnull@localhost>
Thu, 18 Aug 2016 13:52:58 +0000 (08:52 -0500)
sys/src/cmd/awk/run.c

index 416d3a8c7a4b7a20b7251844c0acbd10cdc4cc61..6627f661c12f824b2a685c5196d9596b1897d438 100644 (file)
@@ -895,18 +895,21 @@ int format(char **pbuf, int *pbufsize, char *s, Node *a)  /* printf-like conversi
                case 'd': case 'i':
                        flag = 2;
                        if(*(s-1) == 'l') break;
-                       *(t-1) = 'l';
+                       t[-1] = 'l';
                        *t = 'd';
                        *++t = '\0';
                        break;
                case 'u':
                        flag = *(s-1) == 'l' ? 2 : 3;
-                       *t++ = 'u';
+                       t[-1] = 'u';
                        *t++ = 'd';
                        *t = '\0';
                        break;                          
                case 'o': case 'x': case 'X':
                        flag = *(s-1) == 'l' ? 2 : 3;
+                       t[-1] = 'u';
+                       *t++ = *s;
+                       *t = '\0';
                        break;
                case 's':
                        flag = 4;
@@ -939,7 +942,7 @@ int format(char **pbuf, int *pbufsize, char *s, Node *a)    /* printf-like conversi
                        break;
                case 1: sprint(p, fmt, getfval(x)); break;
                case 2: sprint(p, fmt, (long) getfval(x)); break;
-               case 3: sprint(p, fmt, (int) getfval(x)); break;
+               case 3: sprint(p, fmt, (int) getfval(x)); break;
                case 4:
                        t = getsval(x);
                        n = strlen(t);