diff options
| author | Tim J. Robbins <tjr@FreeBSD.org> | 2002-09-26 13:11:24 +0000 | 
|---|---|---|
| committer | Tim J. Robbins <tjr@FreeBSD.org> | 2002-09-26 13:11:24 +0000 | 
| commit | 27a29543f3a991b58e859b7c01c24c07bcbe8d29 (patch) | |
| tree | 4de1e26fefecf761f67eb239ab65759349d165e6 /lib/libc/stdio/vasprintf.c | |
| parent | 344141d1fdbe14ec498a93b4242260f5882a0c03 (diff) | |
Notes
Diffstat (limited to 'lib/libc/stdio/vasprintf.c')
| -rw-r--r-- | lib/libc/stdio/vasprintf.c | 32 | 
1 files changed, 13 insertions, 19 deletions
| diff --git a/lib/libc/stdio/vasprintf.c b/lib/libc/stdio/vasprintf.c index 2d2f9e09b96b..01ac06889c3e 100644 --- a/lib/libc/stdio/vasprintf.c +++ b/lib/libc/stdio/vasprintf.c @@ -1,4 +1,4 @@ -/*	$OpenBSD: vasprintf.c,v 1.6 1998/10/16 16:11:56 millert Exp $	*/ +/*	$OpenBSD: vasprintf.c,v 1.4 1998/06/21 22:13:47 millert Exp $	*/  /*   * Copyright (c) 1997 Todd C. Miller <Todd.Miller@courtesan.com> @@ -44,32 +44,26 @@ vasprintf(str, fmt, ap)  	int ret;  	FILE f;  	struct __sFILEX ext; -	unsigned char *_base;  	f._file = -1;  	f._flags = __SWR | __SSTR | __SALC;  	f._bf._base = f._p = (unsigned char *)malloc(128); -	if (f._bf._base == NULL) -		goto err; +	if (f._bf._base == NULL) { +		*str = NULL; +		errno = ENOMEM; +		return (-1); +	}  	f._bf._size = f._w = 127;		/* Leave room for the NUL */  	f._extra = &ext;  	INITEXTRA(&f);  	ret = __vfprintf(&f, fmt, ap); -	if (ret == -1) -		goto err; -	*f._p = '\0'; -	_base = realloc(f._bf._base, ret + 1); -	if (_base == NULL) -		goto err; -	*str = (char *)_base; -	return (ret); - -err: -	if (f._bf._base != NULL) { +	if (ret < 0) {  		free(f._bf._base); -		f._bf._base = NULL; +		*str = NULL; +		errno = ENOMEM; +		return (-1);  	} -	*str = NULL; -	errno = ENOMEM; -	return (-1); +	*f._p = '\0'; +	*str = (char *)f._bf._base; +	return (ret);  } | 
