add chaos_calmer branch
[15.05/openwrt.git] / package / network / utils / wireless-tools / patches / 004-increase_iwlist_buffer.patch
1 --- a/iwlist.c
2 +++ b/iwlist.c
3 @@ -792,7 +792,8 @@ print_scanning_info(int             skfd,
4           if(iw_get_ext(skfd, ifname, SIOCGIWSCAN, &wrq) < 0)
5             {
6               /* Check if buffer was too small (WE-17 only) */
7 -             if((errno == E2BIG) && (range.we_version_compiled > 16))
8 +             if((errno == E2BIG) && (range.we_version_compiled > 16)
9 +                && (buflen < 0xFFFF))
10                 {
11                   /* Some driver may return very large scan results, either
12                    * because there are many cells, or because they have many
13 @@ -808,6 +809,10 @@ print_scanning_info(int            skfd,
14                   else
15                     buflen *= 2;
16  
17 +                 /* wrq.u.data.length is 16 bits so max size is 65535 */
18 +                 if(buflen > 0xFFFF)
19 +                   buflen = 0xFFFF;
20 +
21                   /* Try again */
22                   goto realloc;
23                 }
24 @@ -2152,6 +2157,7 @@ main(int  argc,
25    char **args;                 /* Command arguments */
26    int count;                   /* Number of arguments */
27    const iwlist_cmd *iwcmd;
28 +  int goterr = 0;
29  
30    if(argc < 2)
31      iw_usage(1);
32 @@ -2199,12 +2205,12 @@ main(int        argc,
33  
34    /* do the actual work */
35    if (dev)
36 -    (*iwcmd->fn)(skfd, dev, args, count);
37 +    goterr = (*iwcmd->fn)(skfd, dev, args, count);
38    else
39      iw_enum_devices(skfd, iwcmd->fn, args, count);
40  
41    /* Close the socket. */
42    iw_sockets_close(skfd);
43  
44 -  return 0;
45 +  return goterr;
46  }