manoj 99/11/05 13:01:46
Modified: src/main http_log.c Log: Stop using APR_BUFFERED for the error log and httpd.pid file. The error logging code has been tweaked a bit so that we still have one write per log entry. Revision Changes Path 1.15 +17 -15 apache-2.0/src/main/http_log.c Index: http_log.c =================================================================== RCS file: /home/cvs/apache-2.0/src/main/http_log.c,v retrieving revision 1.14 retrieving revision 1.15 diff -u -d -u -r1.14 -r1.15 --- http_log.c 1999/10/23 21:27:38 1.14 +++ http_log.c 1999/11/05 21:01:44 1.15 @@ -260,7 +260,7 @@ else { fname = ap_server_root_relative(p, s->error_fname); /* Change to AP funcs. */ - if (ap_open(&s->error_log, fname, APR_BUFFERED | APR_APPEND | + if (ap_open(&s->error_log, fname, APR_APPEND | APR_READ | APR_WRITE | APR_CREATE, APR_OS_DEFAULT, p) != APR_SUCCESS) { perror("fopen"); fprintf(stderr, "%s: could not open error log file %s.\n", @@ -328,7 +328,7 @@ ap_status_t status, const server_rec *s, const request_rec *r, const char *fmt, va_list args) { - char errstr[MAX_STRING_LEN]; + char errstr[MAX_STRING_LEN + 1]; /* + 1 to have room for '\n' */ size_t len; ap_file_t *logf = NULL; int errfileno = STDERR_FILENO; @@ -377,12 +377,12 @@ } if (logf) { - len = ap_snprintf(errstr, sizeof(errstr), "[%s] ", ap_get_time()); + len = ap_snprintf(errstr, MAX_STRING_LEN, "[%s] ", ap_get_time()); } else { len = 0; } - len += ap_snprintf(errstr + len, sizeof(errstr) - len, + len += ap_snprintf(errstr + len, MAX_STRING_LEN - len, "[%s] ", priorities[level & APLOG_LEVELMASK].t_name); #ifndef TPF @@ -405,7 +405,7 @@ file = tmp; } #endif /*_OSD_POSIX*/ - len += ap_snprintf(errstr + len, sizeof(errstr) - len, + len += ap_snprintf(errstr + len, MAX_STRING_LEN - len, "%s(%d): ", file, line); } #endif /* TPF */ @@ -415,7 +415,7 @@ * quad is the most secure, which is why I'm implementing it * first. -djg */ - len += ap_snprintf(errstr + len, sizeof(errstr) - len, + len += ap_snprintf(errstr + len, MAX_STRING_LEN - len, "[client %s] ", r->connection->remote_ip); } if (!(level & APLOG_NOERRNO) @@ -424,7 +424,7 @@ && !(level & APLOG_WIN32ERROR) #endif ) { - len += ap_snprintf(errstr + len, sizeof(errstr) - len, + len += ap_snprintf(errstr + len, MAX_STRING_LEN - len, "(%d)%s: ", status, strerror(status)); } #ifdef WIN32 @@ -433,7 +433,7 @@ int nErrorCode; nErrorCode = GetLastError(); - len += ap_snprintf(errstr + len, sizeof(errstr) - len, + len += ap_snprintf(errstr + len, MAX_STRING_LEN - len, "(%d)", nErrorCode); nChars = FormatMessage( @@ -442,7 +442,7 @@ nErrorCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), /* // Default language */ (LPTSTR) errstr + len, - sizeof(errstr) - len, + MAX_STRING_LEN - len, NULL ); len += nChars; @@ -452,7 +452,7 @@ * log the numeric value. */ nErrorCode = GetLastError(); - len += ap_snprintf(errstr + len, sizeof(errstr) - len, + len += ap_snprintf(errstr + len, MAX_STRING_LEN - len, "(FormatMessage failed with code %d): ", nErrorCode); } @@ -472,14 +472,16 @@ } #endif - len += ap_vsnprintf(errstr + len, sizeof(errstr) - len, fmt, args); + len += ap_vsnprintf(errstr + len, MAX_STRING_LEN - len, fmt, args); /* NULL if we are logging to syslog */ if (logf) { - /* ZZZ let's just use AP funcs to Write to the error log. If failure, - can we output a message to the console??? */ + /* We know that we have one more character of space available because + * the array is sized that way */ + /* ap_assert(len < MAX_STRING_LEN) */ + errstr[len++] = '\n'; + errstr[len] = '\0'; ap_puts(errstr, logf); - ap_putc('\n', logf); ap_flush(logf); } #ifdef HAVE_SYSLOG @@ -553,7 +555,7 @@ ); } - if(ap_open(&pid_file, fname, APR_WRITE | APR_BUFFERED | APR_CREATE, APR_OS_DEFAULT, p) != APR_SUCCESS) { + if(ap_open(&pid_file, fname, APR_WRITE | APR_CREATE, APR_OS_DEFAULT, p) != APR_SUCCESS) { perror("fopen"); fprintf(stderr, "%s: could not log pid to file %s\n", ap_server_argv0, fname);