]> rtime.felk.cvut.cz Git - l4.git/blobdiff - l4/pkg/dash/contrib/src/bltin/printf.c
Update
[l4.git] / l4 / pkg / dash / contrib / src / bltin / printf.c
index b0c3774c2f3d3a35da10887a0f5d1cc513398611..5f9e81c3a5b31100d9ee6578827100268b757029 100644 (file)
@@ -316,16 +316,24 @@ out:
 static char *
 mklong(const char *str, const char *ch)
 {
+       /*
+        * Replace a string like "%92.3u" with "%92.3"PRIuMAX.
+        *
+        * Although C99 does not guarantee it, we assume PRIiMAX,
+        * PRIoMAX, PRIuMAX, PRIxMAX, and PRIXMAX are all the same
+        * as PRIdMAX with the final 'd' replaced by the corresponding
+        * character.
+        */
+
        char *copy;
        size_t len;     
 
-       len = ch - str + 3;
+       len = ch - str + sizeof(PRIdMAX);
        STARTSTACKSTR(copy);
        copy = makestrspace(len, copy);
-       memcpy(copy, str, len - 3);
-       copy[len - 3] = 'j';
+       memcpy(copy, str, len - sizeof(PRIdMAX));
+       memcpy(copy + len - sizeof(PRIdMAX), PRIdMAX, sizeof(PRIdMAX));
        copy[len - 2] = *ch;
-       copy[len - 1] = '\0';
        return (copy);  
 }
 
@@ -443,7 +451,7 @@ echocmd(int argc, char **argv)
        }
 
        do {
-               char c;
+               int c;
 
                nonl += conv_escape_str(*argv);
                outstr(stackblock(), outs);