sscanffuns.c
上传用户:qaz666999
上传日期:2022-08-06
资源大小:2570k
文件大小:2k
- /* __gmp_sscanf_funs -- support for formatted input from a string.
- THE FUNCTIONS IN THIS FILE ARE FOR INTERNAL USE ONLY. THEY'RE ALMOST
- CERTAIN TO BE SUBJECT TO INCOMPATIBLE CHANGES OR DISAPPEAR COMPLETELY IN
- FUTURE GNU MP RELEASES.
- Copyright 2001, 2002, 2003, 2009 Free Software Foundation, Inc.
- This file is part of the GNU MP Library.
- The GNU MP Library is free software; you can redistribute it and/or modify
- it under the terms of the GNU Lesser General Public License as published by
- the Free Software Foundation; either version 3 of the License, or (at your
- option) any later version.
- The GNU MP Library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
- License for more details.
- You should have received a copy of the GNU Lesser General Public License
- along with the GNU MP Library. If not, see http://www.gnu.org/licenses/. */
- #include <stdio.h>
- #include <stdarg.h>
- #include "gmp.h"
- #include "gmp-impl.h"
- #if 0
- static int
- scan (const char **sp, const char *fmt, ...)
- {
- va_list ap;
- int ret;
- va_start(ap, fmt);
- ret = vsscanf(*sp, fmt, ap);
- va_end(ap);
- return ret;
- }
- #else
- static int
- scan (const char **sp, const char *fmt, ...)
- {
- va_list ap;
- void *p1, *p2;
- int ret;
- va_start (ap, fmt);
- p1 = va_arg (ap, void *);
- p2 = va_arg (ap, void *);
- ret = sscanf (*sp, fmt, p1, p2);
- va_end (ap);
- return ret;
- }
- #endif
- static void
- step (const char **sp, int n)
- {
- ASSERT (n >= 0);
- /* shouldn't push us past the end of the string */
- #if WANT_ASSERT
- {
- int i;
- for (i = 0; i < n; i++)
- ASSERT ((*sp)[i] != ' ');
- }
- #endif
- (*sp) += n;
- }
- static int
- get (const char **sp)
- {
- const char *s;
- int c;
- s = *sp;
- c = (unsigned char) *s++;
- if (c == ' ')
- return EOF;
- *sp = s;
- return c;
- }
- static void
- unget (int c, const char **sp)
- {
- const char *s;
- s = *sp;
- if (c == EOF)
- {
- ASSERT (*s == ' ');
- return;
- }
- s--;
- ASSERT ((unsigned char) *s == c);
- *sp = s;
- }
- const struct gmp_doscan_funs_t __gmp_sscanf_funs = {
- (gmp_doscan_scan_t) scan,
- (gmp_doscan_step_t) step,
- (gmp_doscan_get_t) get,
- (gmp_doscan_unget_t) unget,
- };