[PATCH] Add native Bluetooth support for Windows platforms

Lubomir I. Ivanov neolit123 at gmail.com
Fri Aug 21 01:42:38 PDT 2015


hello,

chiming in for a couple of comments.

On 21 August 2015 at 07:22, Thiago Macieira <thiago at macieira.org> wrote:
> On Wednesday 19 August 2015 00:57:20 Claudiu Olteanu wrote:

<snip>

>
>> I tried as well to replace the WSAStringToAddressA with
>> WSAStringToAddressW but I had to represent the
>> address as a wchar_t* and and when I wanted to use
>> mbstowcs_s for conversion (from const char* to wchar_t*)
>> the compiler couldn't find the declaration to the method
>> (even though I included the stdlib header). After some
>> failed attempts I gave up :).
> Like I said, never, ever use <wchar.h> functions. Those are braindead in
> design, at least compared to Qt's equivalents.
>
> Before I go into this, let me say that the patches are fine and Dirk can apply
> them as-is. There's no need to change further.

Mingw doesn't have an exact port of all of the _s functions in MSVC  -
some of them are present in stdlib_s.h, including mbstowcs_s.

i see it the following way - the "W" variants is only there for
compatibility with the rest of the WIN32.
the address itself *should be* ASCII-US, therefore the "W" API is not
needed here and WSAStringToAddressA/WSAStringToAddressA can be used
instead (?).

>
>
> With that now said, here's how you can improve. Your code is:
>
>> +       char *address = strdup(devaddr);
> [...]
>> +       if (WSAStringToAddressA(address,
>> +                               AF_BTH,
>> +                               NULL,
>> +                               (LPSOCKADDR) &socketBthAddress,
>> +                               &socketBthAddressBth
>> +                               ) != 0) {
>> +
>
> To use the W function:
>
>         QString address = QString::fromLatin1(devaddr);
>         if (WSAStringToAddressW(reinterpret_cast<wchar_t*>(address.utf16()),
>                 [...]
>
> This also solves the strdup() and free() calls. And if the line didn't get too
> long, you could do everything in one line.
>

i don't think WSAStringToAddressA will modify the input string unless
explicitly stated in the documentation.
the WIN32 API seems to be consistent in terms of input/output
ownership - i.e. "i will only modify the output targets you give me
and not touch your input targets".

i'm pretty sure this should work:
WSAStringToAddressA((char *)devaddr...

lubomir
--


More information about the subsurface mailing list