[PATCH v2 1/5] Import "glob" and "getcwd" modules from gnulib
Sergio Durigan Junior
sergiodj@redhat.com
Wed Sep 20 20:30:00 GMT 2017
On Wednesday, September 20 2017, I wrote:
> On Wednesday, September 20 2017, Pedro Alves wrote:
>
>> On 09/20/2017 06:17 PM, Sergio Durigan Junior wrote:
>>> On Wednesday, September 20 2017, Pedro Alves wrote:
>>
>>>> --- a/gdb/ser-tcp.c
>>>> +++ b/gdb/ser-tcp.c
>>>> @@ -42,7 +42,6 @@
>>>> #ifndef ETIMEDOUT
>>>> #define ETIMEDOUT WSAETIMEDOUT
>>>> #endif
>>>> -#define close(fd) closesocket (fd)
>>>>
>>>> Are you sure that the gnulib code that makes close work
>>>> for sockets is enabled? I guess it will if WINDOWS_SOCKETS
>>>> is defined, but it wasn't obvious to me whether it'll end
>>>> up defined with the current set of modules.
>>>
>>> One of the dependencies of "getcwd" is the "close" module, and whenever
>>> I tried to compile this patch with mingw it would fail because of this
>>> re-definition of close made by ser-tcp.c. My first approach was to
>>> #undef close before ser-tcp.c redefined it, but then I decided to just
>>> use "close" from gnulib. I didn't know about this WINDOWS_SOCKETS
>>> requirement; maybe we can define it before the inclusion of <stdlib.h>?
>>> Or maybe choose the safe side and let ser-tcp.c redefine close as
>>> needed.
>>
>> I don't know much about WINDOWS_SOCKETS either. I just looked
>> at gnulib/lib/close.c, and found:
>>
>> ~~~
>> /* Override close() to call into other gnulib modules. */
>>
>> int
>> rpl_close (int fd)
>> {
>> #if WINDOWS_SOCKETS
>> int retval = execute_all_close_hooks (close_nothrow, fd);
>> #else
>> int retval = close_nothrow (fd);
>> #endif
>>
>> #if REPLACE_FCHDIR
>> if (retval >= 0)
>> _gl_unregister_fd (fd);
>> #endif
>>
>> return retval;
>> }
>> ~~~
>>
>>
>> and then figured out that there's a close_fd_maybe_socket
>> close hook implemented in lib/sockets.c.
>>
>> static int
>> close_fd_maybe_socket (const struct fd_hook *remaining_list,
>> gl_close_fn primary,
>> int fd)
>> {
>>
>> This is all wrapped in #ifdef WINDOWS_SOCKETS, hence the question.
>>
>> It should be easy for you to determine whether WINDOWS_SOCKETS
>> is defined in your mingw build, and thus whether all this code
>> is part of the build or not.
>
> I will do that and report back. Thanks,
WINDOWS_SOCKETS is not defined when building with the mingw compiler
from Fedora. This means that removing that "#define" was actually not
correct, because "close" will not work as expected even with gnulib.
My proposal is to define "close" as it was being defined before, but
actually "#undef" it if it's already defined by other headers, like:
#ifdef close
#undef close
#endif
#define close(fd) closesocket (fd)
Does that work for you?
--
Sergio
GPG key ID: 237A 54B1 0287 28BF 00EF 31F4 D0EB 7628 65FC 5E36
Please send encrypted e-mail if possible
http://sergiodj.net/
More information about the Gdb-patches
mailing list