summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Hawicz <erh+git@nimenees.com>2020-08-23 16:38:21 -0400
committerGitHub <noreply@github.com>2020-08-23 16:38:21 -0400
commitf94193180401bf3843c0ac9d4949643970b094d4 (patch)
tree16487115c06859b2d614e3492037c0d2d0702f99
parent1bc7a6b223429684107e5141a33bfabc44ab1a32 (diff)
parent4298431150df9a83390a14006217c230e684994b (diff)
downloadjson-c-f94193180401bf3843c0ac9d4949643970b094d4.tar.gz
Merge pull request #663 from stoeckmann/strerror
Properly format errnos in _json_c_strerror
-rw-r--r--strerror_override.c3
-rw-r--r--tests/CMakeLists.txt3
-rw-r--r--tests/test_strerror.c11
-rw-r--r--tests/test_strerror.expected2
l---------tests/test_strerror.test1
5 files changed, 18 insertions, 2 deletions
diff --git a/strerror_override.c b/strerror_override.c
index 7a262f7..a3dd377 100644
--- a/strerror_override.c
+++ b/strerror_override.c
@@ -94,7 +94,7 @@ char *_json_c_strerror(int errno_in)
}
// It's not one of the known errno values, return the numeric value.
- for (ii = 0; errno_in > 10; errno_in /= 10, ii++)
+ for (ii = 0; errno_in >= 10; errno_in /= 10, ii++)
{
digbuf[ii] = "0123456789"[(errno_in % 10)];
}
@@ -105,5 +105,6 @@ char *_json_c_strerror(int errno_in)
{
errno_buf[start_idx] = digbuf[ii];
}
+ errno_buf[start_idx] = '\0';
return errno_buf;
}
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index 125f615..0c5c26e 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -32,12 +32,13 @@ foreach(TESTNAME
test_printbuf
test_set_serializer
test_set_value
+ test_strerror
test_util_file
test_visit
test_object_iterator)
add_executable(${TESTNAME} ${TESTNAME}.c)
-if(${TESTNAME} STREQUAL test_util_file)
+if(${TESTNAME} STREQUAL test_strerror OR ${TESTNAME} STREQUAL test_util_file)
# For output consistency, we need _json_c_strerror() in some tests:
target_sources(${TESTNAME} PRIVATE ../strerror_override.c)
endif()
diff --git a/tests/test_strerror.c b/tests/test_strerror.c
new file mode 100644
index 0000000..1780564
--- /dev/null
+++ b/tests/test_strerror.c
@@ -0,0 +1,11 @@
+#include "strerror_override.h"
+#include "strerror_override_private.h"
+
+#include <stdio.h>
+
+int main(int argc, char **argv)
+{
+ puts(strerror(10000));
+ puts(strerror(999));
+ return 0;
+}
diff --git a/tests/test_strerror.expected b/tests/test_strerror.expected
new file mode 100644
index 0000000..b6b3bb6
--- /dev/null
+++ b/tests/test_strerror.expected
@@ -0,0 +1,2 @@
+ERRNO=10000
+ERRNO=999
diff --git a/tests/test_strerror.test b/tests/test_strerror.test
new file mode 120000
index 0000000..58a13f4
--- /dev/null
+++ b/tests/test_strerror.test
@@ -0,0 +1 @@
+test_basic.test \ No newline at end of file