This patch replaces by-hand pointer tracking while parsing comma-separated
IP addresses with a simple loop using the POSIX standard strtok_r() function.

Signed-Off-By: David L Stevens <dlstev...@us.ibm.com>

diff --git a/common/slp_iface.c b/common/slp_iface.c
index b512986..e1423a3 100644
--- a/common/slp_iface.c
+++ b/common/slp_iface.c
@@ -737,29 +737,24 @@ int SLPIfaceGetInfo(const char * useifaces, SLPIfaceInfo 
* ifaceinfo,
 
       if (p)
       {
-         char * ep = p + strlen(p);
-         char * slider1 = p;
-         char * slider2 = p;
+         char *token, *saveptr;
          char interface[MAX_IFACE_LEN];
          int ret = 0;
 
-         while (slider1 < ep)
+         for (token = strtok_r(p, ",", &saveptr); token;
+            token = strtok_r(NULL, ",", &saveptr))
          {
-            while (*slider2 != 0 && *slider2 != ',') 
-               slider2++;
-            *slider2 = 0;
-
-            ret = SLPD_Get_Iface_From_Ip(slider1, (char *)&interface);
+            ret = SLPD_Get_Iface_From_Ip(token, (char *)&interface);
 
             if (SLPIfaceContainsAddr(useifaceslen, useifaces, 
-                  strlen(slider1), slider1))
+                  strlen(token), token))
             {
                sockfd_t fd;
                struct sockaddr_in v4addr;
                struct sockaddr_in6 v6addr;
 
                /* check if an ipv4 address was given */
-               if (SLP_inet_pton(AF_INET, slider1, &v4addr.sin_addr) == 1)
+               if (SLP_inet_pton(AF_INET, token, &v4addr.sin_addr) == 1)
                {
                   if (SLPNetIsIPV4() && ((family == AF_INET) || (family == 
AF_UNSPEC)))
                   {
@@ -776,7 +771,7 @@ int SLPIfaceGetInfo(const char * useifaces, SLPIfaceInfo * 
ifaceinfo,
                      }
                   }
                }
-               else if (SLP_inet_pton(AF_INET6, slider1, &v6addr.sin6_addr) == 
1)
+               else if (SLP_inet_pton(AF_INET6, token, &v6addr.sin6_addr) == 1)
                {
                   if (SLPNetIsIPV6() && ((family == AF_INET6) || (family == 
AF_UNSPEC)))
                   {
@@ -798,7 +793,6 @@ int SLPIfaceGetInfo(const char * useifaces, SLPIfaceInfo * 
ifaceinfo,
                else
                   sts = (errno = EINVAL), -1;   /* not v4, not v6 */
             }
-            slider1 = ++slider2;
          }
       }
       xfree(p);


------------------------------------------------------------------------------
Monitor your physical, virtual and cloud infrastructure from a single
web console. Get in-depth insight into apps, servers, databases, vmware,
SAP, cloud infrastructure, etc. Download 30-day Free Trial.
Pricing starts from $795 for 25 servers or applications!
http://p.sf.net/sfu/zoho_dev2dev_nov
_______________________________________________
Openslp-devel mailing list
Openslp-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openslp-devel

Reply via email to