From bbd1c2c5f5785bd58943afc81fb059b473ab0027 Mon Sep 17 00:00:00 2001 From: Ed Maste Date: Fri, 27 Jul 2012 17:27:15 -0400 Subject: [PATCH] Avoid implementation-defined strerror behaviour POSIX states that the string returned by strerror() may be overwritten by a subsequent call (i.e., because it returns a pointer to a static buffer). Make a copy of one of the two strerror() strings to avoid this. Background: FreeBSD historically returned such a pointer only in the case of an invalid errno. With the addition of NLS strerror was changed to do so for all calls. Prior to this change I had confusing results from the test suite like "... is 22 (Invalid argument) but should be 0 (Invalid argument)". Signed-off-by: Ed Maste Signed-off-by: Ben Pfaff --- tests/test-vconn.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/test-vconn.c b/tests/test-vconn.c index 3398c4aa..31451a27 100644 --- a/tests/test-vconn.c +++ b/tests/test-vconn.c @@ -56,8 +56,9 @@ static void check_errno(int a, int b, const char *as, const char *file, int line) { if (a != b) { + char *str_b = strdup(strerror(abs(b))); ovs_fatal(0, "%s:%d: %s is %d (%s) but should be %d (%s)", - file, line, as, a, strerror(abs(a)), b, strerror(abs(b))); + file, line, as, a, strerror(abs(a)), b, str_b); } } -- 2.30.2