172 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			172 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			C
		
	
	
	
| /*
 | |
|  * Copyright (c) 1990 The Regents of the University of California.
 | |
|  * All rights reserved.
 | |
|  *
 | |
|  * Redistribution and use in source and binary forms are permitted
 | |
|  * provided that the above copyright notice and this paragraph are
 | |
|  * duplicated in all such forms and that any documentation,
 | |
|  * advertising materials, and other materials related to such
 | |
|  * distribution and use acknowledge that the software was developed
 | |
|  * by the University of California, Berkeley.  The name of the
 | |
|  * University may not be used to endorse or promote products derived
 | |
|  * from this software without specific prior written permission.
 | |
|  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
 | |
|  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
 | |
|  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 | |
|  */
 | |
| 
 | |
| /*
 | |
| FUNCTION
 | |
| <<siprintf>>, <<fiprintf>>, <<iprintf>>, <<sniprintf>>, <<asiprintf>>, <<asniprintf>>---format output (integer only)
 | |
| 
 | |
| INDEX
 | |
| 	fiprintf
 | |
| INDEX
 | |
| 	_fiprintf_r
 | |
| INDEX
 | |
| 	iprintf
 | |
| INDEX
 | |
| 	_iprintf_r
 | |
| INDEX
 | |
| 	siprintf
 | |
| INDEX
 | |
| 	_siprintf_r
 | |
| INDEX
 | |
| 	sniprintf
 | |
| INDEX
 | |
| 	_sniprintf_r
 | |
| INDEX
 | |
| 	asiprintf
 | |
| INDEX
 | |
| 	_asiprintf_r
 | |
| INDEX
 | |
| 	asniprintf
 | |
| INDEX
 | |
| 	_asniprintf_r
 | |
| 
 | |
| ANSI_SYNOPSIS
 | |
|         #include <stdio.h>
 | |
| 
 | |
|         int iprintf(const char *<[format]>, ...);
 | |
|         int fiprintf(FILE *<[fd]>, const char *<[format]> , ...);
 | |
|         int siprintf(char *<[str]>, const char *<[format]>, ...);
 | |
|         int sniprintf(char *<[str]>, size_t <[size]>, const char *<[format]>, 
 | |
| 			...);
 | |
|         int asiprintf(char **<[strp]>, const char *<[format]>, ...);
 | |
|         char *asniprintf(char *<[str]>, size_t *<[size]>, 
 | |
| 			const char *<[format]>, ...);
 | |
| 
 | |
|         int _iprintf_r(struct _reent *<[ptr]>, const char *<[format]>, ...);
 | |
|         int _fiprintf_r(struct _reent *<[ptr]>, FILE *<[fd]>,
 | |
|                         const char *<[format]>, ...);
 | |
|         int _siprintf_r(struct _reent *<[ptr]>, char *<[str]>,
 | |
|                         const char *<[format]>, ...);
 | |
|         int _sniprintf_r(struct _reent *<[ptr]>, char *<[str]>, size_t <[size]>,
 | |
|                          const char *<[format]>, ...);
 | |
|         int _asiprintf_r(struct _reent *<[ptr]>, char **<[strp]>,
 | |
|                          const char *<[format]>, ...);
 | |
|         char *_asniprintf_r(struct _reent *<[ptr]>, char *<[str]>,
 | |
|                             size_t *<[size]>, const char *<[format]>, ...);
 | |
| 
 | |
| DESCRIPTION
 | |
|         <<iprintf>>, <<fiprintf>>, <<siprintf>>, <<sniprintf>>,
 | |
|         <<asiprintf>>, and <<asniprintf>> are the same as <<printf>>,
 | |
|         <<fprintf>>, <<sprintf>>, <<snprintf>>, <<asprintf>>, and
 | |
|         <<asnprintf>>, respectively, except that they restrict usage
 | |
|         to non-floating-point format specifiers.
 | |
| 
 | |
|         <<_iprintf_r>>, <<_fiprintf_r>>, <<_asiprintf_r>>,
 | |
|         <<_siprintf_r>>, <<_sniprintf_r>>, <<_asniprintf_r>> are
 | |
|         simply reentrant versions of the functions above.
 | |
| 
 | |
| RETURNS
 | |
| Similar to <<printf>>, <<fprintf>>, <<sprintf>>, <<snprintf>>, <<asprintf>>,
 | |
| and <<asnprintf>>.
 | |
| 
 | |
| PORTABILITY
 | |
| <<iprintf>>, <<fiprintf>>, <<siprintf>>, <<sniprintf>>, <<asiprintf>>,
 | |
| and <<asniprintf>> are newlib extensions.
 | |
| 
 | |
| Supporting OS subroutines required: <<close>>, <<fstat>>, <<isatty>>,
 | |
| <<lseek>>, <<read>>, <<sbrk>>, <<write>>.
 | |
| */
 | |
