]> The Tcpdump Group git mirrors - tcpdump/blobdiff - addrtostr.c
CI: Add warning exemptions for Sun C (suncc-5.14) on Solaris 10
[tcpdump] / addrtostr.c
index 92875622e361702425e78a4257800935880c446f..1fd2cf0908bfd5b95a6e31586fc7b229710d6be3 100644 (file)
  * SUCH DAMAGE.
  */
 
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
+#include <config.h>
 
-#include <netdissect-stdinc.h>
+#include "netdissect-stdinc.h"
 #include "addrtostr.h"
 
 #include <stdio.h>
@@ -71,7 +69,7 @@ addrtostr (const void *src, char *dst, size_t size)
        return NULL;
     }
     for (i = 0; i < 4; ++i) {
-       int n = *srcaddr++;
+       int n = *srcaddr++;
        int non_zerop = 0;
 
        if (non_zerop || n / 100 > 0) {
@@ -110,34 +108,29 @@ addrtostr6 (const void *src, char *dst, size_t size)
   size_t space_left, added_space;
   int snprintfed;
   struct {
-    long base;
-    long len;
+    int base;
+    int len;
   } best, cur;
-  u_long words [IN6ADDRSZ / INT16SZ];
-  u_int  i;
+  uint16_t words [IN6ADDRSZ / INT16SZ];
+  int  i;
 
   /* Preprocess:
    *  Copy the input (bytewise) array into a wordwise array.
    *  Find the longest run of 0x00's in src[] for :: shorthanding.
    */
-  memset (words, 0, sizeof(words));
-  for (i = 0; i < IN6ADDRSZ; i++)
-      words[i/2] |= (srcaddr[i] << ((1 - (i % 2)) << 3));
+  for (i = 0; i < (IN6ADDRSZ / INT16SZ); i++)
+      words[i] = (srcaddr[2*i] << 8) | srcaddr[2*i + 1];
 
   best.len = 0;
   best.base = -1;
   cur.len = 0;
   cur.base  = -1;
-  for (i = 0; i < (IN6ADDRSZ / INT16SZ); i++)
-  {
-    if (words[i] == 0)
-    {
+  for (i = 0; i < (IN6ADDRSZ / INT16SZ); i++) {
+    if (words[i] == 0) {
       if (cur.base == -1)
            cur.base = i, cur.len = 1;
       else cur.len++;
-    }
-    else if (cur.base != -1)
-    {
+    } else if (cur.base != -1) {
       if (best.base == -1 || cur.len > best.len)
          best = cur;
       cur.base = -1;
@@ -161,14 +154,12 @@ addrtostr6 (const void *src, char *dst, size_t size)
         *dp++ = c; \
         space_left--; \
     }
-  for (i = 0; i < (IN6ADDRSZ / INT16SZ); i++)
-  {
+  for (i = 0; i < (IN6ADDRSZ / INT16SZ); i++) {
     /* Are we inside the best run of 0x00's?
      */
-    if (best.base != -1 && i >= best.base && i < (best.base + best.len))
-    {
+    if (best.base != -1 && i >= best.base && i < (best.base + best.len)) {
       if (i == best.base)
-        APPEND_CHAR(':');
+         APPEND_CHAR(':');
       continue;
     }
 
@@ -182,8 +173,7 @@ addrtostr6 (const void *src, char *dst, size_t size)
     if (i == 6 && best.base == 0 &&
         (best.len == 6 || (best.len == 5 && words[5] == 0xffff)))
     {
-      if (!addrtostr(srcaddr+12, dp, space_left))
-      {
+      if (!addrtostr(srcaddr+12, dp, space_left)) {
         errno = ENOSPC;
         return (NULL);
       }
@@ -192,11 +182,10 @@ addrtostr6 (const void *src, char *dst, size_t size)
       space_left -= added_space;
       break;
     }
-    snprintfed = snprintf (dp, space_left, "%lx", words[i]);
+    snprintfed = snprintf (dp, space_left, "%x", words[i]);
     if (snprintfed < 0)
         return (NULL);
-    if ((size_t) snprintfed >= space_left)
-    {
+    if ((size_t) snprintfed >= space_left) {
         errno = ENOSPC;
         return (NULL);
     }