AIX fcntl.h redefines "open", which conflicts with g++ fstream header. This patch wraps fcntl.h to use aliases in the same way that stdio.h currently is wrapped.
Okay? Thanks, David * inclhack.def (AAB_aix_fcntl): New fix. * fixincl.x: Regenerate. * tests/base/fcntl.h [AAB_AIX_FCNTL_CHECK]: New. Index: inclhack.def =================================================================== --- inclhack.def (revision 191846) +++ inclhack.def (working copy) @@ -65,6 +65,45 @@ }; +/* On AIX when _LARGE_FILES is defined fcntl.h defines open to + * open64 and creat to creat64. This fixes fcntl.h to + * undef those defines and use __asm__ to alias the symbols if + * building with g++ and -D_LARGE_FILES + */ +fix = { + hackname = AAB_aix_fcntl; + files = fcntl.h; + select = "define open[ \t]open64"; + mach = "*-*-aix*"; + test-text = ''; /* no way to test */ + + c_fix = wrap; + + c_fix_arg = ""; + + c_fix_arg = <<- _EOArg_ + + #if defined __GNUG__ && defined _LARGE_FILES && defined __cplusplus + #define __need__aix_fcntl_h_fix + #ifdef __need__aix_fcntl_h_fix + #undef open + #undef creat + #undef openat + /* Alias the symbols using asm */ + extern "C" { + extern int open(const char *, int, ...) __asm__("open64"); + extern int creat(const char *, mode_t) __asm__("creat64"); + #if (_XOPEN_SOURCE >= 700) + extern int openat(int, const char *, int, ...) __asm__("open64at"); + #endif + } + #endif + #endif + + _EOArg_; +}; + + /* * On Mac OS 10.3.9, the 'long double' functions are available in * libSystem, but are not prototyped in math.h.