Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. /*-
  2.  * Code created by modifying iscanf.c which has following copyright.
  3.  *
  4.  * Copyright (c) 1990 The Regents of the University of California.
  5.  * All rights reserved.
  6.  *
  7.  * Redistribution and use in source and binary forms are permitted
  8.  * provided that the above copyright notice and this paragraph are
  9.  * duplicated in all such forms and that any documentation,
  10.  * advertising materials, and other materials related to such
  11.  * distribution and use acknowledge that the software was developed
  12.  * by the University of California, Berkeley.  The name of the
  13.  * University may not be used to endorse or promote products derived
  14.  * from this software without specific prior written permission.
  15.  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  16.  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  17.  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  18.  */
  19.  
  20. /*
  21. FUNCTION
  22. <<viscanf>>, <<vfiscanf>>, <<vsiscanf>>---format argument list
  23.  
  24. INDEX
  25.         viscanf
  26. INDEX
  27.         _viscanf_r
  28. INDEX
  29.         vfiscanf
  30. INDEX
  31.         _vfiscanf_r
  32. INDEX
  33.         vsiscanf
  34. INDEX
  35.         _vsiscanf_r
  36.  
  37. ANSI_SYNOPSIS
  38.         #include <stdio.h>
  39.         #include <stdarg.h>
  40.         int viscanf(const char *<[fmt]>, va_list <[list]>);
  41.         int vfiscanf(FILE *<[fp]>, const char *<[fmt]>, va_list <[list]>);
  42.         int vsiscanf(const char *<[str]>, const char *<[fmt]>, va_list <[list]>);
  43.  
  44.         int _viscanf_r(struct _reent *<[reent]>, const char *<[fmt]>,
  45.                        va_list <[list]>);
  46.         int _vfiscanf_r(struct _reent *<[reent]>, FILE *<[fp]>, const char *<[fmt]>,
  47.                        va_list <[list]>);
  48.         int _vsiscanf_r(struct _reent *<[reent]>, const char *<[str]>,
  49.                        const char *<[fmt]>, va_list <[list]>);
  50.  
  51. TRAD_SYNOPSIS
  52.         #include <stdio.h>
  53.         #include <varargs.h>
  54.         int viscanf( <[fmt]>, <[ist]>)
  55.         char *<[fmt]>;
  56.         va_list <[list]>;
  57.  
  58.         int vfiscanf( <[fp]>, <[fmt]>, <[list]>)
  59.         FILE *<[fp]>;
  60.         char *<[fmt]>;
  61.         va_list <[list]>;
  62.        
  63.         int vsiscanf( <[str]>, <[fmt]>, <[list]>)
  64.         char *<[str]>;
  65.         char *<[fmt]>;
  66.         va_list <[list]>;
  67.  
  68.         int _viscanf_r( <[reent]>, <[fmt]>, <[ist]>)
  69.         struct _reent *<[reent]>;
  70.         char *<[fmt]>;
  71.         va_list <[list]>;
  72.  
  73.         int _vfiscanf_r( <[reent]>, <[fp]>, <[fmt]>, <[list]>)
  74.         struct _reent *<[reent]>;
  75.         FILE *<[fp]>;
  76.         char *<[fmt]>;
  77.         va_list <[list]>;
  78.        
  79.         int _vsiscanf_r( <[reent]>, <[str]>, <[fmt]>, <[list]>)
  80.         struct _reent *<[reent]>;
  81.         char *<[str]>;
  82.         char *<[fmt]>;
  83.         va_list <[list]>;
  84.  
  85. DESCRIPTION
  86. <<viscanf>>, <<vfiscanf>>, and <<vsiscanf>> are (respectively) variants
  87. of <<iscanf>>, <<fiscanf>>, and <<siscanf>>.  They differ only in
  88. allowing their caller to pass the variable argument list as a
  89. <<va_list>> object (initialized by <<va_start>>) rather than
  90. directly accepting a variable number of arguments.
  91.  
  92. RETURNS
  93. The return values are consistent with the corresponding functions:
  94. <<viscanf>> returns the number of input fields successfully scanned,
  95. converted, and stored; the return value does not include scanned
  96. fields which were not stored.  
  97.  
  98. If <<viscanf>> attempts to read at end-of-file, the return value
  99. is <<EOF>>.
  100.  
  101. If no fields were stored, the return value is <<0>>.
  102.  
  103. The routines <<_viscanf_r>>, <<_vfiscanf_f>>, and <<_vsiscanf_r>> are
  104. reentrant versions which take an additional first parameter which points to the
  105. reentrancy structure.
  106.  
  107. PORTABILITY
  108. These are newlib extensions.
  109.  
  110. Supporting OS subroutines required:
  111. */
  112.  
  113. #include <_ansi.h>
  114. #include <reent.h>
  115. #include <stdio.h>
  116. #ifdef _HAVE_STDC
  117. #include <stdarg.h>
  118. #else
  119. #include <varargs.h>
  120. #endif
  121. #include "local.h"
  122.  
  123. #ifndef _REENT_ONLY
  124.  
  125. int
  126. _DEFUN(viscanf, (fmt, ap),
  127.        _CONST char *fmt _AND
  128.        va_list ap)
  129. {
  130.   struct _reent *reent = _REENT;
  131.  
  132.   _REENT_SMALL_CHECK_INIT (reent);
  133.   return __svfiscanf_r (reent, _stdin_r (reent), fmt, ap);
  134. }
  135.  
  136. #endif /* !_REENT_ONLY */
  137.  
  138. int
  139. _DEFUN(_viscanf_r, (ptr, fmt, ap),
  140.        struct _reent *ptr _AND
  141.        _CONST char *fmt   _AND
  142.        va_list ap)
  143. {
  144.   _REENT_SMALL_CHECK_INIT (ptr);
  145.   return __svfiscanf_r (ptr, _stdin_r (ptr), fmt, ap);
  146. }
  147.  
  148.