From: Jeff Trawick Date: Wed, 13 Dec 2006 12:11:56 +0000 (+0000) Subject: merge from trunk: X-Git-Tag: 2.2.4~30 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5b165c1f1357ac51936fdadf01a5a5eb6470fa17;p=thirdparty%2Fapache%2Fhttpd.git merge from trunk: rotatelogs: Improve error message for open failures. PR: 39487 Submitted by: jorton Reviewed by: trawick, jim, wrowe git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.2.x@486612 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/CHANGES b/CHANGES index 149d20c80fe..ac44ce83570 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,9 @@ -*- coding: utf-8 -*- Changes with Apache 2.2.4 + *) rotatelogs: Improve error message for open failures. PR 39487. + [Joe Orton] + *) mod_dbd: share per-request database handles across subrequests and internal redirects [Chris Darroch] diff --git a/STATUS b/STATUS index d85729bdf40..3bc3c790d54 100644 --- a/STATUS +++ b/STATUS @@ -89,15 +89,6 @@ PATCHES ACCEPTED TO BACKPORT FROM TRUNK: wrowe asks: isn't it time to make LogLevel directive parsing reusable in the ap_config api? - * rotatelogs: Produce useful error messages for open() failures. - PR 39487 - Trunk version of patch: - http://svn.apache.org/viewvc?view=rev&revision=478135 - http://svn.apache.org/viewvc?view=rev&revision=485828 - 2.2.x version of patch: - Trunk version works. - +1: trawick, jim, wrowe - * mod_proxy_balancer: Have the find_best_worker() function increment the elected counter, rather than requiring each ind lb method to do it, isolating what each lb method diff --git a/support/rotatelogs.c b/support/rotatelogs.c index baad1b685b3..c6f99049385 100644 --- a/support/rotatelogs.c +++ b/support/rotatelogs.c @@ -54,7 +54,7 @@ #endif #define BUFSIZE 65536 -#define ERRMSGSZ 82 +#define ERRMSGSZ 128 #ifndef MAX_PATH #define MAX_PATH 1024 @@ -188,6 +188,7 @@ int main (int argc, const char * const argv[]) if (nLogFD == NULL) { int tLogStart; + apr_status_t rv; if (tRotation) { tLogStart = (now / tRotation) * tRotation; @@ -208,22 +209,28 @@ int main (int argc, const char * const argv[]) sprintf(buf2, "%s.%010d", szLogRoot, tLogStart); } tLogEnd = tLogStart + tRotation; - apr_file_open(&nLogFD, buf2, APR_READ | APR_WRITE | APR_CREATE | APR_APPEND, - APR_OS_DEFAULT, pool); - if (nLogFD == NULL) { + rv = apr_file_open(&nLogFD, buf2, APR_WRITE | APR_CREATE | APR_APPEND, + APR_OS_DEFAULT, pool); + if (rv != APR_SUCCESS) { + char error[120]; + + apr_strerror(rv, error, sizeof error); + /* Uh-oh. Failed to open the new log file. Try to clear * the previous log file, note the lost log entries, * and keep on truckin'. */ if (nLogFDprev == NULL) { - fprintf(stderr, "1 Previous file handle doesn't exists %s\n", buf2); + fprintf(stderr, "Could not open log file '%s' (%s)\n", buf2, error); exit(2); } else { nLogFD = nLogFDprev; - sprintf(errbuf, - "Resetting log file due to error opening " - "new log file. %10d messages lost.\n", - nMessCount); + /* Try to keep this error message constant length + * in case it occurs several times. */ + apr_snprintf(errbuf, sizeof errbuf, + "Resetting log file due to error opening " + "new log file, %10d messages lost: %-25.25s\n", + nMessCount, error); nWrite = strlen(errbuf); apr_file_trunc(nLogFD, 0); if (apr_file_write(nLogFD, errbuf, &nWrite) != APR_SUCCESS) {