aboutsummaryrefslogtreecommitdiff
path: root/src/os/unix/ngx_errno.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/os/unix/ngx_errno.c')
-rw-r--r--src/os/unix/ngx_errno.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/os/unix/ngx_errno.c b/src/os/unix/ngx_errno.c
index c50da8251..410cfde5c 100644
--- a/src/os/unix/ngx_errno.c
+++ b/src/os/unix/ngx_errno.c
@@ -25,4 +25,34 @@ ngx_int_t ngx_strerror_r(int err, char *errstr, size_t size)
return len;
}
+#elif (HAVE_GNU_STRERROR_R)
+
+/* Linux strerror_r() */
+
+ngx_int_t ngx_strerror_r(int err, char *errstr, size_t size)
+{
+ char *str;
+ size_t len;
+
+ if (size == 0) {
+ return 0;
+ }
+
+ errstr[0] = '\0';
+
+ str = strerror_r(err, errstr, size);
+
+ if (str != errstr) {
+ return ngx_cpystrn(errstr, str, size) - errstr;
+ }
+
+ for (len = 0; len < size; len++) {
+ if (errstr[len] == '\0') {
+ break;
+ }
+ }
+
+ return len;
+}
+
#endif