You should have received a copy of the GNU General Public License
along with Wget; if not, write to the Free Software
-Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
+Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+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. */
#include <config.h>
+/* This allows the architecture-specific .h files to specify the use
+ of stdargs regardless of __STDC__. */
+#ifndef WGET_USE_STDARG
+/* Use stdarg only if the compiler supports ANSI C and stdarg.h is
+ present. We check for both because there are configurations where
+ stdarg.h exists, but doesn't work. */
+# ifdef __STDC__
+# ifdef HAVE_STDARG_H
+# define WGET_USE_STDARG
+# endif
+# endif
+#endif /* not WGET_USE_STDARG */
+
#include <stdio.h>
#ifdef HAVE_STRING_H
# include <string.h>
# include <strings.h>
#endif
#include <stdlib.h>
-#ifdef HAVE_STDARG_H
-# define WGET_USE_STDARG
+#ifdef WGET_USE_STDARG
# include <stdarg.h>
#else
# include <varargs.h>
#include "wget.h"
#include "utils.h"
+#include "log.h"
#ifndef errno
extern int errno;
{
/* Allocate memory and concatenate the old and the new
contents. */
- ln->malloced_line = xmalloc (old_len + len + 1);
+ ln->malloced_line = (char *)xmalloc (old_len + len + 1);
memcpy (ln->malloced_line, ln->static_line,
old_len);
memcpy (ln->malloced_line + old_len, start, len);
check_redirect_output ();
if (!(fp = get_log_fp ()))
return;
+ CHECK_VERBOSE (o);
fputs (s, fp);
if (save_context_p)
/* vsnprintf() will not step over the limit given by available_size.
If it fails, it will return either -1 (POSIX?) or the number of
characters that *would have* been written, if there had been
- enough room. In the former case, we double the available_size
- and malloc() to get a larger buffer, and try again. In the
- latter case, we use the returned information to build a buffer of
- the correct size. */
+ enough room (C99). In the former case, we double the
+ available_size and malloc to get a larger buffer, and try again.
+ In the latter case, we use the returned information to build a
+ buffer of the correct size. */
if (numwritten == -1)
{
return old;
}
+/* Handle difference in va_start between pre-ANSI and ANSI C. Note
+ that we always use `...' in function definitions and let ansi2knr
+ convert it for us. */
+
#ifdef WGET_USE_STDARG
-# define VA_START_1(arg1_type, arg1, args) va_start(args, arg1)
-# define VA_START_2(arg1_type, arg1, arg2_type, arg2, args) va_start(args, arg2)
-#else /* not WGET_USE_STDARG */
-# define VA_START_1(arg1_type, arg1, args) do { \
- va_start (args); \
- arg1 = va_arg (args, arg1_type); \
-} while (0)
-# define VA_START_2(arg1_type, arg1, arg2_type, arg2, args) do { \
- va_start (args); \
- arg1 = va_arg (args, arg1_type); \
- arg2 = va_arg (args, arg2_type); \
-} while (0)
-#endif /* not WGET_USE_STDARG */
+# define VA_START(args, arg1) va_start (args, arg1)
+#else
+# define VA_START(args, ignored) va_start (args)
+#endif
-/* Portability with pre-ANSI compilers makes these two functions look
- like @#%#@$@#$. */
+/* Print a message to the screen or to the log. The first argument
+ defines the verbosity of the message, and the rest are as in
+ printf(3). */
-#ifdef WGET_USE_STDARG
void
logprintf (enum log_options o, const char *fmt, ...)
-#else /* not WGET_USE_STDARG */
-void
-logprintf (va_alist)
- va_dcl
-#endif /* not WGET_USE_STDARG */
{
va_list args;
struct logvprintf_state lpstate;
int done;
-#ifndef WGET_USE_STDARG
- enum log_options o;
- const char *fmt;
-
- /* Perform a "dry run" of VA_START_2 to get the value of O. */
- VA_START_2 (enum log_options, o, char *, fmt, args);
- va_end (args);
-#endif
-
check_redirect_output ();
if (inhibit_logging)
return;
CHECK_VERBOSE (o);
- memset (&lpstate, '\0', sizeof (lpstate));
+ xzero (lpstate);
do
{
- VA_START_2 (enum log_options, o, char *, fmt, args);
+ VA_START (args, fmt);
done = logvprintf (&lpstate, fmt, args);
va_end (args);
}
while (!done);
}
-#ifdef DEBUG
+#ifdef ENABLE_DEBUG
/* The same as logprintf(), but does anything only if opt.debug is
non-zero. */
-#ifdef WGET_USE_STDARG
void
debug_logprintf (const char *fmt, ...)
-#else /* not WGET_USE_STDARG */
-void
-debug_logprintf (va_alist)
- va_dcl
-#endif /* not WGET_USE_STDARG */
{
if (opt.debug)
{
va_list args;
-#ifndef WGET_USE_STDARG
- const char *fmt;
-#endif
struct logvprintf_state lpstate;
int done;
if (inhibit_logging)
return;
- memset (&lpstate, '\0', sizeof (lpstate));
+ xzero (lpstate);
do
{
- VA_START_1 (char *, fmt, args);
+ VA_START (args, fmt);
done = logvprintf (&lpstate, fmt, args);
va_end (args);
}
while (!done);
}
}
-#endif /* DEBUG */
+#endif /* ENABLE_DEBUG */
\f
/* Open FILE and set up a logging stream. If FILE cannot be opened,
exit with status of 1. */
logfp = stderr;
/* If the output is a TTY, enable storing, which will make Wget
- remember all the printed messages, to be able to dump them to
- a log file in case SIGHUP or SIGUSR1 is received (or
- Ctrl+Break is pressed under Windows). */
+ remember the last several printed messages, to be able to
+ dump them to a log file in case SIGHUP or SIGUSR1 is received
+ (or Ctrl+Break is pressed under Windows). */
if (1
#ifdef HAVE_ISATTY
&& isatty (fileno (logfp))
static void
redirect_output (void)
{
- char *logfile = unique_name (DEFAULT_LOGFILE);
+ char *logfile = unique_name (DEFAULT_LOGFILE, 0);
fprintf (stderr, _("\n%s received, redirecting output to `%s'.\n"),
redirect_request_signal_name, logfile);
logfp = fopen (logfile, "w");