]> sjero.net Git - wget/blobdiff - src/wget.h
[svn] Renamed wget.h XDIGIT-related macros to (hopefully) clearer names.
[wget] / src / wget.h
index a1f737a4d607e146ec2288aad7305ec85e5df6c4..8851b3e0bf73a50a78295f1f755ae361d32f83b7 100644 (file)
@@ -15,7 +15,17 @@ 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.  */
+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
@@ -105,6 +115,7 @@ void debug_logprintf ();
 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
@@ -146,33 +157,53 @@ char *xstrdup_debug PARAMS ((const char *, const char *, int));
 /* The smaller value of the two.  */
 #define MINVAL(x, y) ((x) < (y) ? (x) : (y))
 
-/* 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))
+/* Convert an ASCII hex digit to the corresponding number between 0
+   and 15.  X should be a hexadecimal digit that satisfies isxdigit;
+   otherwise, the result is undefined.  */
+#define XDIGIT_TO_NUM(x) ((x) < 'A' ? (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'))
+/* Convert a sequence of ASCII hex digits X and Y to a number betewen
+   0 and 255.  Uses XDIGIT_TO_NUM for conversion of individual
+   digits.  */
+#define X2DIGITS_TO_NUM(h1, h2) ((XDIGIT_TO_NUM (h1) << 4) + XDIGIT_TO_NUM (h2))
 
-/* Like XDIGIT_TO_XCHAR, but produce a lower-case char. */
-#define XDIGIT_TO_xchar(x) (((x) < 10) ? ((x) + '0') : ((x) - 10 + 'a'))
+/* The reverse of the above: convert a number in the [0, 16) range to
+   its ASCII representation in hex.  The A-F characters are in upper
+   case.  */
+#define XNUM_TO_DIGIT(x) ("0123456789ABCDEF"[x])
 
-#define ARRAY_SIZE(array) (sizeof (array) / sizeof (*(array)))
+/* Like XNUM_TO_DIGIT, but generates lower-case characters. */
+#define XNUM_TO_digit(x) ("0123456789abcdef"[x])
+
+/* Returns the number of elements in an array with fixed
+   initialization.  For example:
+
+   static char a[] = "foo";     -- countof(a) == 4 (for terminating \0)
+
+   int a[5] = {1, 2};           -- countof(a) == 5
+
+   char *a[3] = {               -- countof(a) == 3
+     "foo", "bar", "baz"
+   };
+
+   And, most importantly, it works when the compiler counts the array
+   elements for you:
+
+   char *a[] = {                -- countof(a) == 4
+     "foo", "bar", "baz", "qux"
+   }  */
+#define countof(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.  */
+   storage, and zero-terminate it.  Arguments are evaluated only once,
+   in the order BEG, END, PLACE.  */
 #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';                       \
+  const char *BTA_beg = (beg);                 \
+  int BTA_len = (end) - BTA_beg;               \
+  char **BTA_dest = &(place);                  \
+  *BTA_dest = alloca (BTA_len + 1);            \
+  memcpy (*BTA_dest, BTA_beg, BTA_len);                \
+  (*BTA_dest)[BTA_len] = '\0';                 \
 } while (0)
 
 /* Return non-zero if string bounded between BEG and END is equal to
@@ -250,8 +281,9 @@ char *xstrdup_debug PARAMS ((const char *, const char *, int));
        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;                                                          \
        }                                                                       \
@@ -262,15 +294,7 @@ char *xstrdup_debug PARAMS ((const char *, const char *, int));
 /* 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 <wget@harkless.org>] */
-#ifndef OPTIONS_DEFINED_HERE
 extern const char *exec_name;
-#endif
-
 \f
 /* Document type ("dt") flags */
 enum
@@ -283,8 +307,9 @@ enum
   ADDED_HTML_EXTENSION = 0x0020         /* added ".html" extension due to -E */
 };
 
-/* Universal error type -- used almost everywhere.
-   This is, of course, utter crock.  */
+/* Universal error type -- used almost everywhere.  Error reporting of
+   this detail is not generally used or needed and should be
+   simplified.  */
 typedef enum
 {
   NOCONERROR, HOSTERR, CONSOCKERR, CONERROR, CONSSLERR,
@@ -322,4 +347,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 */