[WEXT]: Cleanup early ioctl call path.
authorJohannes Berg <johannes@sipsolutions.net>
Fri, 27 Apr 2007 03:45:47 +0000 (20:45 -0700)
committerDavid S. Miller <davem@davemloft.net>
Fri, 27 Apr 2007 03:45:47 +0000 (20:45 -0700)
This patch makes the code in wireless_process_ioctl somewhat more
readable.

Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/wireless/wext.c

index dabc645..adcb083 100644 (file)
@@ -1035,53 +1035,31 @@ static int wireless_process_ioctl(struct ifreq *ifr, unsigned int cmd)
        /* A bunch of special cases, then the generic case...
         * Note that 'cmd' is already filtered in dev_ioctl() with
         * (cmd >= SIOCIWFIRST && cmd <= SIOCIWLAST) */
-       switch (cmd) {
-       case SIOCGIWSTATS:
-               /* Get Wireless Stats */
-               return ioctl_standard_call(dev,
-                                          ifr,
-                                          cmd,
+       if (cmd == SIOCGIWSTATS)
+               return ioctl_standard_call(dev, ifr, cmd,
                                           &iw_handler_get_iwstats);
 
-       case SIOCGIWPRIV:
-               /* Check if we have some wireless handlers defined */
-               if (dev->wireless_handlers != NULL) {
-                       /* We export to user space the definition of
-                        * the private handler ourselves */
-                       return ioctl_standard_call(dev,
-                                                  ifr,
-                                                  cmd,
-                                                  &iw_handler_get_private);
-               }
-               // ## Fall-through for old API ##
-       default:
-               /* Generic IOCTL */
-               /* Basic check */
-               if (!netif_device_present(dev))
-                       return -ENODEV;
-               /* New driver API : try to find the handler */
-               handler = get_handler(dev, cmd);
-               if (handler != NULL) {
-                       /* Standard and private are not the same */
-                       if (cmd < SIOCIWFIRSTPRIV)
-                               return ioctl_standard_call(dev,
-                                                          ifr,
-                                                          cmd,
-                                                          handler);
-                       else
-                               return ioctl_private_call(dev,
-                                                         ifr,
-                                                         cmd,
-                                                         handler);
-               }
-               /* Old driver API : call driver ioctl handler */
-               if (dev->do_ioctl) {
-                       return dev->do_ioctl(dev, ifr, cmd);
-               }
-               return -EOPNOTSUPP;
+       if (cmd == SIOCGIWPRIV && dev->wireless_handlers)
+               return ioctl_standard_call(dev, ifr, cmd,
+                                          &iw_handler_get_private);
+
+       /* Basic check */
+       if (!netif_device_present(dev))
+               return -ENODEV;
+
+       /* New driver API : try to find the handler */
+       handler = get_handler(dev, cmd);
+       if (handler) {
+               /* Standard and private are not the same */
+               if (cmd < SIOCIWFIRSTPRIV)
+                       return ioctl_standard_call(dev, ifr, cmd, handler);
+               else
+                       return ioctl_private_call(dev, ifr, cmd, handler);
        }
-       /* Not reached */
-       return -EINVAL;
+       /* Old driver API : call driver ioctl handler */
+       if (dev->do_ioctl)
+               return dev->do_ioctl(dev, ifr, cmd);
+       return -EOPNOTSUPP;
 }
 
 /* entry point from dev ioctl */
@@ -1093,9 +1071,10 @@ int wext_handle_ioctl(struct ifreq *ifr, unsigned int cmd,
        /* If command is `set a parameter', or
         * `get the encoding parameters', check if
         * the user has the right to do it */
-       if (IW_IS_SET(cmd) || cmd == SIOCGIWENCODE || cmd == SIOCGIWENCODEEXT)
-               if (!capable(CAP_NET_ADMIN))
-                       return -EPERM;
+       if ((IW_IS_SET(cmd) || cmd == SIOCGIWENCODE || cmd == SIOCGIWENCODEEXT)
+           && !capable(CAP_NET_ADMIN))
+               return -EPERM;
+
        dev_load(ifr->ifr_name);
        rtnl_lock();
        ret = wireless_process_ioctl(ifr, cmd);