diff options
author | Kevin Ryde <user42@zip.com.au> | 2001-11-07 23:36:19 +0100 |
---|---|---|
committer | Kevin Ryde <user42@zip.com.au> | 2001-11-07 23:36:19 +0100 |
commit | bb9729e8e810a6c69b5dd15ced6d4c0d0916770b (patch) | |
tree | 791d98d8cf3552cf3a3474f16321176dcde781e4 /printf/doprnt.c | |
parent | 8de1f774eb83229d9a4619fa049ac028ce1757b2 (diff) | |
download | gmp-bb9729e8e810a6c69b5dd15ced6d4c0d0916770b.tar.gz |
* printf/doprnt.c: Support %n of all types, per glibc.
Diffstat (limited to 'printf/doprnt.c')
-rw-r--r-- | printf/doprnt.c | 35 |
1 files changed, 29 insertions, 6 deletions
diff --git a/printf/doprnt.c b/printf/doprnt.c index 447ee950d..793278ea1 100644 --- a/printf/doprnt.c +++ b/printf/doprnt.c @@ -396,15 +396,38 @@ __gmp_doprnt (const struct doprnt_funs_t *funs, void *data, FLUSH (); p = va_arg (ap, void *); switch (type) { - case 'H': * (char *) p = retval; break; - case 'h': * (short *) p = retval; break; - case 'l': * (long *) p = retval; break; - default: * (int *) p = retval; break; + case '\0': * (int *) p = retval; break; + case 'F': mpf_set_si ((mpf_ptr) p, (long) retval); break; + case 'H': * (char *) p = retval; break; + case 'h': * (short *) p = retval; break; +#if HAVE_INTMAX_T + case 'j': * (intmax_t *) p = retval; break; +#else + case 'j': ASSERT_FAIL (intmax_t not available); break; +#endif + case 'l': * (long *) p = retval; break; #if HAVE_LONG_LONG - case 'L': * (long long *) p = retval; break; + case 'L': * (long long *) p = retval; break; +#else + case 'L': ASSERT_FAIL (long long not available); break; +#endif +#if HAVE_QUAD_T + case 'q': * (quad_t *) p = retval; break; +#else + case 'q': ASSERT_FAIL (quad_t not available); break; +#endif + case 'Q': mpq_set_si ((mpq_ptr) p, (long) retval, 1L); break; +#if HAVE_PTRDIFF_T + case 't': * (ptrdiff_t *) p = retval; break; +#else + case 't': ASSERT_FAIL (ptrdiff_t not available); break; +#endif +#if HAVE_SIZE_T + case 'z': * (size_t *) p = retval; break; #else - case 'L': ASSERT_FAIL (long long not available); break; + case 'z': ASSERT_FAIL (size_t not available); break; #endif + case 'Z': mpz_set_si ((mpz_ptr) p, (long) retval); break; } } va_copy (last_ap, ap); |