Increase iwlist buffer size
authorHamish Guthrie <hcg@openwrt.org>
Thu, 19 Jul 2012 08:36:11 +0000 (08:36 +0000)
committerHamish Guthrie <hcg@openwrt.org>
Thu, 19 Jul 2012 08:36:11 +0000 (08:36 +0000)
SVN-Revision: 32777

package/wireless-tools/Makefile
package/wireless-tools/patches/004-increase_iwlist_buffer.patch [new file with mode: 0644]

index 31047c4c672cb3233b873c1bae7804c5a62e4159..d553d4b17675a324e83889faab2b454e849fe9ee 100644 (file)
@@ -10,7 +10,7 @@ include $(TOPDIR)/rules.mk
 PKG_NAME:=wireless-tools
 PKG_VERSION:=29
 PKG_MINOR:=
-PKG_RELEASE:=4
+PKG_RELEASE:=5
 
 PKG_SOURCE:=wireless_tools.$(PKG_VERSION)$(PKG_MINOR).tar.gz
 PKG_SOURCE_URL:=http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux
diff --git a/package/wireless-tools/patches/004-increase_iwlist_buffer.patch b/package/wireless-tools/patches/004-increase_iwlist_buffer.patch
new file mode 100644 (file)
index 0000000..f2fdb12
--- /dev/null
@@ -0,0 +1,46 @@
+--- a/iwlist.c
++++ b/iwlist.c
+@@ -792,7 +792,8 @@ print_scanning_info(int            skfd,
+         if(iw_get_ext(skfd, ifname, SIOCGIWSCAN, &wrq) < 0)
+           {
+             /* Check if buffer was too small (WE-17 only) */
+-            if((errno == E2BIG) && (range.we_version_compiled > 16))
++            if((errno == E2BIG) && (range.we_version_compiled > 16)
++               && (buflen < 0xFFFF))
+               {
+                 /* Some driver may return very large scan results, either
+                  * because there are many cells, or because they have many
+@@ -808,6 +809,10 @@ print_scanning_info(int           skfd,
+                 else
+                   buflen *= 2;
++                 /* wrq.u.data.length is 16 bits so max size is 65535 */
++                 if(buflen > 0xFFFF)
++                   buflen = 0xFFFF;
++
+                 /* Try again */
+                 goto realloc;
+               }
+@@ -2152,6 +2157,7 @@ main(int argc,
+   char **args;                        /* Command arguments */
+   int count;                  /* Number of arguments */
+   const iwlist_cmd *iwcmd;
++  int goterr = 0;
+   if(argc < 2)
+     iw_usage(1);
+@@ -2199,12 +2205,12 @@ main(int       argc,
+   /* do the actual work */
+   if (dev)
+-    (*iwcmd->fn)(skfd, dev, args, count);
++    goterr = (*iwcmd->fn)(skfd, dev, args, count);
+   else
+     iw_enum_devices(skfd, iwcmd->fn, args, count);
+   /* Close the socket. */
+   iw_sockets_close(skfd);
+-  return 0;
++  return goterr;
+ }