summaryrefslogtreecommitdiff
path: root/printf/doprnt.c
diff options
context:
space:
mode:
authorKevin Ryde <user42@zip.com.au>2001-11-07 23:36:19 +0100
committerKevin Ryde <user42@zip.com.au>2001-11-07 23:36:19 +0100
commitbb9729e8e810a6c69b5dd15ced6d4c0d0916770b (patch)
tree791d98d8cf3552cf3a3474f16321176dcde781e4 /printf/doprnt.c
parent8de1f774eb83229d9a4619fa049ac028ce1757b2 (diff)
downloadgmp-bb9729e8e810a6c69b5dd15ced6d4c0d0916770b.tar.gz
* printf/doprnt.c: Support %n of all types, per glibc.
Diffstat (limited to 'printf/doprnt.c')
-rw-r--r--printf/doprnt.c35
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);