1*86d7f5d3SJohn Marino /* gmp_vsscanf -- formatted input from a string.
2*86d7f5d3SJohn Marino
3*86d7f5d3SJohn Marino Copyright 2001, 2002 Free Software Foundation, Inc.
4*86d7f5d3SJohn Marino
5*86d7f5d3SJohn Marino This file is part of the GNU MP Library.
6*86d7f5d3SJohn Marino
7*86d7f5d3SJohn Marino The GNU MP Library is free software; you can redistribute it and/or modify
8*86d7f5d3SJohn Marino it under the terms of the GNU Lesser General Public License as published by
9*86d7f5d3SJohn Marino the Free Software Foundation; either version 3 of the License, or (at your
10*86d7f5d3SJohn Marino option) any later version.
11*86d7f5d3SJohn Marino
12*86d7f5d3SJohn Marino The GNU MP Library is distributed in the hope that it will be useful, but
13*86d7f5d3SJohn Marino WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14*86d7f5d3SJohn Marino or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
15*86d7f5d3SJohn Marino License for more details.
16*86d7f5d3SJohn Marino
17*86d7f5d3SJohn Marino You should have received a copy of the GNU Lesser General Public License
18*86d7f5d3SJohn Marino along with the GNU MP Library. If not, see http://www.gnu.org/licenses/. */
19*86d7f5d3SJohn Marino
20*86d7f5d3SJohn Marino #include "config.h"
21*86d7f5d3SJohn Marino
22*86d7f5d3SJohn Marino #if HAVE_STDARG
23*86d7f5d3SJohn Marino #include <stdarg.h>
24*86d7f5d3SJohn Marino #else
25*86d7f5d3SJohn Marino #include <varargs.h>
26*86d7f5d3SJohn Marino #endif
27*86d7f5d3SJohn Marino
28*86d7f5d3SJohn Marino #include <string.h>
29*86d7f5d3SJohn Marino
30*86d7f5d3SJohn Marino #include "gmp.h"
31*86d7f5d3SJohn Marino #include "gmp-impl.h"
32*86d7f5d3SJohn Marino
33*86d7f5d3SJohn Marino
34*86d7f5d3SJohn Marino int
gmp_vsscanf(const char * s,const char * fmt,va_list ap)35*86d7f5d3SJohn Marino gmp_vsscanf (const char *s, const char *fmt, va_list ap)
36*86d7f5d3SJohn Marino {
37*86d7f5d3SJohn Marino #if SSCANF_WRITABLE_INPUT
38*86d7f5d3SJohn Marino /* We only actually need this if there's standard C types in fmt, and if
39*86d7f5d3SJohn Marino "s" is not already writable, but it's too much trouble to check that,
40*86d7f5d3SJohn Marino and in any case this writable sscanf input business is only for a few
41*86d7f5d3SJohn Marino old systems. */
42*86d7f5d3SJohn Marino size_t size;
43*86d7f5d3SJohn Marino char *alloc;
44*86d7f5d3SJohn Marino int ret;
45*86d7f5d3SJohn Marino size = strlen (s) + 1;
46*86d7f5d3SJohn Marino alloc = (char *) (*__gmp_allocate_func) (size);
47*86d7f5d3SJohn Marino memcpy (alloc, s, size);
48*86d7f5d3SJohn Marino s = alloc;
49*86d7f5d3SJohn Marino ret = __gmp_doscan (&__gmp_sscanf_funs, (void *) &s, fmt, ap);
50*86d7f5d3SJohn Marino (*__gmp_free_func) (alloc, size);
51*86d7f5d3SJohn Marino return ret;
52*86d7f5d3SJohn Marino
53*86d7f5d3SJohn Marino #else
54*86d7f5d3SJohn Marino return __gmp_doscan (&__gmp_sscanf_funs, (void *) &s, fmt, ap);
55*86d7f5d3SJohn Marino #endif
56*86d7f5d3SJohn Marino }
57