From 1dee527a567d7929dea3c009b2e0797a37a971b6 Mon Sep 17 00:00:00 2001 From: hniksic Date: Tue, 11 Dec 2001 00:32:58 -0800 Subject: [PATCH] [svn] Use a typedef for IPv4 address. Published in . --- src/ChangeLog | 7 +++++++ src/host.c | 42 ++++++++++++++++++++---------------------- src/host.h | 2 +- 3 files changed, 28 insertions(+), 23 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 7c85fb59..48fe91a1 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,10 @@ +2001-12-11 Hrvoje Niksic + + * host.c: New type ipv4_address. Use it consistently instead of + `unsigned char[4]' and `unsigned char *'. + (pretty_print_address): Accept a `const void *', to require even + less casting. + 2001-12-11 Hrvoje Niksic * ftp-ls.c (ftp_parse_vms_ls): Fix obvious memory leaks. diff --git a/src/host.c b/src/host.c index fb997733..ddc04445 100644 --- a/src/host.c +++ b/src/host.c @@ -65,7 +65,8 @@ extern int h_errno; # endif #endif -#define IP4_ADDRESS_LENGTH 4 +/* An IPv4 address is simply a 4-byte quantity. */ +typedef unsigned char ipv4_address[4]; /* Mapping between known hosts and to lists of their addresses. */ @@ -76,7 +77,7 @@ static struct hash_table *host_name_addresses_map; struct address_list { int count; /* number of adrresses */ - unsigned char *buffer; /* buffer which holds all of them. */ + ipv4_address *addresses; /* pointer to the string of addresses */ int faulty; /* number of addresses known not to work. */ @@ -84,8 +85,6 @@ struct address_list { not. */ }; -#define ADDR_LOCATION(al, index) ((al)->buffer + index * IP4_ADDRESS_LENGTH) - /* Get the bounds of the address list. */ void @@ -102,7 +101,7 @@ address_list_copy_one (struct address_list *al, int index, unsigned char *ip_store) { assert (index >= al->faulty && index < al->count); - memcpy (ip_store, ADDR_LOCATION (al, index), IP4_ADDRESS_LENGTH); + memcpy (ip_store, al->addresses + index, sizeof (ipv4_address)); } /* Check whether two address lists have all their IPs in common. */ @@ -114,8 +113,8 @@ address_list_match_all (struct address_list *al1, struct address_list *al2) return 1; if (al1->count != al2->count) return 0; - return 0 == memcmp (al1->buffer, al2->buffer, - al1->count * IP4_ADDRESS_LENGTH); + return 0 == memcmp (al1->addresses, al2->addresses, + al1->count * sizeof (ipv4_address)); } /* Mark the INDEXth element of AL as faulty, so that the next time @@ -151,13 +150,13 @@ address_list_new (char **h_addr_list) while (h_addr_list[count]) ++count; assert (count > 0); - al->count = count; - al->faulty = 0; - al->buffer = xmalloc (count * IP4_ADDRESS_LENGTH); - al->refcount = 1; + al->count = count; + al->faulty = 0; + al->addresses = xmalloc (count * sizeof (ipv4_address)); + al->refcount = 1; for (i = 0; i < count; i++) - memcpy (ADDR_LOCATION (al, i), h_addr_list[i], IP4_ADDRESS_LENGTH); + memcpy (al->addresses + i, h_addr_list[i], sizeof (ipv4_address)); return al; } @@ -168,11 +167,11 @@ static struct address_list * address_list_new_one (const char *addr) { struct address_list *al = xmalloc (sizeof (struct address_list)); - al->count = 1; - al->faulty = 0; - al->buffer = xmalloc (IP4_ADDRESS_LENGTH); - al->refcount = 1; - memcpy (ADDR_LOCATION (al, 0), addr, IP4_ADDRESS_LENGTH); + al->count = 1; + al->faulty = 0; + al->addresses = xmalloc (sizeof (ipv4_address)); + al->refcount = 1; + memcpy (al->addresses, addr, sizeof (ipv4_address)); return al; } @@ -180,7 +179,7 @@ address_list_new_one (const char *addr) static void address_list_delete (struct address_list *al) { - xfree (al->buffer); + xfree (al->addresses); xfree (al); } @@ -200,7 +199,7 @@ address_list_release (struct address_list *al) #including the netinet stuff. */ char * -pretty_print_address (const unsigned char *addr) +pretty_print_address (const void *addr) { return inet_ntoa (*(struct in_addr *)addr); } @@ -224,8 +223,7 @@ cache_host_lookup (const char *host, struct address_list *al) int i; debug_logprintf ("Caching %s =>", host); for (i = 0; i < al->count; i++) - debug_logprintf (" %s", - pretty_print_address (ADDR_LOCATION (al, i))); + debug_logprintf (" %s", pretty_print_address (al->addresses + i)); debug_logprintf ("\n"); } #endif @@ -250,7 +248,7 @@ lookup_host (const char *host, int silent) we copy the correct four bytes. */ int offset; #ifdef WORDS_BIGENDIAN - offset = sizeof (unsigned long) - IP4_ADDRESS_LENGTH; + offset = sizeof (unsigned long) - sizeof (ipv4_address); #else offset = 0; #endif diff --git a/src/host.h b/src/host.h index 7cd395dc..f99c636c 100644 --- a/src/host.h +++ b/src/host.h @@ -37,7 +37,7 @@ void address_list_release PARAMS ((struct address_list *)); /* This was originally going to be a macro, but then every caller would have to #include the netinet stuff. */ -char *pretty_print_address PARAMS ((const unsigned char *)); +char *pretty_print_address PARAMS ((const void *)); int accept_domain PARAMS ((struct url *)); int sufmatch PARAMS ((const char **, const char *)); -- 2.39.2