mirror of
https://github.com/moparisthebest/wget
synced 2024-07-03 16:38:41 -04:00
[svn] Better INT_MAX and UCHAR_MAX checks.
This commit is contained in:
parent
244efb6e50
commit
6f3dbca0c5
@ -1,3 +1,7 @@
|
|||||||
|
2003-11-12 Hrvoje Niksic <hniksic@xemacs.org>
|
||||||
|
|
||||||
|
* configure.in: Check for limits.h.
|
||||||
|
|
||||||
2003-11-10 Hrvoje Niksic <hniksic@xemacs.org>
|
2003-11-10 Hrvoje Niksic <hniksic@xemacs.org>
|
||||||
|
|
||||||
* aclocal.m4 (WGET_SOCKLEN_T): Use AC_COMPILE_IFELSE instead of
|
* aclocal.m4 (WGET_SOCKLEN_T): Use AC_COMPILE_IFELSE instead of
|
||||||
|
14
configure.in
14
configure.in
@ -170,7 +170,7 @@ dnl HAVE_SYS_TYPES_H, etc. before including them.
|
|||||||
AC_HEADER_STDC
|
AC_HEADER_STDC
|
||||||
AC_CHECK_HEADERS(sys/types.h sys/stat.h)
|
AC_CHECK_HEADERS(sys/types.h sys/stat.h)
|
||||||
dnl Now check for the others.
|
dnl Now check for the others.
|
||||||
AC_CHECK_HEADERS(string.h strings.h stdarg.h unistd.h sys/time.h)
|
AC_CHECK_HEADERS(string.h strings.h stdarg.h limits.h unistd.h sys/time.h)
|
||||||
AC_CHECK_HEADERS(termios.h sys/ioctl.h sys/select.h utime.h sys/utime.h)
|
AC_CHECK_HEADERS(termios.h sys/ioctl.h sys/select.h utime.h sys/utime.h)
|
||||||
AC_CHECK_HEADERS(stdint.h inttypes.h signal.h setjmp.h pwd.h)
|
AC_CHECK_HEADERS(stdint.h inttypes.h signal.h setjmp.h pwd.h)
|
||||||
AC_HEADER_TIME
|
AC_HEADER_TIME
|
||||||
@ -314,13 +314,15 @@ if test x"$with_ssl" != x"no"; then
|
|||||||
CPPFLAGS="$SSL_INCLUDES $wget_save_CPPFLAGS"
|
CPPFLAGS="$SSL_INCLUDES $wget_save_CPPFLAGS"
|
||||||
|
|
||||||
AC_MSG_CHECKING([for includes])
|
AC_MSG_CHECKING([for includes])
|
||||||
|
AC_COMPILE_IFELSE([
|
||||||
AC_TRY_CPP([#include <openssl/ssl.h>
|
#include <openssl/ssl.h>
|
||||||
#include <openssl/rsa.h>
|
#include <openssl/rsa.h>
|
||||||
],
|
], [
|
||||||
AC_MSG_RESULT(found); ssl_found_includes=yes,
|
AC_MSG_RESULT(found)
|
||||||
|
ssl_found_includes=yes
|
||||||
|
], [
|
||||||
AC_MSG_RESULT([not found])
|
AC_MSG_RESULT([not found])
|
||||||
)
|
])
|
||||||
|
|
||||||
if test x"$ssl_found_includes" = xno; then
|
if test x"$ssl_found_includes" = xno; then
|
||||||
continue
|
continue
|
||||||
|
@ -1,3 +1,9 @@
|
|||||||
|
2003-11-12 Hrvoje Niksic <hniksic@xemacs.org>
|
||||||
|
|
||||||
|
* utils.c: Use limits.h only where available.
|
||||||
|
|
||||||
|
* hash.c: Use INVALID_PTR and INVALID_PTR_BYTE. Include limits.h.
|
||||||
|
|
||||||
2003-11-11 Hrvoje Niksic <hniksic@xemacs.org>
|
2003-11-11 Hrvoje Niksic <hniksic@xemacs.org>
|
||||||
|
|
||||||
* main.c: Added options --inet4-only and --inet6-only.
|
* main.c: Added options --inet4-only and --inet6-only.
|
||||||
|
41
src/hash.c
41
src/hash.c
@ -35,7 +35,10 @@ so, delete this exception statement from your version. */
|
|||||||
# include <string.h>
|
# include <string.h>
|
||||||
#else
|
#else
|
||||||
# include <strings.h>
|
# include <strings.h>
|
||||||
#endif /* HAVE_STRING_H */
|
#endif
|
||||||
|
#ifdef HAVE_LIMITS_H
|
||||||
|
# include <limits.h>
|
||||||
|
#endif
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
|
||||||
@ -158,12 +161,25 @@ struct hash_table {
|
|||||||
the prime table. */
|
the prime table. */
|
||||||
};
|
};
|
||||||
|
|
||||||
/* We use all-bit-set marker to mean that a mapping is empty. It is
|
/* We use the all-bits-set constant (INVALID_PTR) marker to mean that
|
||||||
(hopefully) illegal as a pointer, and it allows the users to use
|
a mapping is empty. It is unaligned and therefore illegal as a
|
||||||
NULL (as well as any non-negative integer) as key. */
|
pointer. INVALID_PTR_BYTE (0xff) is the one-byte value used to
|
||||||
|
initialize the mappings array as empty.
|
||||||
|
|
||||||
#define NON_EMPTY(mp) (mp->key != (void *)~(unsigned long)0)
|
The all-bits-set value is a better choice than NULL because it
|
||||||
#define MARK_AS_EMPTY(mp) (mp->key = (void *)~(unsigned long)0)
|
allows the use of NULL/0 keys. Since the keys are either integers
|
||||||
|
or pointers, the only key that cannot be used is the integer value
|
||||||
|
-1. This is acceptable because it still allows the use of
|
||||||
|
nonnegative integer keys. */
|
||||||
|
|
||||||
|
#define INVALID_PTR ((void *) ~(unsigned long)0)
|
||||||
|
#ifndef UCHAR_MAX
|
||||||
|
# define UCHAR_MAX 0xff
|
||||||
|
#endif
|
||||||
|
#define INVALID_PTR_BYTE UCHAR_MAX
|
||||||
|
|
||||||
|
#define NON_EMPTY(mp) ((mp)->key != INVALID_PTR)
|
||||||
|
#define MARK_AS_EMPTY(mp) ((mp)->key = INVALID_PTR)
|
||||||
|
|
||||||
/* "Next" mapping is the mapping after MP, but wrapping back to
|
/* "Next" mapping is the mapping after MP, but wrapping back to
|
||||||
MAPPINGS when MP would reach MAPPINGS+SIZE. */
|
MAPPINGS when MP would reach MAPPINGS+SIZE. */
|
||||||
@ -178,9 +194,8 @@ struct hash_table {
|
|||||||
being HASHFUN. */
|
being HASHFUN. */
|
||||||
#define HASH_POSITION(key, hashfun, size) ((hashfun) (key) % size)
|
#define HASH_POSITION(key, hashfun, size) ((hashfun) (key) % size)
|
||||||
|
|
||||||
/* Find a prime near, but greather than or equal to SIZE. Of course,
|
/* Find a prime near, but greather than or equal to SIZE. The primes
|
||||||
the primes are not calculated, but looked up from a table. The
|
are looked up from a table with a selection of primes convenient
|
||||||
table does not contain all primes in range, just a selection useful
|
|
||||||
for this purpose.
|
for this purpose.
|
||||||
|
|
||||||
PRIME_OFFSET is a minor optimization: it specifies start position
|
PRIME_OFFSET is a minor optimization: it specifies start position
|
||||||
@ -273,8 +288,8 @@ hash_table_new (int items,
|
|||||||
|
|
||||||
ht->mappings = xnew_array (struct mapping, ht->size);
|
ht->mappings = xnew_array (struct mapping, ht->size);
|
||||||
/* Mark mappings as empty. We use 0xff rather than 0 to mark empty
|
/* Mark mappings as empty. We use 0xff rather than 0 to mark empty
|
||||||
keys because it allows us to store NULL keys to the table. */
|
keys because it allows us to use NULL/0 as keys. */
|
||||||
memset (ht->mappings, 0xff, size * sizeof (struct mapping));
|
memset (ht->mappings, INVALID_PTR_BYTE, size * sizeof (struct mapping));
|
||||||
|
|
||||||
ht->count = 0;
|
ht->count = 0;
|
||||||
|
|
||||||
@ -378,7 +393,7 @@ grow_hash_table (struct hash_table *ht)
|
|||||||
ht->resize_threshold = newsize * HASH_MAX_FULLNESS;
|
ht->resize_threshold = newsize * HASH_MAX_FULLNESS;
|
||||||
|
|
||||||
mappings = xnew_array (struct mapping, newsize);
|
mappings = xnew_array (struct mapping, newsize);
|
||||||
memset (mappings, 0xff, newsize * sizeof (struct mapping));
|
memset (mappings, INVALID_PTR_BYTE, newsize * sizeof (struct mapping));
|
||||||
ht->mappings = mappings;
|
ht->mappings = mappings;
|
||||||
|
|
||||||
for (mp = old_mappings; mp < old_end; mp++)
|
for (mp = old_mappings; mp < old_end; mp++)
|
||||||
@ -480,7 +495,7 @@ hash_table_remove (struct hash_table *ht, const void *key)
|
|||||||
void
|
void
|
||||||
hash_table_clear (struct hash_table *ht)
|
hash_table_clear (struct hash_table *ht)
|
||||||
{
|
{
|
||||||
memset (ht->mappings, 0xff, ht->size * sizeof (struct mapping));
|
memset (ht->mappings, INVALID_PTR_BYTE, ht->size * sizeof (struct mapping));
|
||||||
ht->count = 0;
|
ht->count = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
13
src/utils.c
13
src/utils.c
@ -46,7 +46,9 @@ so, delete this exception statement from your version. */
|
|||||||
#ifdef HAVE_PWD_H
|
#ifdef HAVE_PWD_H
|
||||||
# include <pwd.h>
|
# include <pwd.h>
|
||||||
#endif
|
#endif
|
||||||
#include <limits.h>
|
#ifdef HAVE_LIMITS_H
|
||||||
|
# include <limits.h>
|
||||||
|
#endif
|
||||||
#ifdef HAVE_UTIME_H
|
#ifdef HAVE_UTIME_H
|
||||||
# include <utime.h>
|
# include <utime.h>
|
||||||
#endif
|
#endif
|
||||||
@ -1147,10 +1149,13 @@ numdigit (long number)
|
|||||||
return cnt;
|
return cnt;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* A half-assed implementation of INT_MAX on machines that don't
|
/* Attempt to calculate INT_MAX on machines that don't bother to
|
||||||
bother to define one. */
|
define it. */
|
||||||
#ifndef INT_MAX
|
#ifndef INT_MAX
|
||||||
# define INT_MAX ((int) ~((unsigned)1 << 8 * sizeof (int) - 1))
|
# ifndef CHAR_BIT
|
||||||
|
# define CHAR_BIT 8
|
||||||
|
# endif
|
||||||
|
# define INT_MAX ((int) ~((unsigned)1 << CHAR_BIT * sizeof (int) - 1))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define ONE_DIGIT(figure) *p++ = n / (figure) + '0'
|
#define ONE_DIGIT(figure) *p++ = n / (figure) + '0'
|
||||||
|
Loading…
Reference in New Issue
Block a user