]> sjero.net Git - wget/blobdiff - src/wget.h
[svn] Implement xdigit_to_xchar more efficiently.
[wget] / src / wget.h
index 58ca27342855baff6ac159a9e0e17956ce891893..bcd72f28d4f2f852627562aa997f37e1829eacc8 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
@@ -147,23 +157,42 @@ 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 the ASCII character that represents a hexadecimal digit to
+   the number in range [0, 16) that corresponds to the digit.  X
+   should be between '0' and '9', or between 'A' and 'F', or between
+   'a' and 'f'.  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'))
+/* The reverse of the above: convert a digit number in the [0, 16)
+   range to an ASCII character.  The A-F characters are in upper
+   case.  */
+#define XDIGIT_TO_XCHAR(x) ("0123456789ABCDEF"[x])
 
-/* Like XDIGIT_TO_XCHAR, but produce a lower-case char. */
-#define XDIGIT_TO_xchar(x) (((x) < 10) ? ((x) + '0') : ((x) - 10 + 'a'))
+/* Like XDIGIT_TO_XCHAR, but generates lower-case characters. */
+#define XDIGIT_TO_xchar(x) ("0123456789abcdef"[x])
 
-#define ARRAY_SIZE(array) (sizeof (array) / sizeof (*(array)))
+/* 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)))
+
+#define ARRAY_SIZE(array) countof (array)
 
 /* Copy the data delimited with BEG and END to alloca-allocated
    storage, and zero-terminate it.  BEG and END are evaluated only
@@ -316,4 +345,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 */