Hi,

I wish to close PR 9982.  This PR suggests that IPv4 address is not
unsigned int and fix it to 32bit long.  So, I took in_addr_t changes
from OpenBSD and made a patch.
It may break binary compatibility on Alpha, where u_long is 64 bits
but in_addr_t would still be 32 bits.
It seems working well on my *Pentium* box.  However, I have no 64 bits
environment.
Please review the changes.
Index: include/arpa/inet.h
===================================================================
RCS file: /home/ncvs/src/include/arpa/inet.h,v
retrieving revision 1.11
diff -u -r1.11 inet.h
--- include/arpa/inet.h 1999/08/27 23:45:00     1.11
+++ include/arpa/inet.h 2001/03/13 12:41:29
@@ -84,13 +84,13 @@
 __BEGIN_DECLS
 int             ascii2addr __P((int, const char *, void *));
 char           *addr2ascii __P((int, const void *, int, char *));
-unsigned long   inet_addr __P((const char *));
+in_addr_t       inet_addr __P((const char *));
 int             inet_aton __P((const char *, struct in_addr *));
-unsigned long   inet_lnaof __P((struct in_addr));
-struct in_addr  inet_makeaddr __P((u_long , u_long));
-char *          inet_neta __P((u_long, char *, size_t));
-unsigned long   inet_netof __P((struct in_addr));
-unsigned long   inet_network __P((const char *));
+in_addr_t       inet_lnaof __P((struct in_addr));
+struct in_addr  inet_makeaddr __P((in_addr_t, in_addr_t));
+char *          inet_neta __P((in_addr_t, char *, size_t));
+in_addr_t       inet_netof __P((struct in_addr));
+in_addr_t       inet_network __P((const char *));
 char           *inet_net_ntop __P((int, const void *, int, char *, size_t));
 int             inet_net_pton __P((int, const char *, void *, size_t));
 char           *inet_ntoa __P((struct in_addr));
Index: lib/libc/net/inet.3
===================================================================
RCS file: /home/ncvs/src/lib/libc/net/inet.3,v
retrieving revision 1.11
diff -u -r1.11 inet.3
--- lib/libc/net/inet.3 2000/12/29 14:08:00     1.11
+++ lib/libc/net/inet.3 2001/03/13 12:41:29
@@ -55,9 +55,9 @@
 .Fd #include <arpa/inet.h>
 .Ft int 
 .Fn inet_aton "const char *cp" "struct in_addr *pin"
-.Ft unsigned long 
+.Ft in_addr_t
 .Fn inet_addr "const char *cp"
-.Ft unsigned long 
+.Ft in_addr_t
 .Fn inet_network "const char *cp"
 .Ft char *
 .Fn inet_ntoa "struct in_addr in"
@@ -66,10 +66,10 @@
 .Ft int
 .Fn inet_pton "int af" "const char *src" "void *dst"
 .Ft struct in_addr 
-.Fn inet_makeaddr "unsigned long net" "unsigned long lna"
-.Ft unsigned long 
+.Fn inet_makeaddr "in_addr_t net" "in_addr_t lna"
+.Ft in_addr_t
 .Fn inet_lnaof "struct in_addr in"
-.Ft unsigned long 
+.Ft in_addr_t
 .Fn inet_netof "struct in_addr in"
 .Sh DESCRIPTION
 The routines
Index: lib/libc/net/inet_addr.c
===================================================================
RCS file: /home/ncvs/src/lib/libc/net/inet_addr.c,v
retrieving revision 1.12
diff -u -r1.12 inet_addr.c
--- lib/libc/net/inet_addr.c    1999/12/27 08:40:40     1.12
+++ lib/libc/net/inet_addr.c    2001/03/13 12:41:29
@@ -72,7 +72,7 @@
  * ASCII internet address interpretation routine.
  * The value returned is in network order.
  */
