This is the mail archive of the gdb-testers@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] gdb/ctf.c: Get rid of mkdir redefinition


*** TEST RESULTS FOR COMMIT 7c2683c40f745397e80b6df4edf8265ecb6fd194 ***

Author: Pedro Alves <palves@redhat.com>
Branch: master
Commit: 7c2683c40f745397e80b6df4edf8265ecb6fd194

gdb/ctf.c: Get rid of mkdir redefinition

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.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]