X-Git-Url: http://sjero.net/git/?a=blobdiff_plain;f=src%2Fwget.h;h=f5eff47e4f46e2d37e0db28c68902fb7d24851c6;hb=d5be8ecca466601bda9b81c28a79077fbda6ccde;hp=86fa953d99f69807d797bb6d87ea4979de5f6c2f;hpb=07f60f19a4ee99ddc343bb51568b0c474e9b853d;p=wget diff --git a/src/wget.h b/src/wget.h index 86fa953d..f5eff47e 100644 --- a/src/wget.h +++ b/src/wget.h @@ -1,20 +1,20 @@ /* 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 +along with Wget; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ /* This file contains some declarations that don't fit anywhere else. @@ -66,6 +66,8 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ /* Include these, so random files need not include them. */ #include "sysdep.h" #include "options.h" +/* locale independent replacement for ctype.h */ +#include "safe-ctype.h" #define DO_NOTHING do {} while (0) @@ -137,15 +139,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)) -/* HEX digit -> ASCII char */ -#define HEXD2ASC(x) (((x) < 10) ? ((x) + '0') : ((x) - 10 + 'A')) +/* 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')) + +/* 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)) @@ -196,24 +231,24 @@ 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); \ + memcpy (drfa_new_basevar, basevar, (sizevar)); \ (basevar) = drfa_new_basevar; \ allocap = 0; \ } \ + (sizevar) = do_realloc_newsize; \ } \ } while (0) @@ -250,14 +285,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;