Patch from Lars Kellogg-Stedman:
authorEric Andersen <andersen@codepoet.org>
Sat, 5 Jul 2003 07:59:30 +0000 (07:59 -0000)
committerEric Andersen <andersen@codepoet.org>
Sat, 5 Jul 2003 07:59:30 +0000 (07:59 -0000)
    This patch fixes endian problems with get_netmask().  I don't know if
    this is the cleanest solution, but it makes 'ipcalc -n' work on both
    an i386 system and a ppc system.

networking/ipcalc.c

index af4eed4a42d89fd83077836f1d5058b7bbdd9fae..94b747ef69beec5cc1b5e83ea39dceca90e5d1dd 100644 (file)
 
 #define IPCALC_MSG(CMD,ALTCMD) if (mode & SILENT) {ALTCMD;} else {CMD;}
 
+#define CLASS_A_NETMASK        ntohl(0xFF000000)
+#define CLASS_B_NETMASK        ntohl(0xFFFF0000)
+#define CLASS_C_NETMASK        ntohl(0xFFFFFF00)
+
 static unsigned long get_netmask(unsigned long ipaddr)
 {
-       if (ipaddr & 0xC0) {
-               return 0x00FFFFFF;      /* Class C */
-       }
-       if (ipaddr & 0x10) {
-               return 0x0000FFFF;      /* Class B */
-       }
-       return 0x000000FF;      /* Class A */
+       ipaddr = htonl(ipaddr);
+
+       if ((ipaddr & 0xC0000000) == 0xC0000000)
+               return CLASS_C_NETMASK;
+       else if ((ipaddr & 0x80000000) == 0x80000000)
+               return CLASS_B_NETMASK;
+       else if ((ipaddr & 0x80000000) == 0)
+               return CLASS_A_NETMASK;
+       else
+               return 0;
 }
 
 #define NETMASK   0x01