X-Git-Url: https://rtime.felk.cvut.cz/gitweb/l4.git/blobdiff_plain/8fe9942cde59835eb3c3c6936d866dd3305582ef..003b628647705666de261350195da72a38f2c4d2:/l4/pkg/dash/contrib/src/bltin/printf.c diff --git a/l4/pkg/dash/contrib/src/bltin/printf.c b/l4/pkg/dash/contrib/src/bltin/printf.c index b0c3774c2..5f9e81c3a 100644 --- a/l4/pkg/dash/contrib/src/bltin/printf.c +++ b/l4/pkg/dash/contrib/src/bltin/printf.c @@ -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);