2008-04-29 Eric Blake <ebb9@byu.net>
Fix 2008-04-14 regression in asprintf(ptr,"").
* libc/stdio/asnprintf.c (asnprintf, _asnprintf_r): Avoid stdio
baggage.
* libc/stdio/asniprintf.c (asniprintf, _asniprintf_r): Likewise.
* libc/stdio/asiprintf.c (asiprintf, _asiprintf_r): Likewise.
* libc/stdio/vasniprintf.c (_vasniprintf_r): Likewise.
* libc/stdio/vsnprintf.c (_vsnprintf_r): Likewise.
* libc/stdio/vfprintf.c (__sprint_r) [STRING_ONLY]: Always malloc
an initial buffer for asprintf.
Index: libc/stdio/asiprintf.c
===================================================================
RCS file: /cvs/src/src/newlib/libc/stdio/asiprintf.c,v
retrieving revision 1.4
diff -u -p -r1.4 asiprintf.c
--- libc/stdio/asiprintf.c 4 May 2007 02:55:16 -0000 1.4
+++ libc/stdio/asiprintf.c 29 Apr 2008 22:59:43 -0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1990, 2007 The Regents of the University of California.
+ * Copyright (c) 1990 The Regents of the University of California.
* All rights reserved.
*
* Redistribution and use in source and binary forms are permitted
@@ -40,7 +40,7 @@ _DEFUN(_asiprintf_r, (ptr, strp, fmt),
f._bf._size = f._w = 0;
f._file = -1; /* No file. */
va_start (ap, fmt);
- ret = _vfiprintf_r (ptr, &f, fmt, ap);
+ ret = _svfiprintf_r (ptr, &f, fmt, ap);
va_end (ap);
if (ret >= 0)
{
@@ -67,7 +67,7 @@ _DEFUN(asiprintf, (strp, fmt),
f._bf._size = f._w = 0;
f._file = -1; /* No file. */
va_start (ap, fmt);
- ret = _vfiprintf_r (_REENT, &f, fmt, ap);
+ ret = _svfiprintf_r (_REENT, &f, fmt, ap);
va_end (ap);
if (ret >= 0)
{
Index: libc/stdio/asniprintf.c
===================================================================
RCS file: /cvs/src/src/newlib/libc/stdio/asniprintf.c,v
retrieving revision 1.2
diff -u -p -r1.2 asniprintf.c
--- libc/stdio/asniprintf.c 9 May 2007 19:27:30 -0000 1.2
+++ libc/stdio/asniprintf.c 29 Apr 2008 22:59:43 -0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2007 Eric Blake
+/* Copyright (C) 2007, 2008 Eric Blake
* Permission to use, copy, modify, and distribute this software
* is freely granted, provided that this notice is preserved.
*/
@@ -48,7 +48,7 @@ _DEFUN(_asniprintf_r, (ptr, buf, lenp, f
f._bf._size = f._w = len;
f._file = -1; /* No file. */
va_start (ap, fmt);
- ret = _vfiprintf_r (ptr, &f, fmt, ap);
+ ret = _svfiprintf_r (ptr, &f, fmt, ap);
va_end (ap);
if (ret < 0)
return NULL;
@@ -95,7 +95,7 @@ _DEFUN(asniprintf, (buf, lenp, fmt),
f._bf._size = f._w = len;
f._file = -1; /* No file. */
va_start (ap, fmt);
- ret = _vfiprintf_r (ptr, &f, fmt, ap);
+ ret = _svfiprintf_r (ptr, &f, fmt, ap);
va_end (ap);
if (ret < 0)
return NULL;
Index: libc/stdio/asnprintf.c
===================================================================
RCS file: /cvs/src/src/newlib/libc/stdio/asnprintf.c,v
retrieving revision 1.2
diff -u -p -r1.2 asnprintf.c
--- libc/stdio/asnprintf.c 9 May 2007 19:27:30 -0000 1.2
+++ libc/stdio/asnprintf.c 29 Apr 2008 22:59:43 -0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2007 Eric Blake
+/* Copyright (C) 2007, 2008 Eric Blake
* Permission to use, copy, modify, and distribute this software
* is freely granted, provided that this notice is preserved.
*/
@@ -48,7 +48,7 @@ _DEFUN(_asnprintf_r, (ptr, buf, lenp, fm
f._bf._size = f._w = len;
f._file = -1; /* No file. */
va_start (ap, fmt);
- ret = _vfprintf_r (ptr, &f, fmt, ap);
+ ret = _svfprintf_r (ptr, &f, fmt, ap);
va_end (ap);
if (ret < 0)
return NULL;
@@ -95,7 +95,7 @@ _DEFUN(asnprintf, (buf, lenp, fmt),
f._bf._size = f._w = len;
f._file = -1; /* No file. */
va_start (ap, fmt);
- ret = _vfprintf_r (ptr, &f, fmt, ap);
+ ret = _svfprintf_r (ptr, &f, fmt, ap);
va_end (ap);
if (ret < 0)
return NULL;
Index: libc/stdio/vasniprintf.c
===================================================================
RCS file: /cvs/src/src/newlib/libc/stdio/vasniprintf.c,v
retrieving revision 1.2
diff -u -p -r1.2 vasniprintf.c
--- libc/stdio/vasniprintf.c 9 May 2007 19:27:30 -0000 1.2
+++ libc/stdio/vasniprintf.c 29 Apr 2008 22:59:43 -0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2007 Eric Blake
+/* Copyright (C) 2007, 2008 Eric Blake
* Permission to use, copy, modify, and distribute this software
* is freely granted, provided that this notice is preserved.
*/
@@ -47,7 +47,7 @@ _DEFUN(_vasniprintf_r, (ptr, buf, lenp,
}
f._bf._size = f._w = len;
f._file = -1; /* No file. */
- ret = _vfiprintf_r (ptr, &f, fmt, ap);
+ ret = _svfiprintf_r (ptr, &f, fmt, ap);
if (ret < 0)
return NULL;
*lenp = ret;
Index: libc/stdio/vfprintf.c
===================================================================
RCS file: /cvs/src/src/newlib/libc/stdio/vfprintf.c,v
retrieving revision 1.69
diff -u -p -r1.69 vfprintf.c
--- libc/stdio/vfprintf.c 14 Apr 2008 21:14:55 -0000 1.69
+++ libc/stdio/vfprintf.c 29 Apr 2008 22:59:43 -0000
@@ -178,6 +178,18 @@ _DEFUN(__sprint_r, (ptr, fp, uio),
register struct __siov *iov;
register _CONST char *p = NULL;
+ /* Check if we are called by asprintf family for initial buffer. */
+ if (fp->_flags & __SMBF && !fp->_bf._base)
+ {
+ fp->_bf._base = fp->_p = _malloc_r (ptr, 64);
+ if (!fp->_p)
+ {
+ ptr->_errno = ENOMEM;
+ goto err;
+ }
+ fp->_bf._size = 64;
+ }
+
iov = uio->uio_iov;
len = 0;
Index: libc/stdio/vsnprintf.c
===================================================================
RCS file: /cvs/src/src/newlib/libc/stdio/vsnprintf.c,v
retrieving revision 1.8
diff -u -p -r1.8 vsnprintf.c
--- libc/stdio/vsnprintf.c 4 Apr 2007 18:32:49 -0000 1.8
+++ libc/stdio/vsnprintf.c 29 Apr 2008 22:59:43 -0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1990, 2007 The Regents of the University of California.
+ * Copyright (c) 1990 The Regents of the University of California.
* All rights reserved.
*
* Redistribution and use in source and binary forms are permitted
@@ -61,7 +61,7 @@ _DEFUN(_vsnprintf_r, (ptr, str, size, fm
f._bf._base = f._p = (unsigned char *) str;
f._bf._size = f._w = (size > 0 ? size - 1 : 0);
f._file = -1; /* No file. */
- ret = _vfprintf_r (ptr, &f, fmt, ap);
+ ret = _svfprintf_r (ptr, &f, fmt, ap);
if (ret < EOF)
ptr->_errno = EOVERFLOW;
if (size > 0)