diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2014-11-06 11:08:14 +0000 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2014-11-06 11:08:14 +0000 |
commit | 97e2f27aa1c50d7ecb37314f912f7510d3ede879 (patch) | |
tree | f6b1fceb488c9f1e1714b447e216caaeddd0e2ec /newlib/libc/stdio/nano-vfprintf_i.c | |
parent | 3a4fcef804dac80dba686a793fdc8b96be6a54e6 (diff) | |
download | cygnal-97e2f27aa1c50d7ecb37314f912f7510d3ede879.tar.gz cygnal-97e2f27aa1c50d7ecb37314f912f7510d3ede879.tar.bz2 cygnal-97e2f27aa1c50d7ecb37314f912f7510d3ede879.zip |
* libc/stdio/nano-vfprintf_i.c (_printf_i): Use Newlib approach to
handle string that might be not nul-terminated.
* testsuite/newlib.stdio/nulprintf.c: New test.
Diffstat (limited to 'newlib/libc/stdio/nano-vfprintf_i.c')
-rw-r--r-- | newlib/libc/stdio/nano-vfprintf_i.c | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/newlib/libc/stdio/nano-vfprintf_i.c b/newlib/libc/stdio/nano-vfprintf_i.c index b1b0d1d67..b75a142da 100644 --- a/newlib/libc/stdio/nano-vfprintf_i.c +++ b/newlib/libc/stdio/nano-vfprintf_i.c @@ -211,15 +211,15 @@ number: case 's': cp = GET_ARG (N, *ap, char_ptr_t); /* Precision gives the maximum number of chars to be written from a - string, and take prec == -1 into consideration. */ - if ((u_int)(pdata->size = strlen (cp)) > (u_int)(pdata->prec)) - pdata->size = pdata->prec; - /* Below code is kept for reading. The check is redundant because - pdata->prec will be set to pdata->size if it is -1 previously. */ -#if 0 - if (pdata->prec > pdata->size) -#endif - pdata->prec = pdata->size; + string, and take prec == -1 into consideration. + Use normal Newlib approach here to support case where cp is not + nul-terminated. */ + char *p = memchr (cp, 0, pdata->prec); + + if (p != NULL) + pdata->prec = p - cp; + + pdata->size = pdata->prec; goto non_number_nosign; default: /* "%?" prints ?, unless ? is NUL. */ |