diff src/os/unix/ngx_errno.c @ 10:46833bd150cb NGINX_0_1_5

nginx 0.1.5 *) Bugfix: on Solaris and Linux there may be too many "recvmsg() returned not enough data" alerts. *) Bugfix: there were the "writev() failed (22: Invalid argument)" errors on Solaris in proxy mode without sendfile. On other platforms that do not support sendfile at all the process got caught in an endless loop. *) Bugfix: segmentation fault on Solaris in proxy mode and using sendfile. *) Bugfix: segmentation fault on Solaris. *) Bugfix: on-line upgrade did not work on Linux. *) Bugfix: the ngx_http_autoindex_module module did not escape the spaces, the quotes, and the percent signs in the directory listing. *) Change: the decrease of the copy operations. *) Feature: the userid_p3p directive.
author Igor Sysoev <http://sysoev.ru>
date Thu, 11 Nov 2004 00:00:00 +0300
parents 80ba094c6b3e
children 6f8b0dc0f8dd
line wrap: on
line diff
--- a/src/os/unix/ngx_errno.c
+++ b/src/os/unix/ngx_errno.c
@@ -10,32 +10,29 @@
 
 #if (NGX_STRERROR_R)
 
-ngx_int_t ngx_strerror_r(int err, char *errstr, size_t size)
+u_char *ngx_strerror_r(int err, u_char *errstr, size_t size)
 {
-    size_t  len;
-
     if (size == 0) {
         return 0;
     }
 
     errstr[0] = '\0';
 
-    strerror_r(err, errstr, size);
+    strerror_r(err, (char *) errstr, size);
 
-    for (len = 0; len < size; len++) {
-        if (errstr[len] == '\0') {
-            break;
-        }
+    while (*errstr && size) {
+        errstr++;
+        size--;
     }
 
-    return len;
+    return errstr;
 }
 
 #elif (NGX_GNU_STRERROR_R)
 
 /* Linux strerror_r() */
 
-ngx_int_t ngx_strerror_r(int err, char *errstr, size_t size)
+u_char *ngx_strerror_r(int err, u_char *errstr, size_t size)
 {
     char    *str;
     size_t   len;
@@ -46,20 +43,18 @@ ngx_int_t ngx_strerror_r(int err, char *
 
     errstr[0] = '\0';
 
-    str = strerror_r(err, errstr, size);
+    str = strerror_r(err, (char *) errstr, size);
 
-    if (str != errstr) {
-        return ngx_cpystrn((u_char *) errstr, (u_char *) str, size)
-                                                           - (u_char *) errstr;
+    if (str != (char *) errstr) {
+        return ngx_cpystrn(errstr, (u_char *) str, size);
     }
 
-    for (len = 0; len < size; len++) {
-        if (errstr[len] == '\0') {
-            break;
-        }
+    while (*errstr && size) {
+        errstr++;
+        size--;
     }
 
-    return len;
+    return errstr;
 }
 
 #endif