X-Git-Url: http://sjero.net/git/?p=wget;a=blobdiff_plain;f=src%2Fwget.h;h=21b758bd62f31231e181b6c30c534aed24c7fc28;hp=42b138db1f3eb1a7deec32c95a04a057754300f9;hb=30ac043b0a4a9a983dd1b50ce1c89ed953019292;hpb=1a6058b1ec98baf1dce0574bec5079ae0db0f0c0 diff --git a/src/wget.h b/src/wget.h index 42b138db..21b758bd 100644 --- a/src/wget.h +++ b/src/wget.h @@ -1,21 +1,31 @@ /* Miscellaneous declarations. Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc. -This file is part of Wget. +This file is part of GNU Wget. -This program is free software; you can redistribute it and/or modify +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 (at your option) any later version. -This program is distributed in the hope that it will be useful, +GNU Wget is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of 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 this program; if not, write to the Free Software -Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +along with Wget; if not, write to the Free Software +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. */ /* This file contains some declarations that don't fit anywhere else. It also contains some useful includes, like the obnoxious TIME_H @@ -28,6 +38,11 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ # define NDEBUG /* To kill off assertions */ #endif /* not DEBUG */ +/* Define this if you want primitive but extensive malloc debugging. + It will make Wget extremely slow, so only do it in development + builds. */ +#undef DEBUG_MALLOC + #ifndef PARAMS # if PROTOTYPES # define PARAMS(args) args @@ -60,7 +75,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ 3) Finally, the debug messages are meant to be a clue for me to debug problems with Wget. If I get them in a language I don't - understand, debugging will become a new challenge of its own! :-) */ + understand, debugging will become a new challenge of its own! */ /* Include these, so random files need not include them. */ @@ -98,6 +113,9 @@ void logprintf (); void debug_logprintf (); #endif /* not HAVE_STDARG_H */ void logputs PARAMS ((enum log_options, const char *)); +void logflush PARAMS ((void)); +void log_set_flush PARAMS ((int)); +int log_set_save_context PARAMS ((int)); /* Defined in `utils.c', but used literally everywhere. */ #ifndef DEBUG_MALLOC @@ -139,15 +157,48 @@ char *xstrdup_debug PARAMS ((const char *, const char *, int)); /* The smaller value of the two. */ #define MINVAL(x, y) ((x) < (y) ? (x) : (y)) -/* ASCII char -> HEX digit */ -#define ASC2HEXD(x) (((x) >= '0' && (x) <= '9') ? \ - ((x) - '0') : (TOUPPER(x) - 'A' + 10)) +/* Convert the ASCII character X to a hex-digit. X should be between + '0' and '9', or between 'A' and 'F', or between 'a' and 'f'. The + result is a number between 0 and 15. If X is not a hexadecimal + digit character, the result is undefined. */ +#define XCHAR_TO_XDIGIT(x) \ + (((x) >= '0' && (x) <= '9') ? \ + ((x) - '0') : (TOUPPER(x) - 'A' + 10)) + +/* The reverse of the above: convert a HEX digit in the [0, 15] range + to an ASCII character representing it. The A-F characters are + always in upper case. */ +#define XDIGIT_TO_XCHAR(x) (((x) < 10) ? ((x) + '0') : ((x) - 10 + 'A')) -/* HEX digit -> ASCII char */ -#define HEXD2ASC(x) (((x) < 10) ? ((x) + '0') : ((x) - 10 + 'A')) +/* Like XDIGIT_TO_XCHAR, but produce a lower-case char. */ +#define XDIGIT_TO_xchar(x) (((x) < 10) ? ((x) + '0') : ((x) - 10 + 'a')) #define ARRAY_SIZE(array) (sizeof (array) / sizeof (*(array))) +/* Copy the data delimited with BEG and END to alloca-allocated + storage, and zero-terminate it. BEG and END are evaluated only + once, in that order. */ +#define BOUNDED_TO_ALLOCA(beg, end, place) do { \ + const char *DTA_beg = (beg); \ + int DTA_len = (end) - DTA_beg; \ + place = alloca (DTA_len + 1); \ + memcpy (place, DTA_beg, DTA_len); \ + place[DTA_len] = '\0'; \ +} while (0) + +/* Return non-zero if string bounded between BEG and END is equal to + STRING_LITERAL. The comparison is case-sensitive. */ +#define BOUNDED_EQUAL(beg, end, string_literal) \ + ((end) - (beg) == sizeof (string_literal) - 1 \ + && !memcmp ((beg), (string_literal), \ + sizeof (string_literal) - 1)) + +/* The same as above, except the comparison is case-insensitive. */ +#define BOUNDED_EQUAL_NO_CASE(beg, end, string_literal) \ + ((end) - (beg) == sizeof (string_literal) - 1 \ + && !strncasecmp ((beg), (string_literal), \ + sizeof (string_literal) - 1)) + /* Note that this much more elegant definition cannot be used: #define STRDUP_ALLOCA(str) (strcpy ((char *)alloca (strlen (str) + 1), str)) @@ -198,39 +249,32 @@ char *xstrdup_debug PARAMS ((const char *, const char *, int)); { \ /* Avoid side-effectualness. */ \ long do_realloc_needed_size = (needed_size); \ - long do_realloc_newsize = 0; \ - while ((sizevar) < (do_realloc_needed_size)) { \ - do_realloc_newsize = 2*(sizevar); \ + long do_realloc_newsize = (sizevar); \ + while (do_realloc_newsize < do_realloc_needed_size) { \ + do_realloc_newsize <<= 1; \ if (do_realloc_newsize < 16) \ do_realloc_newsize = 16; \ - (sizevar) = do_realloc_newsize; \ } \ - if (do_realloc_newsize) \ + if (do_realloc_newsize != (sizevar)) \ { \ if (!allocap) \ XREALLOC_ARRAY (basevar, type, do_realloc_newsize); \ else \ { \ - void *drfa_new_basevar = xmalloc (do_realloc_newsize); \ - memcpy (drfa_new_basevar, basevar, sizevar); \ + void *drfa_new_basevar = \ + xmalloc (do_realloc_newsize * sizeof (type)); \ + memcpy (drfa_new_basevar, basevar, (sizevar) * sizeof (type)); \ (basevar) = drfa_new_basevar; \ allocap = 0; \ } \ + (sizevar) = do_realloc_newsize; \ } \ } while (0) /* Free FOO if it is non-NULL. */ #define FREE_MAYBE(foo) do { if (foo) xfree (foo); } while (0) -/* #### Hack: OPTIONS_DEFINED_HERE is defined in main.c. */ -/* [Is this weird hack really necessary on any compilers? No ANSI C compiler - should complain about "extern const char *exec_name;" followed by - "const char *exec_name;". Are we doing this for K&R compilers, or...?? - -- Dan Harkless ] */ -#ifndef OPTIONS_DEFINED_HERE extern const char *exec_name; -#endif - /* Document type ("dt") flags */ enum @@ -252,14 +296,14 @@ typedef enum BINDERR, BINDOK, LISTENERR, ACCEPTERR, ACCEPTOK, CONCLOSED, FTPOK, FTPLOGINC, FTPLOGREFUSED, FTPPORTERR, FTPNSFOD, FTPRETROK, FTPUNKNOWNTYPE, FTPRERR, - FTPREXC, FTPSRVERR, FTPRETRINT, FTPRESTFAIL, URLHTTPS, - URLOK, URLHTTP, URLFTP, URLFILE, URLUNKNOWN, URLBADPORT, - URLBADHOST, FOPENERR, FWRITEERR, HOK, HLEXC, HEOF, + FTPREXC, FTPSRVERR, FTPRETRINT, FTPRESTFAIL, URLERROR, + FOPENERR, FWRITEERR, HOK, HLEXC, HEOF, HERR, RETROK, RECLEVELEXC, FTPACCDENIED, WRONGCODE, FTPINVPASV, FTPNOPASV, - RETRFINISHED, READERR, TRYLIMEXC, URLBADPATTERN, - FILEBADFILE, RANGEERR, RETRBADPATTERN, RETNOTSUP, - ROBOTSOK, NOROBOTS, PROXERR, AUTHFAILED, QUOTEXC, WRITEFAILED, + CONTNOTSUPPORTED, RETRUNNEEDED, RETRFINISHED, READERR, TRYLIMEXC, + URLBADPATTERN, FILEBADFILE, RANGEERR, RETRBADPATTERN, + RETNOTSUP, ROBOTSOK, NOROBOTS, PROXERR, AUTHFAILED, + QUOTEXC, WRITEFAILED, SSLERRCERTFILE,SSLERRCERTKEY,SSLERRCTXCREATE } uerr_t; @@ -282,4 +326,7 @@ typedef unsigned char boolean; retrieve the requisites of a single document. */ #define INFINITE_RECURSION -1 +#define CONNECT_ERROR(x) ((x) == ECONNREFUSED && !opt.retry_connrefused \ + ? CONREFUSED : CONERROR) + #endif /* WGET_H */