From 07bb4ed971e859ca26937558f9dcfe2a2178f5aa Mon Sep 17 00:00:00 2001 From: Igor Sysoev Date: Mon, 14 Nov 2011 14:59:00 +0000 Subject: [PATCH] Introduction of simple ngx_write_stderr() instead of ngx_log_stderr() for output of ./configure options, etc., since ngx_log_stderr() output length is limited by 2048 characters defined as NGX_MAX_ERROR_STR. --- src/core/nginx.c | 38 ++++++++++++++++++++------------------ src/core/ngx_log.h | 16 ++++++++++++++++ src/os/unix/ngx_files.h | 1 + src/os/win32/ngx_files.h | 1 + 4 files changed, 38 insertions(+), 18 deletions(-) diff --git a/src/core/nginx.c b/src/core/nginx.c index da32c1a50..9e00a2d86 100644 --- a/src/core/nginx.c +++ b/src/core/nginx.c @@ -214,47 +214,49 @@ main(int argc, char *const *argv) } if (ngx_show_version) { - ngx_log_stderr(0, "nginx version: " NGINX_VER); + ngx_write_stderr("nginx version: " NGINX_VER NGX_LINEFEED); if (ngx_show_help) { - ngx_log_stderr(0, + ngx_write_stderr( "Usage: nginx [-?hvVtq] [-s signal] [-c filename] " - "[-p prefix] [-g directives]" CRLF CRLF - "Options:" CRLF - " -?,-h : this help" CRLF - " -v : show version and exit" CRLF + "[-p prefix] [-g directives]" NGX_LINEFEED + NGX_LINEFEED + "Options:" NGX_LINEFEED + " -?,-h : this help" NGX_LINEFEED + " -v : show version and exit" NGX_LINEFEED " -V : show version and configure options then exit" - CRLF - " -t : test configuration and exit" CRLF + NGX_LINEFEED + " -t : test configuration and exit" NGX_LINEFEED " -q : suppress non-error messages " - "during configuration testing" CRLF + "during configuration testing" NGX_LINEFEED " -s signal : send signal to a master process: " - "stop, quit, reopen, reload" CRLF + "stop, quit, reopen, reload" NGX_LINEFEED #ifdef NGX_PREFIX " -p prefix : set prefix path (default: " - NGX_PREFIX ")" CRLF + NGX_PREFIX ")" NGX_LINEFEED #else - " -p prefix : set prefix path (default: NONE)" CRLF + " -p prefix : set prefix path (default: NONE)" NGX_LINEFEED #endif " -c filename : set configuration file (default: " - NGX_CONF_PATH ")" CRLF + NGX_CONF_PATH ")" NGX_LINEFEED " -g directives : set global directives out of configuration " - "file" CRLF + "file" NGX_LINEFEED NGX_LINEFEED ); } if (ngx_show_configure) { + ngx_write_stderr( #ifdef NGX_COMPILER - ngx_log_stderr(0, "built by " NGX_COMPILER); + "built by " NGX_COMPILER NGX_LINEFEED #endif #if (NGX_SSL) #ifdef SSL_CTRL_SET_TLSEXT_HOSTNAME - ngx_log_stderr(0, "TLS SNI support enabled"); + "TLS SNI support enabled" NGX_LINEFEED #else - ngx_log_stderr(0, "TLS SNI support disabled"); + "TLS SNI support disabled" NGX_LINEFEED #endif #endif - ngx_log_stderr(0, "configure arguments:" NGX_CONFIGURE); + "configure arguments:" NGX_CONFIGURE NGX_LINEFEED); } if (!ngx_test_config) { diff --git a/src/core/ngx_log.h b/src/core/ngx_log.h index 1054836f1..a55ef449c 100644 --- a/src/core/ngx_log.h +++ b/src/core/ngx_log.h @@ -203,6 +203,22 @@ void ngx_cdecl ngx_log_stderr(ngx_err_t err, const char *fmt, ...); u_char *ngx_log_errno(u_char *buf, u_char *last, ngx_err_t err); +/* + * ngx_write_stderr() cannot be implemented as macro, since + * MSVC does not allow to use #ifdef inside macro parameters. + * + * ngx_write_fd() is used instead of ngx_write_console(), since + * CharToOemBuff() inside ngx_write_console() cannot be used with + * read only buffer as destination and CharToOemBuff() is not needed + * for ngx_write_stderr() anyway. + */ +static ngx_inline void +ngx_write_stderr(char *text) +{ + (void) ngx_write_fd(ngx_stderr, text, strlen(text)); +} + + extern ngx_module_t ngx_errlog_module; extern ngx_uint_t ngx_use_stderr; diff --git a/src/os/unix/ngx_files.h b/src/os/unix/ngx_files.h index af41ea38e..7c7f1fcd3 100644 --- a/src/os/unix/ngx_files.h +++ b/src/os/unix/ngx_files.h @@ -128,6 +128,7 @@ ngx_write_fd(ngx_fd_t fd, void *buf, size_t n) #define ngx_linefeed(p) *p++ = LF; #define NGX_LINEFEED_SIZE 1 +#define NGX_LINEFEED "\x0a" #define ngx_rename_file(o, n) rename((const char *) o, (const char *) n) diff --git a/src/os/win32/ngx_files.h b/src/os/win32/ngx_files.h index 7358ed65b..a2c9c344e 100644 --- a/src/os/win32/ngx_files.h +++ b/src/os/win32/ngx_files.h @@ -115,6 +115,7 @@ ssize_t ngx_write_console(ngx_fd_t fd, void *buf, size_t size); #define ngx_linefeed(p) *p++ = CR; *p++ = LF; #define NGX_LINEFEED_SIZE 2 +#define NGX_LINEFEED CRLF #define ngx_delete_file(name) DeleteFile((const char *) name)