Re: master 094eb04: Fix MS-Windows build with mingw.org's MinGW

classic Classic list List threaded Threaded
6 messages Options
Reply | Threaded
Open this post in threaded view
|

Re: master 094eb04: Fix MS-Windows build with mingw.org's MinGW

Robert Pluim
Thanks for that Eli. Since this is expected to work on pre-Vista
versions of Windows, is the equivalent to the following hack needed in
the new network-interface-list:

            case MIB_IF_TYPE_ETHERNET:
              /* Windows before Vista reports wireless adapters as
                 Ethernet.  Work around by looking at the Description
                 string.  */
              if (strstr (adapter->Description, "Wireless "))
                {
                  ifmt_idx = WLAN;
                  if_num = wlan_count++;
                }
              else
                {
                  ifmt_idx = ETHERNET;
                  if_num = eth_count++;
                }

GetAdaptersAddresses returns wchar_t* for the description field, which
means (I hope), that thereʼs some api for converting it appropriately.

Robert

Reply | Threaded
Open this post in threaded view
|

Re: master 094eb04: Fix MS-Windows build with mingw.org's MinGW

Eli Zaretskii
> From: Robert Pluim <[hidden email]>
> Cc: Eli Zaretskii <[hidden email]>
> Date: Tue, 26 Nov 2019 19:25:54 +0100
>
> Thanks for that Eli. Since this is expected to work on pre-Vista
> versions of Windows, is the equivalent to the following hack needed in
> the new network-interface-list:
>
>    case MIB_IF_TYPE_ETHERNET:
>      /* Windows before Vista reports wireless adapters as
> Ethernet.  Work around by looking at the Description
> string.  */
>      if (strstr (adapter->Description, "Wireless "))
> {
>  ifmt_idx = WLAN;
>  if_num = wlan_count++;
> }
>      else
> {
>  ifmt_idx = ETHERNET;
>  if_num = eth_count++;
> }

I guess so.

> GetAdaptersAddresses returns wchar_t* for the description field, which
> means (I hope), that thereʼs some api for converting it appropriately.

We can use wcsstr instead.

Reply | Threaded
Open this post in threaded view
|

Re: master 094eb04: Fix MS-Windows build with mingw.org's MinGW

Eli Zaretskii
> Date: Tue, 26 Nov 2019 20:50:48 +0200
> From: Eli Zaretskii <[hidden email]>
> Cc: [hidden email]
>
> > GetAdaptersAddresses returns wchar_t* for the description field, which
> > means (I hope), that thereʼs some api for converting it appropriately.
>
> We can use wcsstr instead.

Alternatively, convert to ASCII with pWideCharToMultiByte (see
filename_to_ansi for an example), and then use strstr.

Reply | Threaded
Open this post in threaded view
|

Re: master 094eb04: Fix MS-Windows build with mingw.org's MinGW

Robert Pluim
>>>>> On Tue, 26 Nov 2019 21:33:21 +0200, Eli Zaretskii <[hidden email]> said:

    >> Date: Tue, 26 Nov 2019 20:50:48 +0200
    >> From: Eli Zaretskii <[hidden email]>
    >> Cc: [hidden email]
    >>
    >> > GetAdaptersAddresses returns wchar_t* for the description field, which
    >> > means (I hope), that thereʼs some api for converting it appropriately.
    >>
    >> We can use wcsstr instead.

    Eli> Alternatively, convert to ASCII with pWideCharToMultiByte (see
    Eli> filename_to_ansi for an example), and then use strstr.

Does the following work for you? I have neither a wireless card
nor a pre-Vista Windows install.

diff --git a/src/w32.c b/src/w32.c
index cb82d51fb9..c5d9a62925 100644
--- a/src/w32.c
+++ b/src/w32.c
@@ -9540,8 +9540,23 @@ network_interface_list (bool full, unsigned short match)
       switch (adapter->IfType)
         {
         case IF_TYPE_ETHERNET_CSMACD:
-          ifmt_idx = ETHERNET;
-          if_num = eth_count++;
+          /* Windows before Vista reports wireless adapters as
+             Ethernet.  Work around by looking at the Description
+             string.  */
+          {
+          char description[MAX_UTF8_PATH];
+          if (filename_from_utf16 (adapter->Description, description) == 0
+              && strstr (description, "Wireless "))
+            {
+              ifmt_idx = WLAN;
+              if_num = wlan_count++;
+            }
+          else
+            {
+              ifmt_idx = ETHERNET;
+              if_num = eth_count++;
+            }
+          }
           break;
         case IF_TYPE_ISO88025_TOKENRING:
           ifmt_idx = TOKENRING;

Reply | Threaded
Open this post in threaded view
|

Re: master 094eb04: Fix MS-Windows build with mingw.org's MinGW

Eli Zaretskii
> From: Robert Pluim <[hidden email]>
> Cc: [hidden email]
> Date: Wed, 27 Nov 2019 11:57:05 +0100
>
> Does the following work for you? I have neither a wireless card
> nor a pre-Vista Windows install.

I also have difficulty finding such a machine.  The code looks fine to
me, though, so I suggest you go ahead and push it, and I will try to
test when I have the opportunity.

Thanks.

Reply | Threaded
Open this post in threaded view
|

Re: master 094eb04: Fix MS-Windows build with mingw.org's MinGW

Robert Pluim
>>>>> On Wed, 27 Nov 2019 17:58:38 +0200, Eli Zaretskii <[hidden email]> said:

    >> From: Robert Pluim <[hidden email]>
    >> Cc: [hidden email]
    >> Date: Wed, 27 Nov 2019 11:57:05 +0100
    >>
    >> Does the following work for you? I have neither a wireless card
    >> nor a pre-Vista Windows install.

    Eli> I also have difficulty finding such a machine.  The code looks fine to
    Eli> me, though, so I suggest you go ahead and push it, and I will try to
    Eli> test when I have the opportunity.

OK, pushed as b05aa8d742

Thanks

Robert