[ovs-dev] [PATCH] Avoid implementation-defined strerror behaviour

Ed Maste emaste at adaranet.com
Fri Jul 27 21:27:15 UTC 2012


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 <emaste at adaranet.com>
---
 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 3398c4a..31451a2 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);
     }
 }
 
-- 
1.7.10.3



More information about the dev mailing list