summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2008-11-11 16:17:45 +0000
committerIgor Sysoev <igor@sysoev.ru>2008-11-11 16:17:45 +0000
commitf2884e194ab1bfe7bec979d04b21dc5f5e4a3628 (patch)
tree8f3b8c6e72e2a63ebfa6c49fec1b3d39580995f2
parentead8091746f136d7563824c7468d570481fb4e3c (diff)
downloadnginx-f2884e194ab1bfe7bec979d04b21dc5f5e4a3628.tar.gz
compatibility with glibc 2.3, warn_unused_result attribute for write()
-rw-r--r--src/core/nginx.c31
-rw-r--r--src/core/ngx_conf_file.c18
-rw-r--r--src/core/ngx_cycle.c21
-rw-r--r--src/core/ngx_log.c2
-rw-r--r--src/os/unix/ngx_files.h12
5 files changed, 66 insertions, 18 deletions
diff --git a/src/core/nginx.c b/src/core/nginx.c
index c1c6c0c25..06721269b 100644
--- a/src/core/nginx.c
+++ b/src/core/nginx.c
@@ -191,6 +191,8 @@ static char **ngx_os_environ;
int ngx_cdecl
main(int argc, char *const *argv)
{
+ char *p;
+ ssize_t n;
ngx_int_t i;
ngx_log_t *log;
ngx_cycle_t *cycle, init_cycle;
@@ -240,23 +242,30 @@ main(int argc, char *const *argv)
}
if (ngx_show_version) {
- ngx_write_fd(ngx_stderr_fileno, "nginx version: " NGINX_VER CRLF,
- sizeof("nginx version: " NGINX_VER CRLF) - 1);
+
+ p = "nginx version: " NGINX_VER CRLF;
+ n = sizeof("nginx version: " NGINX_VER CRLF) - 1;
+
+ if (ngx_write_fd(ngx_stderr_fileno, p, n) != n) {
+ return 1;
+ }
if (ngx_show_configure) {
#ifdef NGX_COMPILER
- ngx_write_fd(ngx_stderr_fileno, "built by " NGX_COMPILER CRLF,
- sizeof("built by " NGX_COMPILER CRLF) - 1);
-#endif
+ p = "built by " NGX_COMPILER CRLF;
+ n = sizeof("built by " NGX_COMPILER CRLF) - 1;
-#ifndef __WATCOMC__
+ if (ngx_write_fd(ngx_stderr_fileno, p, n) != n) {
+ return 1;
+ }
+#endif
- /* OpenWatcomC could not build the long NGX_CONFIGURE string */
+ p = "configure arguments: " NGX_CONFIGURE CRLF;
+ n = sizeof("configure arguments :" NGX_CONFIGURE CRLF) - 1;
- ngx_write_fd(ngx_stderr_fileno,
- "configure arguments: " NGX_CONFIGURE CRLF,
- sizeof("configure arguments :" NGX_CONFIGURE CRLF) - 1);
-#endif
+ if (ngx_write_fd(ngx_stderr_fileno, p, n) != n) {
+ return 1;
+ }
}
if (!ngx_test_config) {
diff --git a/src/core/ngx_conf_file.c b/src/core/ngx_conf_file.c
index d9683161b..31d00de39 100644
--- a/src/core/ngx_conf_file.c
+++ b/src/core/ngx_conf_file.c
@@ -912,6 +912,7 @@ ngx_conf_open_file(ngx_cycle_t *cycle, ngx_str_t *name)
static void
ngx_conf_flush_files(ngx_cycle_t *cycle)
{
+ ssize_t n, len;
ngx_uint_t i;
ngx_list_part_t *part;
ngx_open_file_t *file;
@@ -932,11 +933,24 @@ ngx_conf_flush_files(ngx_cycle_t *cycle)
i = 0;
}
- if (file[i].buffer == NULL || file[i].pos - file[i].buffer == 0) {
+ len = file[i].pos - file[i].buffer;
+
+ if (file[i].buffer == NULL || len == 0) {
continue;
}
- ngx_write_fd(file[i].fd, file[i].buffer, file[i].pos - file[i].buffer);
+ n = ngx_write_fd(file[i].fd, file[i].buffer, len);
+
+ if (n == NGX_FILE_ERROR) {
+ ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
+ ngx_write_fd_n " to \"%s\" failed",
+ file[i].name.data);
+
+ } else if (n != len) {
+ ngx_log_error(NGX_LOG_ALERT, cycle->log, 0,
+ ngx_write_fd_n " to \"%s\" was incomplete: %z of %uz",
+ file[i].name.data, n, len);
+ }
}
}
diff --git a/src/core/ngx_cycle.c b/src/core/ngx_cycle.c
index 39d1e4c81..aa0d9ce7e 100644
--- a/src/core/ngx_cycle.c
+++ b/src/core/ngx_cycle.c
@@ -996,6 +996,7 @@ ngx_test_lockfile(u_char *file, ngx_log_t *log)
void
ngx_reopen_files(ngx_cycle_t *cycle, ngx_uid_t user)
{
+ ssize_t n, len;
ngx_fd_t fd;
ngx_uint_t i;
ngx_list_part_t *part;
@@ -1019,9 +1020,23 @@ ngx_reopen_files(ngx_cycle_t *cycle, ngx_uid_t user)
continue;
}
- if (file[i].buffer && file[i].pos - file[i].buffer != 0) {
- ngx_write_fd(file[i].fd, file[i].buffer,
- file[i].pos - file[i].buffer);
+ len = file[i].pos - file[i].buffer;
+
+ if (file[i].buffer && len != 0) {
+
+ n = ngx_write_fd(file[i].fd, file[i].buffer, len);
+
+ if (n == NGX_FILE_ERROR) {
+ ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
+ ngx_write_fd_n " to \"%s\" failed",
+ file[i].name.data);
+
+ } else if (n != len) {
+ ngx_log_error(NGX_LOG_ALERT, cycle->log, 0,
+ ngx_write_fd_n " to \"%s\" was incomplete: %z of %uz",
+ file[i].name.data, n, len);
+ }
+
file[i].pos = file[i].buffer;
}
diff --git a/src/core/ngx_log.c b/src/core/ngx_log.c
index 1059acf43..e3abcd780 100644
--- a/src/core/ngx_log.c
+++ b/src/core/ngx_log.c
@@ -158,7 +158,7 @@ ngx_log_error_core(ngx_uint_t level, ngx_log_t *log, ngx_err_t err,
ngx_linefeed(p);
- ngx_write_fd(log->file->fd, errstr, p - errstr);
+ (void) ngx_write_fd(log->file->fd, errstr, p - errstr);
}
diff --git a/src/os/unix/ngx_files.h b/src/os/unix/ngx_files.h
index d8182b4b6..fe14887f1 100644
--- a/src/os/unix/ngx_files.h
+++ b/src/os/unix/ngx_files.h
@@ -99,7 +99,17 @@ ssize_t ngx_write_chain_to_file(ngx_file_t *file, ngx_chain_t *ce,
#define ngx_read_fd read
#define ngx_read_fd_n "read()"
-#define ngx_write_fd write
+/*
+ * we use inlined function instead of simple #define
+ * because glibc 2.3 sets warn_unused_result attribute for write()
+ * and in this case gcc 4.3 ignores (void) cast
+ */
+static ngx_inline ssize_t
+ngx_write_fd(ngx_fd_t fd, void *buf, size_t n)
+{
+ return write(fd, buf, n);
+}
+
#define ngx_write_fd_n "write()"
#define ngx_linefeed(p) *p++ = LF;