| 
 | |
| #include <_ansi.h>
 | |
| #include <reent.h>
 | |
| #include <stdio.h>
 | |
| #ifdef _HAVE_STDC
 | |
| #include <stdarg.h>
 | |
| #else
 | |
| #include <varargs.h>
 | |
| #endif
 | |
| #include <limits.h>
 | |
| #include "local.h"
 | |
| 
 | |
| int
 | |
| #ifdef _HAVE_STDC
 | |
| _DEFUN(_siprintf_r, (ptr, str, fmt),
 | |
|        struct _reent *ptr _AND
 | |
|        char *str          _AND
 | |
|        _CONST char *fmt _DOTS)
 | |
| #else
 | |
| _siprintf_r(ptr, str, fmt, va_alist)
 | |
|            struct _reent *ptr;
 | |
|            char *str;
 | |
|            _CONST char *fmt;
 | |
|            va_dcl
 | |
| #endif
 | |
| {
 | |
|   int ret;
 | |
|   va_list ap;
 | |
|   FILE f;
 | |
| 
 | |
|   f._flags = __SWR | __SSTR;
 | |
|   f._bf._base = f._p = (unsigned char *) str;
 | |
|   f._bf._size = f._w = INT_MAX;
 | |
|   f._file = -1;  /* No file. */
 | |
| #ifdef _HAVE_STDC
 | |
|   va_start (ap, fmt);
 | |
| #else
 | |
|   va_start (ap);
 | |
| #endif
 | |
|   ret = _svfiprintf_r (ptr, &f, fmt, ap);
 | |
|   va_end (ap);
 | |
|   *f._p = 0;
 | |
|   return (ret);
 | |
| }
 | |
| 
 | |
| #ifndef _REENT_ONLY
 | |
| 
 | |
| int
 | |
| #ifdef _HAVE_STDC
 | |
| _DEFUN(siprintf, (str, fmt),
 | |
|        char *str _AND
 | |
|        _CONST char *fmt _DOTS)
 | |
| #else
 | |
| siprintf(str, fmt, va_alist)
 | |
|         char *str;
 | |
|         _CONST char *fmt;
 | |
|         va_dcl
 | |
| #endif
 | |
| {
 | |
|   int ret;
 | |
|   va_list ap;
 | |
|   FILE f;
 | |
| 
 | |
|   f._flags = __SWR | __SSTR;
 | |
|   f._bf._base = f._p = (unsigned char *) str;
 | |
|   f._bf._size = f._w = INT_MAX;
 | |
|   f._file = -1;  /* No file. */
 | |
| #ifdef _HAVE_STDC
 | |
|   va_start (ap, fmt);
 | |
| #else
 | |
|   va_start (ap);
 | |
| #endif
 | |
|   ret = _svfiprintf_r (_REENT, &f, fmt, ap);
 | |
|   va_end (ap);
 | |
|   *f._p = 0;
 | |
|   return (ret);
 | |
| }
 | |
| 
 | |
| #endif
 |