* libc/stdio/fvwrite.c (__sfvwrite_r): Fix reentrancy.
* libc/stdio/vasprintf.c (vasprintf, _vasprintf_r): Pass failed
allocation to caller.
* libc/stdio/asprintf.c (_asprintf_r, asprintf): Likewise.
* libc/stdio/asiprintf.c (_asiprintf_r, asiprintf): Likewise.
* libc/stdio/vasiprintf.c (vasiprintf, _vasiprintf_r): Likewise.
+2007-03-12 Eric Blake <ebb9@byu.net>
+
+ * libc/stdio/fvwrite.c (__sfvwrite_r): Fix reentrancy.
+ * libc/stdio/vasprintf.c (vasprintf, _vasprintf_r): Pass failed
+ allocation to caller.
+ * libc/stdio/asprintf.c (_asprintf_r, asprintf): Likewise.
+ * libc/stdio/asiprintf.c (_asiprintf_r, asiprintf): Likewise.
+ * libc/stdio/vasiprintf.c (vasiprintf, _vasiprintf_r): Likewise.
+
2007-02-23 Jeff Johnston <jjohnstn@redhat.com>
* libm/math/w_pow.c: Fix typo in documentation comment.
/*
- * Copyright (c) 1990 The Regents of the University of California.
+ * Copyright (c) 1990, 2007 The Regents of the University of California.
* All rights reserved.
*
* Redistribution and use in source and binary forms are permitted
#endif
ret = vfiprintf (&f, fmt, ap);
va_end (ap);
- *f._p = 0;
- *strp = f._bf._base;
+ if (ret >= 0)
+ {
+ *f._p = 0;
+ *strp = f._bf._base;
+ }
return (ret);
}
int ret;
va_list ap;
FILE f;
-
+
/* mark a zero-length reallocatable buffer */
f._flags = __SWR | __SSTR | __SMBF;
f._bf._base = f._p = NULL;
#endif
ret = vfiprintf (&f, fmt, ap);
va_end (ap);
- *f._p = 0;
- *strp = f._bf._base;
+ if (ret >= 0)
+ {
+ *f._p = 0;
+ *strp = f._bf._base;
+ }
return (ret);
}
/*
- * Copyright (c) 1990 The Regents of the University of California.
+ * Copyright (c) 1990, 2007 The Regents of the University of California.
* All rights reserved.
*
* Redistribution and use in source and binary forms are permitted
#endif
ret = vfprintf (&f, fmt, ap);
va_end (ap);
- *f._p = 0;
- *strp = f._bf._base;
+ if (ret >= 0)
+ {
+ *f._p = 0;
+ *strp = f._bf._base;
+ }
return (ret);
}
int ret;
va_list ap;
FILE f;
-
+
/* mark a zero-length reallocatable buffer */
f._flags = __SWR | __SSTR | __SMBF;
f._bf._base = f._p = NULL;
#endif
ret = vfprintf (&f, fmt, ap);
va_end (ap);
- *f._p = 0;
- *strp = f._bf._base;
+ if (ret >= 0)
+ {
+ *f._p = 0;
+ *strp = f._bf._base;
+ }
return (ret);
}
/*
- * Copyright (c) 1990, 2006 The Regents of the University of California.
+ * Copyright (c) 1990, 2006, 2007 The Regents of the University of California.
* All rights reserved.
*
* Redistribution and use in source and binary forms are permitted
{
if (len >= w && fp->_flags & __SMBF)
{ /* must be asprintf family */
- unsigned char *ptr;
+ unsigned char *str;
int curpos = (fp->_p - fp->_bf._base);
/* Choose a geometric growth factor to avoid
quadratic realloc behavior, but use a rate less
int newsize = fp->_bf._size * 3 / 2;
if (newsize < curpos + len + 1)
newsize = curpos + len + 1;
- ptr = (unsigned char *)_realloc_r (_REENT,
- fp->_bf._base,
- newsize);
- if (!ptr)
+ str = (unsigned char *)_realloc_r (ptr, fp->_bf._base,
+ newsize);
+ if (!str)
{
/* Free buffer which is no longer used. */
- _free_r (_REENT, fp->_bf._base);
+ _free_r (ptr, fp->_bf._base);
goto err;
}
- fp->_bf._base = ptr;
- fp->_p = ptr + curpos;
+ fp->_bf._base = str;
+ fp->_p = str + curpos;
fp->_bf._size = newsize;
w = len;
fp->_w = newsize - curpos;
/*
- * Copyright (c) 1990 The Regents of the University of California.
+ * Copyright (c) 1990, 2007 The Regents of the University of California.
* All rights reserved.
*
* Redistribution and use in source and binary forms are permitted
f._bf._size = f._w = 0;
f._file = -1; /* No file. */
ret = _vfiprintf_r (_REENT, &f, fmt, ap);
- *f._p = 0;
- *strp = f._bf._base;
+ if (ret >= 0)
+ {
+ *f._p = 0;
+ *strp = f._bf._base;
+ }
return ret;
}
f._bf._size = f._w = 0;
f._file = -1; /* No file. */
ret = _vfiprintf_r (ptr, &f, fmt, ap);
- *f._p = 0;
- *strp = f._bf._base;
+ if (ret >= 0)
+ {
+ *f._p = 0;
+ *strp = f._bf._base;
+ }
return ret;
}
-
/*
- * Copyright (c) 1990 The Regents of the University of California.
+ * Copyright (c) 1990, 2007 The Regents of the University of California.
* All rights reserved.
*
* Redistribution and use in source and binary forms are permitted
f._bf._size = f._w = 0;
f._file = -1; /* No file. */
ret = _vfprintf_r (_REENT, &f, fmt, ap);
- *f._p = 0;
- *strp = f._bf._base;
+ if (ret >= 0)
+ {
+ *f._p = 0;
+ *strp = f._bf._base;
+ }
return ret;
}
f._bf._size = f._w = 0;
f._file = -1; /* No file. */
ret = _vfprintf_r (ptr, &f, fmt, ap);
- *f._p = 0;
- *strp = f._bf._base;
+ if (ret >= 0)
+ {
+ *f._p = 0;
+ *strp = f._bf._base;
+ }
return ret;
}
-