-u_long         /* XXX should be struct in_addr :( */
+in_addr_t              /* XXX should be struct in_addr :( */
 inet_addr(cp)
        register const char *cp;
 {
@@ -96,7 +96,7 @@
        struct in_addr *addr;
 {
        u_long parts[4];
-       u_long val;
+       in_addr_t val;
        char *c;
        char *endptr;
        int gotend, n;
Index: lib/libc/net/inet_lnaof.c
===================================================================
RCS file: /home/ncvs/src/lib/libc/net/inet_lnaof.c,v
retrieving revision 1.2
diff -u -r1.2 inet_lnaof.c
--- lib/libc/net/inet_lnaof.c   1998/09/02 00:53:16     1.2
+++ lib/libc/net/inet_lnaof.c   2001/03/13 12:41:29
@@ -44,11 +44,11 @@
  * internet address; handles class a/b/c network
  * number formats.
  */
-u_long
+in_addr_t
 inet_lnaof(in)
        struct in_addr in;
 {
-       register u_long i = ntohl(in.s_addr);
+       register in_addr_t i = ntohl(in.s_addr);
 
        if (IN_CLASSA(i))
                return ((i)&IN_CLASSA_HOST);
Index: lib/libc/net/inet_makeaddr.c
===================================================================
RCS file: /home/ncvs/src/lib/libc/net/inet_makeaddr.c,v
retrieving revision 1.2
diff -u -r1.2 inet_makeaddr.c
--- lib/libc/net/inet_makeaddr.c        1998/09/02 00:53:17     1.2
+++ lib/libc/net/inet_makeaddr.c        2001/03/13 12:41:29
@@ -45,9 +45,9 @@
  */
 struct in_addr
 inet_makeaddr(net, host)
-       u_long net, host;
+       in_addr_t net, host;
 {
-       u_long addr;
+       in_addr_t addr;
 
        if (net < 128)
                addr = (net << IN_CLASSA_NSHIFT) | (host & IN_CLASSA_HOST);
Index: lib/libc/net/inet_neta.c
===================================================================
RCS file: /home/ncvs/src/lib/libc/net/inet_neta.c,v
retrieving revision 1.6
diff -u -r1.6 inet_neta.c
--- lib/libc/net/inet_neta.c    1999/08/28 00:00:11     1.6
+++ lib/libc/net/inet_neta.c    2001/03/13 12:41:29
@@ -38,7 +38,7 @@
 /*
  * char *
  * inet_neta(src, dst, size)
- *     format a u_long network number into presentation format.
+ *     format a in_addr_t network number into presentation format.
  * return:
  *     pointer to dst, or NULL if an error occurred (check errno).
  * note:
@@ -48,7 +48,7 @@
  */
 char *
 inet_neta(src, dst, size)
-       u_long src;
+       in_addr_t src;
        char *dst;
        size_t size;
 {
Index: lib/libc/net/inet_netof.c
===================================================================
RCS file: /home/ncvs/src/lib/libc/net/inet_netof.c,v
retrieving revision 1.2
diff -u -r1.2 inet_netof.c
--- lib/libc/net/inet_netof.c   1998/09/02 00:53:17     1.2
+++ lib/libc/net/inet_netof.c   2001/03/13 12:41:29
@@ -43,11 +43,11 @@
  * Return the network number from an internet
  * address; handles class a/b/c network #'s.
  */
-u_long
+in_addr_t
 inet_netof(in)
        struct in_addr in;
 {
-       register u_long i = ntohl(in.s_addr);
+       register in_addr_t i = ntohl(in.s_addr);
 
        if (IN_CLASSA(i))
                return (((i)&IN_CLASSA_NET) >> IN_CLASSA_NSHIFT);
Index: lib/libc/net/inet_network.c
===================================================================
RCS file: /home/ncvs/src/lib/libc/net/inet_network.c,v
retrieving revision 1.6
diff -u -r1.6 inet_network.c
--- lib/libc/net/inet_network.c 1999/11/04 04:30:44     1.6
+++ lib/libc/net/inet_network.c 2001/03/13 12:41:29
@@ -47,13 +47,14 @@
  * The library routines call this routine to interpret
  * network numbers.
  */
-u_long
+in_addr_t
 inet_network(cp)
        register const char *cp;
 {
-       register u_long val, base, n, i;
+       register in_addr_t val, base, n;
        register char c;
-       u_long parts[4], *pp = parts;
+       in_addr_t parts[4], *pp = parts;
+       register int i;
 
 again:
        val = 0; base = 10;
Index: sys/netinet/in.h
===================================================================
RCS file: /home/ncvs/src/sys/netinet/in.h,v
retrieving revision 1.53
diff -u -r1.53 in.h
--- sys/netinet/in.h    2001/02/21 06:39:56     1.53
+++ sys/netinet/in.h    2001/03/13 12:41:29
@@ -232,7 +232,7 @@
  * Internet address (a structure for historical reasons)
  */
 struct in_addr {
-       u_int32_t s_addr;
+       in_addr_t s_addr;
 };
 
 /*
Index: sys/sys/types.h
===================================================================
RCS file: /home/ncvs/src/sys/sys/types.h,v
retrieving revision 1.41
diff -u -r1.41 types.h
--- sys/sys/types.h     2000/10/27 11:45:49     1.41
+++ sys/sys/types.h     2001/03/13 12:41:30
@@ -73,6 +73,7 @@
 typedef        u_int32_t       u_daddr_t;      /* unsigned disk address */
 typedef        u_int32_t       fixpt_t;        /* fixed point number */
 typedef        u_int32_t       gid_t;          /* group id */
+typedef        u_int32_t       in_addr_t;      /* base type for internet address */
 typedef        u_int32_t       ino_t;          /* inode number */
 typedef        long            key_t;          /* IPC key (for Sys V IPC) */
 typedef        u_int16_t       mode_t;         /* permissions */
Hajimu UMEMOTO @ Internet Mutual Aid Society Yokohama, Japan
[EMAIL PROTECTED]  [EMAIL PROTECTED]  ume@{,jp.}FreeBSD.org
http://www.imasy.org/~ume/

Reply via email to