diff options
| author | Andrey A. Chernov <ache@FreeBSD.org> | 1997-12-24 23:02:47 +0000 | 
|---|---|---|
| committer | Andrey A. Chernov <ache@FreeBSD.org> | 1997-12-24 23:02:47 +0000 | 
| commit | 6e690ad4ca3f240aa8deb1a18660c97c72e6d2c3 (patch) | |
| tree | e4eb87a006e6435936a4d1fb84a91528af395108 /lib | |
| parent | e0b123f6d0eca4574a0d93f3e4f1f0d2aa93b4c4 (diff) | |
Notes
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/libc/stdio/snprintf.c | 15 | ||||
| -rw-r--r-- | lib/libc/stdio/vfprintf.c | 14 | ||||
| -rw-r--r-- | lib/libc/stdio/vsnprintf.c | 15 | 
3 files changed, 23 insertions, 21 deletions
| diff --git a/lib/libc/stdio/snprintf.c b/lib/libc/stdio/snprintf.c index bfcf72c9de6a..b3944e3be85b 100644 --- a/lib/libc/stdio/snprintf.c +++ b/lib/libc/stdio/snprintf.c @@ -39,7 +39,7 @@  static char sccsid[] = "@(#)snprintf.c	8.1 (Berkeley) 6/4/93";  #endif  static const char rcsid[] = -		"$Id: snprintf.c,v 1.7 1997/12/24 14:32:39 ache Exp $"; +		"$Id: snprintf.c,v 1.8 1997/12/24 20:24:05 ache Exp $";  #endif /* LIBC_SCCS and not lint */  #include <stdio.h> @@ -65,10 +65,12 @@ snprintf(str, n, fmt, va_alist)  	int ret;  	va_list ap;  	FILE f; +	int on; -	if (n == 0) -		return (0); -	if (--n > INT_MAX) +	on = n; +	if (n > 0) +		n--; +	if (n > INT_MAX)  		return (EOF);  #if __STDC__  	va_start(ap, fmt); @@ -80,7 +82,8 @@ snprintf(str, n, fmt, va_alist)  	f._bf._base = f._p = (unsigned char *)str;  	f._bf._size = f._w = n;  	ret = vfprintf(&f, fmt, ap); -	*f._p = 0; +	if (on > 0) +		*f._p = '\0';  	va_end(ap); -	return (ret > (int)n ? n : ret); +	return (ret);  } diff --git a/lib/libc/stdio/vfprintf.c b/lib/libc/stdio/vfprintf.c index 4abdbc4e7d28..3457c86de224 100644 --- a/lib/libc/stdio/vfprintf.c +++ b/lib/libc/stdio/vfprintf.c @@ -39,7 +39,7 @@  static char sccsid[] = "@(#)vfprintf.c	8.1 (Berkeley) 6/4/93";  #endif  static const char rcsid[] = -		"$Id: vfprintf.c,v 1.13 1997/12/19 21:59:22 bde Exp $"; +		"$Id: vfprintf.c,v 1.14 1997/12/24 13:47:13 ache Exp $";  #endif /* LIBC_SCCS and not lint */  /* @@ -643,18 +643,14 @@ fp_begin:		if (prec == -1)  			break;  #endif /* FLOATING_POINT */  		case 'n': -			n = ret; -			if ((fp->_flags & __SSTR) && -			    fp->_bf._size < n) -				n = fp->_bf._size;  			if (flags & QUADINT) -				*GETARG(quad_t *) = n; +				*GETARG(quad_t *) = ret;  			else if (flags & LONGINT) -				*GETARG(long *) = n; +				*GETARG(long *) = ret;  			else if (flags & SHORTINT) -				*GETARG(short *) = n; +				*GETARG(short *) = ret;  			else -				*GETARG(int *) = n; +				*GETARG(int *) = ret;  			continue;	/* no output */  		case 'O':  			flags |= LONGINT; diff --git a/lib/libc/stdio/vsnprintf.c b/lib/libc/stdio/vsnprintf.c index 738dd212f318..fa91175e92f1 100644 --- a/lib/libc/stdio/vsnprintf.c +++ b/lib/libc/stdio/vsnprintf.c @@ -39,7 +39,7 @@  static char sccsid[] = "@(#)vsnprintf.c	8.1 (Berkeley) 6/4/93";  #endif  static const char rcsid[] = -		"$Id: vsnprintf.c,v 1.7 1997/12/24 14:32:40 ache Exp $"; +		"$Id: vsnprintf.c,v 1.8 1997/12/24 20:24:08 ache Exp $";  #endif /* LIBC_SCCS and not lint */  #include <stdio.h> @@ -54,16 +54,19 @@ vsnprintf(str, n, fmt, ap)  {  	int ret;  	FILE f; +	int on; -	if (n == 0) -		return (0); -	if (--n > INT_MAX) +	on = n; +	if (n > 0) +		n--; +	if (n > INT_MAX)  		return (EOF);  	f._file = -1;  	f._flags = __SWR | __SSTR;  	f._bf._base = f._p = (unsigned char *)str;  	f._bf._size = f._w = n;  	ret = vfprintf(&f, fmt, ap); -	*f._p = 0; -	return (ret > (int)n ? n : ret); +	if (on > 0) +		*f._p = '\0'; +	return (ret);  } | 
