X-Git-Url: http://sjero.net/git/?a=blobdiff_plain;f=src%2Fwget.h;h=6d35190f85dea294d4ad2d5525d1fdd37cb0d0a1;hb=4d7c5e087b2bc82c9f503dff003916d1047903ce;hp=aa133ccd540fc12dad60cba5536302922daca829;hpb=b90b20763b201bc4ef7ab6604e56d0d374551485;p=wget diff --git a/src/wget.h b/src/wget.h index aa133ccd..6d35190f 100644 --- a/src/wget.h +++ b/src/wget.h @@ -1,11 +1,11 @@ /* Miscellaneous declarations. - Copyright (C) 1995, 1996, 1997, 1998, 2003 Free Software Foundation, Inc. + Copyright (C) 1996-2006 Free Software Foundation, Inc. This file is part of GNU Wget. GNU Wget is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or +the Free Software Foundation; either version 3 of the License, or (at your option) any later version. GNU Wget is distributed in the hope that it will be useful, @@ -14,8 +14,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. 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. +along with Wget. If not, see . In addition, as a special exception, the Free Software Foundation gives permission to link the code of its release of Wget with the @@ -40,12 +39,9 @@ so, delete this exception statement from your version. */ # define NDEBUG #endif -#ifndef PARAMS -# if PROTOTYPES -# define PARAMS(args) args -# else -# define PARAMS(args) () -# endif +/* Is OpenSSL or GNUTLS available? */ +#if defined HAVE_LIBSSL || defined HAVE_LIBGNUTLS +# define HAVE_SSL #endif /* `gettext (FOO)' is long to write, so we use `_(FOO)'. If NLS is @@ -54,7 +50,9 @@ so, delete this exception statement from your version. */ # define _(string) gettext (string) # ifdef HAVE_LIBINTL_H # include -# endif /* HAVE_LIBINTL_H */ +# else /* not HAVE_LIBINTL_H */ + const char *gettext (); +# endif /* not HAVE_LIBINTL_H */ #else /* not HAVE_NLS */ # define _(string) (string) #endif /* not HAVE_NLS */ @@ -91,37 +89,111 @@ so, delete this exception statement from your version. */ /* locale independent replacement for ctype.h */ #include "safe-ctype.h" -#define DO_NOTHING do {} while (0) - -/* Print X if debugging is enabled; a no-op otherwise. */ -#ifdef ENABLE_DEBUG -# define DEBUGP(x) do { if (opt.debug) { debug_logprintf x; } } while (0) -#else /* not ENABLE_DEBUG */ -# define DEBUGP(x) DO_NOTHING -#endif /* not ENABLE_DEBUG */ +/* Conditionalize the use of GCC's __attribute__((format)) and + __builtin_expect features using macros. */ -#ifdef __GNUC__ +#if defined(__GNUC__) && __GNUC__ >= 3 # define GCC_FORMAT_ATTR(a, b) __attribute__ ((format (printf, a, b))) -#else /* not __GNUC__ */ +# define LIKELY(exp) __builtin_expect (!!(exp), 1) +# define UNLIKELY(exp) __builtin_expect ((exp), 0) +#else # define GCC_FORMAT_ATTR(a, b) -#endif /* not __GNUC__ */ +# define LIKELY(exp) (exp) +# define UNLIKELY(exp) (exp) +#endif + +/* Execute the following statement if debugging is both enabled at + compile-time and requested at run-time; a no-op otherwise. */ + +#ifdef ENABLE_DEBUG +# define IF_DEBUG if (UNLIKELY (opt.debug)) +#else +# define IF_DEBUG if (0) +#endif -/* Define an integer type that works for LFS. off_t would be perfect - for this, but off_t is always 32-bit under Windows. */ -#ifndef WINDOWS -typedef off_t wgint; +/* Print ARGS if debugging is enabled and requested, otherwise do + nothing. This must be called with an extra level of parentheses + because it's not possible to pass a variable number of arguments to + a macro (in portable C89). ARGS are like arguments to printf. */ + +#define DEBUGP(args) do { IF_DEBUG { debug_logprintf args; } } while (0) + +/* Pick an integer type large enough for file sizes, content lengths, + and such. Because today's files can be very large, it should be a + signed integer at least 64 bits wide. This can't be typedeffed to + off_t because: a) off_t is always 32-bit on Windows, and b) we + don't necessarily want to tie having a 64-bit type for internal + calculations to having LFS support. */ + +#ifdef WINDOWS + /* nothing to do, see mswindows.h */ +#elif SIZEOF_LONG >= 8 + /* long is large enough, so use it. */ + typedef long wgint; +# define SIZEOF_WGINT SIZEOF_LONG +#elif SIZEOF_LONG_LONG >= 8 + /* long long is large enough and available, use that */ + typedef long long wgint; +# define SIZEOF_WGINT SIZEOF_LONG_LONG +#elif HAVE_INT64_T + typedef int64_t wgint; +# define SIZEOF_WGINT 8 +#elif SIZEOF_OFF_T >= 8 + /* In case off_t is typedeffed to a large non-standard type that our + tests don't find. */ + typedef off_t wgint; # define SIZEOF_WGINT SIZEOF_OFF_T +#else + /* Fall back to using long, which is always available and in most + cases large enough. */ +typedef long off_t; +# define SIZEOF_WGINT SIZEOF_LONG #endif -/* Define a strtol/strtoll clone that works with wgint. */ -#ifndef str_to_wgint /* mswindows.h defines its own alias */ -# if SIZEOF_WGINT == SIZEOF_LONG -# define str_to_wgint strtol -# define WGINT_MAX LONG_MAX -# else -# define str_to_wgint strtoll -# define WGINT_MAX LLONG_MAX +/* Pick a strtol-compatible function that will work with wgint. The + choices are strtol, strtoll, or our own implementation of strtoll + in cmpt.c, activated with NEED_STRTOLL. */ + +#ifdef WINDOWS + /* nothing to do, see mswindows.h */ +#elif SIZEOF_WGINT == SIZEOF_LONG +# define str_to_wgint strtol +#elif SIZEOF_WGINT == SIZEOF_LONG_LONG +# define str_to_wgint strtoll +# ifndef HAVE_STRTOLL +# define NEED_STRTOLL +# define strtoll_type long long # endif +#else + /* wgint has a strange size; synthesize strtoll and use it. */ +# define str_to_wgint strtoll +# define NEED_STRTOLL +# define strtoll_type wgint +#endif + +#define WGINT_MAX TYPE_MAXIMUM (wgint) + +/* Declare our strtoll replacement. */ +#ifdef NEED_STRTOLL +strtoll_type strtoll (const char *, char **, int); +#endif + +/* Now define a large numeric type useful for storing sizes of *sums* + of downloads, such as the value of the --quota option. This should + be a type able to hold 2G+ values even on systems without large + file support. (It is useful to limit Wget's download quota to say + 10G even if a single file cannot be that large.) + + To make sure we get the largest size possible, we use `double' on + systems without a 64-bit integral type. (Since it is used in very + few places in Wget, this is acceptable.) */ + +#if SIZEOF_WGINT >= 8 +/* just use wgint */ +typedef wgint SUM_SIZE_INT; +#else +/* On systems without LFS, use double, which buys us integers up to 2^53. */ +typedef double SUM_SIZE_INT; #endif #include "options.h" @@ -211,9 +283,15 @@ typedef off_t wgint; (sizevar) = DR_newsize; \ } \ if (DR_newsize) \ - basevar = (type *)xrealloc (basevar, DR_newsize * sizeof (type)); \ + basevar = xrealloc (basevar, DR_newsize * sizeof (type)); \ } while (0) +/* Used to print pointers (usually for debugging). Print pointers + using printf ("0x%0*lx", PTR_FORMAT (p)). (%p is too unpredictable; + some implementations prepend 0x, while some don't, and most don't + 0-pad the address.) */ +#define PTR_FORMAT(p) (int) (2 * sizeof (void *)), (unsigned long) (p) + extern const char *exec_name; /* Document type ("dt") flags */ @@ -233,19 +311,23 @@ enum simplified. */ typedef enum { + /* 0 */ NOCONERROR, HOSTERR, CONSOCKERR, CONERROR, CONSSLERR, - CONIMPOSSIBLE, NEWLOCATION, NOTENOUGHMEM, CONPORTERR, - CONCLOSED, FTPOK, FTPLOGINC, FTPLOGREFUSED, FTPPORTERR, FTPSYSERR, - FTPNSFOD, FTPRETROK, FTPUNKNOWNTYPE, FTPRERR, - FTPREXC, FTPSRVERR, FTPRETRINT, FTPRESTFAIL, URLERROR, - FOPENERR, FOPEN_EXCL_ERR, FWRITEERR, HOK, HLEXC, HEOF, + CONIMPOSSIBLE, NEWLOCATION, NOTENOUGHMEM, CONPORTERR, CONCLOSED, + /* 10 */ + FTPOK, FTPLOGINC, FTPLOGREFUSED, FTPPORTERR, FTPSYSERR, + FTPNSFOD, FTPRETROK, FTPUNKNOWNTYPE, FTPRERR, FTPREXC, + /* 20 */ + FTPSRVERR, FTPRETRINT, FTPRESTFAIL, URLERROR, FOPENERR, + FOPEN_EXCL_ERR, FWRITEERR, HOK, HLEXC, HEOF, + /* 30 */ HERR, RETROK, RECLEVELEXC, FTPACCDENIED, WRONGCODE, - FTPINVPASV, FTPNOPASV, - CONTNOTSUPPORTED, RETRUNNEEDED, RETRFINISHED, READERR, TRYLIMEXC, - URLBADPATTERN, FILEBADFILE, RANGEERR, RETRBADPATTERN, - RETNOTSUP, ROBOTSOK, NOROBOTS, PROXERR, AUTHFAILED, - QUOTEXC, WRITEFAILED, - SSLERRCERTFILE,SSLERRCERTKEY,SSLERRCTXCREATE + FTPINVPASV, FTPNOPASV, CONTNOTSUPPORTED, RETRUNNEEDED, RETRFINISHED, + /* 40 */ + READERR, TRYLIMEXC, URLBADPATTERN, FILEBADFILE, RANGEERR, + RETRBADPATTERN, RETNOTSUP, ROBOTSOK, NOROBOTS, PROXERR, + /* 50 */ + AUTHFAILED, QUOTEXC, WRITEFAILED, SSLINITFAILED } uerr_t; #endif /* WGET_H */