From 7c2683c40f745397e80b6df4edf8265ecb6fd194 Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Thu, 17 Nov 2016 14:43:02 +0000 Subject: [PATCH] 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)} #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 and , 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 * ctf.c [USE_WIN32API] (mkdir): Delete. --- gdb/ChangeLog | 4 ++++ gdb/ctf.c | 5 ----- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index c4dccb8..aa454b8 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,7 @@ +2016-11-17 Pedro Alves + + * ctf.c [USE_WIN32API] (mkdir): Delete. + 2016-11-16 Pedro Alves * ada-lang.c (ada_value_primitive_packed_val): Use unique_ptr and diff --git a/gdb/ctf.c b/gdb/ctf.c index 7daa47e..2091b8d 100644 --- 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. */ -- 2.7.4