gdb/ctf.c: Get rid of mkdir redefinition
authorPedro Alves <palves@redhat.com>
Thu, 17 Nov 2016 14:43:02 +0000 (14:43 +0000)
committerPedro Alves <palves@redhat.com>
Thu, 17 Nov 2016 14:43:02 +0000 (14:43 +0000)
Making GDB use gnulib's C++ namespace support shows this build error
on mingw:

 ../../src/gdb/ctf.c: In function 'void ctf_start(trace_file_writer*, const char*)':
 ../../src/gdb/ctf.c:309:46: error: no match for call to '(const gnulib::_gl_mkdir_wrapper) (const char*&)'
  #define mkdir(pathname, mode) mkdir (pathname)
       ^
 ../../src/gdb/ctf.c:327:15: note: in expansion of macro 'mkdir'
    if (gnulib::mkdir (dirname, hmode) && errno != EEXIST)
^
 ../../src/gdb/ctf.c:309:46: note: candidate: gnulib::_gl_mkdir_wrapper::type {aka int (*)(const char*, short unsigned int)} <conversion>
  #define mkdir(pathname, mode) mkdir (pathname)
       ^
 ../../src/gdb/ctf.c:327:15: note: in expansion of macro 'mkdir'
    if (gnulib::mkdir (dirname, hmode) && errno != EEXIST)
^
 ../../src/gdb/ctf.c:309:46: note:   candidate expects 3 arguments, 2 provided
  #define mkdir(pathname, mode) mkdir (pathname)
       ^
 ../../src/gdb/ctf.c:327:15: note: in expansion of macro 'mkdir'
    if (gnulib::mkdir (dirname, hmode) && errno != EEXIST)
^

The problem is the '#define mkdir ...'

Fortunately, we can just remove it, since gnulib's sys/stat.h
replacement already takes care of the Windows mkdir prototype quirk:

~~~
 /* mingw's _mkdir() function has 1 argument, but we pass 2 arguments.
    Additionally, it declares _mkdir (and depending on compile flags, an
    alias mkdir), only in the nonstandard includes <direct.h> and <io.h>,
    which are included above.  */
 # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__

 #  if !GNULIB_defined_rpl_mkdir
 static int
 rpl_mkdir (char const *name, mode_t mode)
 {
   return _mkdir (name);
 }
~~~

That's sys_stat.in.h, part of the sys_stat module, which we explictly
pull in nowadays.  It wasn't being pulled when this macro was added:

  https://sourceware.org/ml/gdb-patches/2013-03/msg00736.html

That patch was partially reverted meanwhile here:

  https://sourceware.org/ml/gdb-patches/2013-12/msg00023.html

But the mkdir macro had been left behind unnoticed.

gdb/ChangeLog:
2016-11-17  Pedro Alves  <palves@redhat.com>

* ctf.c [USE_WIN32API] (mkdir): Delete.

gdb/ChangeLog
gdb/ctf.c

index c4dccb8b488fddab27261b992f76418e9be0d2a6..aa454b822574f3086bb50529ca83b0ae6ca82d9d 100644 (file)
@@ -1,3 +1,7 @@
+2016-11-17  Pedro Alves  <palves@redhat.com>
+
+       * ctf.c [USE_WIN32API] (mkdir): Delete.
+
 2016-11-16  Pedro Alves  <palves@redhat.com>
 
        * ada-lang.c (ada_value_primitive_packed_val): Use unique_ptr and
index 7daa47e28a411400ad83db7f8d3f25afa3901e60..2091b8da4226bae5ac973debd2d1a8c6ce15a9de 100644 (file)
--- a/gdb/ctf.c
+++ b/gdb/ctf.c
@@ -304,11 +304,6 @@ ctf_target_save (struct trace_file_writer *self,
   return 0;
 }
 
-#ifdef USE_WIN32API
-#undef mkdir
-#define mkdir(pathname, mode) mkdir (pathname)
-#endif
-
 /* This is the implementation of trace_file_write_ops method
    start.  It creates the directory DIRNAME, metadata and datastream
    in the directory.  */