diff options
author | Kevin Ryde <user42@zip.com.au> | 2003-12-06 23:48:29 +0100 |
---|---|---|
committer | Kevin Ryde <user42@zip.com.au> | 2003-12-06 23:48:29 +0100 |
commit | 2291c473f4b22a0757e512fae48159073ed96104 (patch) | |
tree | b7db9cb1320cafcf945fceca2a630db8d2407a1a /scanf | |
parent | 4deec60256d8bfe41c61a5f64c2b6a04745a141f (diff) | |
download | gmp-2291c473f4b22a0757e512fae48159073ed96104.tar.gz |
* scanf/sscanffuns.c (scan): Take varargs per gmp_doscan_scan_t, to
avoid any possible problems with a varargs call to a fixargs function.
Diffstat (limited to 'scanf')
-rw-r--r-- | scanf/sscanffuns.c | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/scanf/sscanffuns.c b/scanf/sscanffuns.c index 9152c1cc9..f5dff8385 100644 --- a/scanf/sscanffuns.c +++ b/scanf/sscanffuns.c @@ -27,11 +27,37 @@ MA 02111-1307, USA. */ #include "gmp.h" #include "gmp-impl.h" +#if HAVE_STDARG +#include <stdarg.h> +#else +#include <varargs.h> +#endif + static int -scan (const char **sp, const char *fmt, void *p1, void *p2) +#if HAVE_STDARG +scan (const char **sp, const char *fmt, ...) +#else +scan (va_alist) + va_dcl +#endif { - return sscanf (*sp, fmt, p1, p2); + va_list ap; + int ret; +#if HAVE_STDARG + va_start (ap, fmt); +#else + const char **sp; + const char *fmt; + va_start (ap); + sp = va_arg (ap, const char **); + fmt = va_arg (ap, const char *); +#endif + + ret = vsscanf (*sp, fmt, ap); + + va_end (ap); + return ret; } static void |