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);