aboutsummaryrefslogtreecommitdiff
path: root/portable/asprintf.c
diff options
context:
space:
mode:
authorRuss Allbery <eagle@eyrie.org>2014-07-11 20:18:41 -0700
committerRuss Allbery <rra@stanford.edu>2014-07-11 22:38:49 -0700
commitda0aba21779529d98436e42323fc12f702390969 (patch)
tree950e33ac99f2ff45303e939bf74f8bfbbb635215 /portable/asprintf.c
parent2971570d0e90bd166d87eff14e9e42c095c9f614 (diff)
Update to rra-c-util 5.5 and C TAP Harness 3.1
Update to rra-c-util 5.5: * Use Lancaster Consensus environment variables to control tests. * Use calloc or reallocarray for protection against integer overflows. * Suppress warnings from Kerberos headers in non-system paths. * Assume calloc initializes pointers to NULL. * Assume free(NULL) is properly ignored. * Improve error handling in xasprintf and xvasprintf. * Check the return status of snprintf and vsnprintf properly. * Preserve errno if snprintf fails in vasprintf replacement. Update to C TAP Harness 3.1: * Reopen standard input to /dev/null when running a test list. * Don't leak extraneous file descriptors to tests. * Suppress lazy plans and test summaries if the test failed with bail. * runtests now treats the command line as a list of tests by default. * The full test executable path can now be passed to runtests -o. * Improved harness output for tests with lazy plans. * Improved harness output to a terminal for some abort cases. * Flush harness output after each test even when not on a terminal. Change-Id: I05161eb3d3be49a98f7762e876cb114da0c84e9a Reviewed-on: https://gerrit.stanford.edu/1529 Reviewed-by: Russ Allbery <rra@stanford.edu> Tested-by: Russ Allbery <rra@stanford.edu>
Diffstat (limited to 'portable/asprintf.c')
-rw-r--r--portable/asprintf.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/portable/asprintf.c b/portable/asprintf.c
index 7bdfd0d..eb2b713 100644
--- a/portable/asprintf.c
+++ b/portable/asprintf.c
@@ -21,6 +21,8 @@
#include <config.h>
#include <portable/system.h>
+#include <errno.h>
+
/*
* If we're running the test suite, rename the functions to avoid conflicts
* with the system versions.
@@ -33,6 +35,7 @@ int test_asprintf(char **, const char *, ...)
int test_vasprintf(char **, const char *, va_list);
#endif
+
int
asprintf(char **strp, const char *fmt, ...)
{
@@ -45,11 +48,12 @@ asprintf(char **strp, const char *fmt, ...)
return status;
}
+
int
vasprintf(char **strp, const char *fmt, va_list args)
{
va_list args_copy;
- int status, needed;
+ int status, needed, oerrno;
va_copy(args_copy, args);
needed = vsnprintf(NULL, 0, fmt, args_copy);
@@ -65,8 +69,10 @@ vasprintf(char **strp, const char *fmt, va_list args)
if (status >= 0)
return status;
else {
+ oerrno = errno;
free(*strp);
*strp = NULL;
+ errno = oerrno;
return status;
}
}