]> sjero.net Git - wget/blobdiff - src/wget.h
[svn] Fix memory leak in a rare case in url.c.
[wget] / src / wget.h
index ccc73b6146c2f1bf6511938259f9e719705dcc2f..45e2fd82f784f3c68a44501823e4dbfbfece4fe9 100644 (file)
@@ -62,6 +62,9 @@ so, delete this exception statement from your version.  */
 # define _(string) string
 #endif /* not HAVE_NLS */
 
+/* No-op version of gettext, used for constant strings. */
+#define N_(string) (string)
+
 /* I18N NOTE: You will notice that none of the DEBUG messages are
    marked as translatable.  This is intentional, for a few reasons:
 
@@ -157,33 +160,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)
+
+/* 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))
+
+/* 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])
+
+/* Like XNUM_TO_DIGIT, but generates lower-case characters. */
+#define XNUM_TO_digit(x) ("0123456789abcdef"[x])
 
-/* 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'))
+/* Returns the number of elements in an array with fixed
+   initialization.  For example:
 
-/* Like XDIGIT_TO_XCHAR, but produce a lower-case char. */
-#define XDIGIT_TO_xchar(x) (((x) < 10) ? ((x) + '0') : ((x) - 10 + 'a'))
+   static char a[] = "foo";     -- countof(a) == 4 (for terminating \0)
 
-#define ARRAY_SIZE(array) (sizeof (array) / sizeof (*(array)))
+   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
@@ -279,7 +302,8 @@ extern const char *exec_name;
 /* Document type ("dt") flags */
 enum
 {
-  TEXTHTML             = 0x0001,       /* document is of type text/html */
+  TEXTHTML             = 0x0001,       /* document is of type text/html
+                                           or application/xhtml+xml */
   RETROKF              = 0x0002,       /* retrieval was OK */
   HEAD_ONLY            = 0x0004,       /* only send the HEAD request */
   SEND_NOCACHE         = 0x0008,       /* send Pragma: no-cache directive */
@@ -287,8 +311,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,
@@ -326,4 +351,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 */