]> git.ipfire.org Git - thirdparty/dhcpcd.git/commitdiff
Fix compile and warnings on BSD.
authorRoy Marples <roy@marples.name>
Wed, 10 Sep 2014 02:02:21 +0000 (02:02 +0000)
committerRoy Marples <roy@marples.name>
Wed, 10 Sep 2014 02:02:21 +0000 (02:02 +0000)
if-bsd.c
script.c

index baf7c35509f67a98cb7d59918d7000fa3090b372..d951ca2ae1d3ef123ce60235ccecb4da3bffcabb 100644 (file)
--- a/if-bsd.c
+++ b/if-bsd.c
@@ -137,8 +137,8 @@ if_openlinksocket(void)
 #endif
 }
 
-int
-if_getssid(struct interface *ifp)
+static int
+if_getssid1(const char *ifname, char *ssid)
 {
        int s, retval = -1;
 #if defined(SIOCG80211NWID)
@@ -154,18 +154,19 @@ if_getssid(struct interface *ifp)
 
 #if defined(SIOCG80211NWID) /* NetBSD */
        memset(&ifr, 0, sizeof(ifr));
-       strlcpy(ifr.ifr_name, ifp->name, sizeof(ifr.ifr_name));
+       strlcpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
        memset(&nwid, 0, sizeof(nwid));
        ifr.ifr_data = (void *)&nwid;
        if (ioctl(s, SIOCG80211NWID, &ifr) == 0) {
-               if (nwid.i_len > sizeof(ifp->ssid)) {
+               if (ssid == NULL)
+                       retval = nwid.i_len;
+               else if (nwid.i_len > IF_SSIDSIZE) {
                        errno = ENOBUFS;
                        retval = -1;
                } else {
                        retval = nwid.i_len;
-                       memcpy(ifp->ssid, nwid.i_nwid, nwid.i_len);
+                       memcpy(ssid, nwid.i_nwid, nwid.i_len);
                        ssid[nwid.i_len] = '\0';
-                       ifp->ssid_len = nwid.i_len;
                }
        }
 #elif defined(IEEE80211_IOC_SSID) /* FreeBSD */
@@ -176,14 +177,15 @@ if_getssid(struct interface *ifp)
        memset(nwid, 0, sizeof(nwid));
        ireq.i_data = &nwid;
        if (ioctl(s, SIOCG80211, &ireq) == 0) {
-               if (ireq.i_len > sizeof(ifp->ssid)) {
+               if (ssid == NULL)
+                       retval = ireq.i_len;
+               else if (ireq.i_len > IF_SSIDSIZE) {
                        errno = ENOBUFS;
                        retval = -1;
                } else  {
                        retval = ireq.i_len;
-                       memcpy(ifp->ssid, nwid, ireq.i_len);
-                       ifp->ssid[ireq.i_len] = '\0';
-                       ifp->ssid_len = ireq.i_len;
+                       memcpy(ssid, nwid, ireq.i_len);
+                       ssid[ireq.i_len] = '\0';
                }
        }
 #endif
@@ -192,6 +194,17 @@ if_getssid(struct interface *ifp)
        return retval;
 }
 
+int
+if_getssid(struct interface *ifp)
+{
+       int r;
+
+       r = if_getssid1(ifp->name, ifp->ssid);
+       if (r != -1)
+               ifp->ssid_len = (unsigned int)r;
+       return r;
+}
+
 /*
  * FreeBSD allows for Virtual Access Points
  * We need to check if the interface is a Virtual Interface Master
@@ -216,7 +229,7 @@ if_vimaster(const char *ifname)
        if (ifmr.ifm_status & IFM_AVALID &&
            IFM_TYPE(ifmr.ifm_active) == IFM_IEEE80211)
        {
-               if (if_getssid(ifname, NULL) == -1)
+               if (if_getssid1(ifname, NULL) == -1)
                        return 1;
        }
        return 0;
index ea094b6e7c71c410f9719bd0d2a70ba0cf8785dc..7fcf8c546c847c9cd0adf29b8e4d2d32dfbeeeab 100644 (file)
--- a/script.c
+++ b/script.c
@@ -383,16 +383,16 @@ make_env(const struct interface *ifp, const char *reason, char ***argv)
                else    
                        pfx = NULL;
                if (pfx) {
-                       int pfx_len;
+                       size_t pfx_len;
                        ssize_t psl;
 
                        pfx_len = strlen(pfx);
                        psl = print_string(NULL, 0,
                            (const uint8_t *)ifp->ssid, ifp->ssid_len);
                        if (psl != -1) {
-                               EMALLOC(elen, pfx_len + psl + 1);
+                               EMALLOC(elen, pfx_len + (size_t)psl + 1);
                                memcpy(env[elen], pfx, pfx_len);
-                               print_string(env[elen] + pfx_len, psl,
+                               print_string(env[elen] + pfx_len, (size_t)psl,
                                    (const uint8_t *)ifp->ssid, ifp->ssid_len);
                                elen++;
                        }