Commit 750882e8 authored by Joe Orton's avatar Joe Orton
Browse files

* support/rotatelogs.c (main): Produce useful error message for open()

failures.

PR: 39487


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@478135 13f79535-47bb-0310-9956-ffa450edef68
parent 0d11448a
Loading
Loading
Loading
Loading
+14 −7
Changes for support/rotatelogs.c: 14 added lines, 7 removed lines.
Original line number Diff line number Diff line
@@ -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,
            rv = apr_file_open(&nLogFD, buf2, APR_WRITE | APR_CREATE | APR_APPEND,
                               APR_OS_DEFAULT, pool);
            if (nLogFD == NULL) {
            if (rv != APR_SUCCESS) {
                char error[26];

                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,
                    /* 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.\n",
                            nMessCount);
                                 "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) {