/* Messages logging.
- Copyright (C) 1998-2006 Free Software Foundation, Inc.
+ Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
+ 2007, 2008 Free Software Foundation, Inc.
This file is part of GNU Wget.
You should have received a copy of the GNU General Public License
along with Wget. If not, see <http://www.gnu.org/licenses/>.
-In addition, as a special exception, the Free Software Foundation
-gives permission to link the code of its release of Wget with the
-OpenSSL project's "OpenSSL" library (or with modified versions of it
-that use the same license as the "OpenSSL" library), and distribute
-the linked executables. You must obey the GNU General Public License
-in all respects for all of the code used other than "OpenSSL". If you
-modify this file, you may extend this exception to your version of the
-file, but you are not obligated to do so. If you do not wish to do
-so, delete this exception statement from your version. */
+Additional permission under GNU GPL version 3 section 7
-#include <config.h>
+If you modify this program, or any covered work, by linking or
+combining it with the OpenSSL project's OpenSSL library (or a
+modified version of that library), containing parts covered by the
+terms of the OpenSSL or SSLeay licenses, the Free Software Foundation
+grants you additional permission to convey the resulting work.
+Corresponding Source for a non-source form of such a combination
+shall include the source code for the parts of OpenSSL used as well
+as that of the covered work. */
+
+#include "wget.h"
#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <errno.h>
-#include "wget.h"
#include "utils.h"
#include "log.h"
static struct log_ln {
char static_line[STATIC_LENGTH + 1]; /* statically allocated
line. */
- char *malloced_line; /* malloc'ed line, for lines of output
+ char *malloced_line; /* malloc'ed line, for lines of output
larger than 80 characters. */
- char *content; /* this points either to malloced_line
+ char *content; /* this points either to malloced_line
or to the appropriate static_line.
If this is NULL, it means the line
has not yet been used. */
static void check_redirect_output (void);
\f
-#define ROT_ADVANCE(num) do { \
- if (++num >= SAVED_LOG_LINES) \
- num = 0; \
+#define ROT_ADVANCE(num) do { \
+ if (++num >= SAVED_LOG_LINES) \
+ num = 0; \
} while (0)
/* Free the log line index with NUM. This calls free on
struct log_ln *ln;
if (log_line_current == -1)
- log_line_current = 0;
+ log_line_current = 0;
else
- free_log_line (log_line_current);
+ free_log_line (log_line_current);
ln = log_lines + log_line_current;
if (len > STATIC_LENGTH)
- {
- ln->malloced_line = strdupdelim (start, end);
- ln->content = ln->malloced_line;
- }
+ {
+ ln->malloced_line = strdupdelim (start, end);
+ ln->content = ln->malloced_line;
+ }
else
- {
- memcpy (ln->static_line, start, len);
- ln->static_line[len] = '\0';
- ln->content = ln->static_line;
- }
+ {
+ memcpy (ln->static_line, start, len);
+ ln->static_line[len] = '\0';
+ ln->content = ln->static_line;
+ }
}
else
{
convert it to malloc(). */
struct log_ln *ln = log_lines + log_line_current;
if (ln->malloced_line)
- {
- /* Resize malloc'ed line and append. */
- int old_len = strlen (ln->malloced_line);
- ln->malloced_line = xrealloc (ln->malloced_line, old_len + len + 1);
- memcpy (ln->malloced_line + old_len, start, len);
- ln->malloced_line[old_len + len] = '\0';
- /* might have changed due to realloc */
- ln->content = ln->malloced_line;
- }
+ {
+ /* Resize malloc'ed line and append. */
+ int old_len = strlen (ln->malloced_line);
+ ln->malloced_line = xrealloc (ln->malloced_line, old_len + len + 1);
+ memcpy (ln->malloced_line + old_len, start, len);
+ ln->malloced_line[old_len + len] = '\0';
+ /* might have changed due to realloc */
+ ln->content = ln->malloced_line;
+ }
else
- {
- int old_len = strlen (ln->static_line);
- if (old_len + len > STATIC_LENGTH)
- {
- /* Allocate memory and concatenate the old and the new
+ {
+ int old_len = strlen (ln->static_line);
+ if (old_len + len > STATIC_LENGTH)
+ {
+ /* Allocate memory and concatenate the old and the new
contents. */
- ln->malloced_line = xmalloc (old_len + len + 1);
- memcpy (ln->malloced_line, ln->static_line,
- old_len);
- memcpy (ln->malloced_line + old_len, start, len);
- ln->malloced_line[old_len + len] = '\0';
- ln->content = ln->malloced_line;
- }
- else
- {
- /* Just append to the old, statically allocated
+ ln->malloced_line = xmalloc (old_len + len + 1);
+ memcpy (ln->malloced_line, ln->static_line,
+ old_len);
+ memcpy (ln->malloced_line + old_len, start, len);
+ ln->malloced_line[old_len + len] = '\0';
+ ln->content = ln->malloced_line;
+ }
+ else
+ {
+ /* Just append to the old, statically allocated
contents. */
- memcpy (ln->static_line + old_len, start, len);
- ln->static_line[old_len + len] = '\0';
- ln->content = ln->static_line;
- }
- }
+ memcpy (ln->static_line + old_len, start, len);
+ ln->static_line[old_len + len] = '\0';
+ ln->content = ln->static_line;
+ }
+ }
}
trailing_line = !(end[-1] == '\n');
if (!trailing_line)
{
const char *end = strchr (s, '\n');
if (!end)
- end = s + strlen (s);
+ end = s + strlen (s);
else
- ++end;
+ ++end;
saved_append_1 (s, end);
s = end;
}
* LOG_NONVERBOSE - print the message if opt.verbose is zero;
* LOG_VERBOSE - print the message if opt.verbose is non-zero. */
-#define CHECK_VERBOSE(x) \
- switch (x) \
- { \
- case LOG_ALWAYS: \
- break; \
- case LOG_NOTQUIET: \
- if (opt.quiet) \
- return; \
- break; \
- case LOG_NONVERBOSE: \
- if (opt.verbose || opt.quiet) \
- return; \
- break; \
- case LOG_VERBOSE: \
- if (!opt.verbose) \
- return; \
+#define CHECK_VERBOSE(x) \
+ switch (x) \
+ { \
+ case LOG_ALWAYS: \
+ break; \
+ case LOG_NOTQUIET: \
+ if (opt.quiet) \
+ return; \
+ break; \
+ case LOG_NONVERBOSE: \
+ if (opt.verbose || opt.quiet) \
+ return; \
+ break; \
+ case LOG_VERBOSE: \
+ if (!opt.verbose) \
+ return; \
}
/* Returns the file descriptor for logging. This is LOGFP, except if
static bool
log_vprintf_internal (struct logvprintf_state *state, const char *fmt,
- va_list args)
+ va_list args)
{
char smallmsg[128];
char *write_ptr = smallmsg;
if (numwritten == -1)
{
/* Writing failed, and we don't know the needed size. Try
- again with doubled size. */
+ again with doubled size. */
int newsize = available_size << 1;
state->bigmsg = xrealloc (state->bigmsg, newsize);
state->allocated = newsize;
else if (numwritten >= available_size)
{
/* Writing failed, but we know exactly how much space we
- need. */
+ need. */
int newsize = numwritten + 1;
state->bigmsg = xrealloc (state->bigmsg, newsize);
state->allocated = newsize;
else
{
/* Reenable flushing. If anything was printed in no-flush mode,
- flush the log now. */
+ flush the log now. */
if (needs_flushing)
- logflush ();
+ logflush ();
flush_log_p = true;
}
}
check_redirect_output ();
if (inhibit_logging)
- return;
+ return;
xzero (lpstate);
do
- {
- va_start (args, fmt);
- done = log_vprintf_internal (&lpstate, fmt, args);
- va_end (args);
- }
+ {
+ va_start (args, fmt);
+ done = log_vprintf_internal (&lpstate, fmt, args);
+ va_end (args);
+ }
while (!done);
}
}
{
logfp = fopen (file, appendp ? "a" : "w");
if (!logfp)
- {
- fprintf (stderr, "%s: %s: %s\n", exec_name, file, strerror (errno));
- exit (1);
- }
+ {
+ fprintf (stderr, "%s: %s: %s\n", exec_name, file, strerror (errno));
+ exit (1);
+ }
}
else
{
if (1
#ifdef HAVE_ISATTY
- && isatty (fileno (logfp))
+ && isatty (fileno (logfp))
#endif
- )
- {
- /* If the output is a TTY, enable save context, i.e. store
- the most recent several messages ("context") and dump
- them to a log file in case SIGHUP or SIGUSR1 is received
- (or Ctrl+Break is pressed under Windows). */
- save_context_p = true;
- }
+ )
+ {
+ /* If the output is a TTY, enable save context, i.e. store
+ the most recent several messages ("context") and dump
+ them to a log file in case SIGHUP or SIGUSR1 is received
+ (or Ctrl+Break is pressed under Windows). */
+ save_context_p = true;
+ }
}
}
{
struct log_ln *ln = log_lines + num;
if (ln->content)
- fputs (ln->content, fp);
+ fputs (ln->content, fp);
ROT_ADVANCE (num);
}
while (num != log_line_current);
/* String escape functions. */
/* Return the number of non-printable characters in SOURCE.
- Non-printable characters are determined as per safe-ctype.c. */
+ Non-printable characters are determined as per c-ctype.c. */
static int
count_nonprint (const char *source)
const char *p;
int cnt;
for (p = source, cnt = 0; *p; p++)
- if (!ISPRINT (*p))
+ if (!c_isprint (*p))
++cnt;
return cnt;
}
{
case 8:
while ((c = *from++) != '\0')
- if (ISPRINT (c))
- *to++ = c;
- else
- {
- *to++ = escape;
- *to++ = '0' + (c >> 6);
- *to++ = '0' + ((c >> 3) & 7);
- *to++ = '0' + (c & 7);
- }
+ if (c_isprint (c))
+ *to++ = c;
+ else
+ {
+ *to++ = escape;
+ *to++ = '0' + (c >> 6);
+ *to++ = '0' + ((c >> 3) & 7);
+ *to++ = '0' + (c & 7);
+ }
break;
case 16:
while ((c = *from++) != '\0')
- if (ISPRINT (c))
- *to++ = c;
- else
- {
- *to++ = escape;
- *to++ = XNUM_TO_DIGIT (c >> 4);
- *to++ = XNUM_TO_DIGIT (c & 0xf);
- }
+ if (c_isprint (c))
+ *to++ = c;
+ else
+ {
+ *to++ = escape;
+ *to++ = XNUM_TO_DIGIT (c >> 4);
+ *to++ = XNUM_TO_DIGIT (c & 0xf);
+ }
break;
default:
abort ();
char *buffer;
int size;
};
-static struct ringel ring[RING_SIZE]; /* ring data */
+static struct ringel ring[RING_SIZE]; /* ring data */
static const char *
escnonprint_internal (const char *str, char escape, int base)
{
- static int ringpos; /* current ring position */
+ static int ringpos; /* current ring position */
int nprcnt;
assert (base == 8 || base == 16);
(re)allocate it. */
if (r->buffer == NULL || r->size < needed_size)
{
- r->buffer = xrealloc (r->buffer, needed_size);
- r->size = needed_size;
+ r->buffer = xrealloc (r->buffer, needed_size);
+ r->size = needed_size;
}
copy_and_escape (str, r->buffer, escape, base);
logfp = unique_create (DEFAULT_LOGFILE, false, &logfile);
if (logfp)
{
- fprintf (stderr, _("\n%s received, redirecting output to `%s'.\n"),
- redirect_request_signal_name, logfile);
+ fprintf (stderr, _("\n%s received, redirecting output to %s.\n"),
+ redirect_request_signal_name, quote (logfile));
xfree (logfile);
/* Dump the context output to the newly opened log. */
log_dump_context ();
can do but disable printing completely. */
fprintf (stderr, _("\n%s received.\n"), redirect_request_signal_name);
fprintf (stderr, _("%s: %s; disabling logging.\n"),
- logfile, strerror (errno));
+ logfile, strerror (errno));
inhibit_logging = true;
}
save_context_p = false;