@@ -36,9 +36,20 @@ int _set_output_format(int format); // VS2013-
3636//extern const char* __acrt_iob_func;
3737extern const char * _nullfunc = 0 ;
3838
39- #pragma comment(linker, "/alternatename:__acrt_iob_func=_nullfunc")
40- #pragma comment(linker, "/alternatename:__iob_func=_nullfunc")
41- #pragma comment(linker, "/alternatename:_set_output_format=_nullfunc")
39+ #if defined _M_IX86
40+ #define C_PREFIX "_"
41+ #elif defined _M_X64 || defined _M_ARM || defined _M_ARM64
42+ #define C_PREFIX ""
43+ #else
44+ #error Unsupported architecture
45+ #endif
46+
47+ #define DECLARE_ALTERNATE_NAME (name , alternate_name ) \
48+ __pragma(comment(linker, "/alternatename:" C_PREFIX #name "=" C_PREFIX #alternate_name))
49+
50+ DECLARE_ALTERNATE_NAME (__acrt_iob_func , _nullfunc );
51+ DECLARE_ALTERNATE_NAME (__iob_func , _nullfunc );
52+ DECLARE_ALTERNATE_NAME (_set_output_format , _nullfunc );
4253
4354void init_msvc ()
4455{
@@ -65,25 +76,25 @@ void init_msvc()
6576// VS2015+ provides C99-conformant (v)snprintf functions, so weakly
6677// link to legacy _(v)snprintf (not C99-conformant!) for VS2013- only
6778
68- #pragma comment(linker, "/alternatename:snprintf= _snprintf")
69- #pragma comment(linker, "/alternatename:vsnprintf= _vsnprintf")
79+ DECLARE_ALTERNATE_NAME ( snprintf , _snprintf );
80+ DECLARE_ALTERNATE_NAME ( vsnprintf , _vsnprintf );
7081
7182// VS2013- implements these functions as macros, VS2015+ provides symbols
7283
73- #pragma comment(linker, "/alternatename:_fputc_nolock= _msvc_fputc_nolock")
74- #pragma comment(linker, "/alternatename:_fgetc_nolock= _msvc_fgetc_nolock")
75- #pragma comment(linker, "/alternatename:rewind= _msvc_rewind")
76- #pragma comment(linker, "/alternatename:clearerr= _msvc_clearerr")
77- #pragma comment(linker, "/alternatename:feof= _msvc_feof")
78- #pragma comment(linker, "/alternatename:ferror= _msvc_ferror")
79- #pragma comment(linker, "/alternatename:fileno= _msvc_fileno")
84+ DECLARE_ALTERNATE_NAME ( _fputc_nolock , _msvc_fputc_nolock );
85+ DECLARE_ALTERNATE_NAME ( _fgetc_nolock , _msvc_fgetc_nolock );
86+ DECLARE_ALTERNATE_NAME ( rewind , _msvc_rewind );
87+ DECLARE_ALTERNATE_NAME ( clearerr , _msvc_clearerr );
88+ DECLARE_ALTERNATE_NAME ( feof , _msvc_feof );
89+ DECLARE_ALTERNATE_NAME ( ferror , _msvc_ferror );
90+ DECLARE_ALTERNATE_NAME ( fileno , _msvc_fileno );
8091
8192// VS2013- helper functions
8293int _filbuf (FILE * fp );
8394int _flsbuf (int c , FILE * fp );
8495
85- #pragma comment(linker, "/alternatename:_filbuf= _nullfunc")
86- #pragma comment(linker, "/alternatename:_flsbuf= _nullfunc")
96+ DECLARE_ALTERNATE_NAME ( _filbuf , _nullfunc );
97+ DECLARE_ALTERNATE_NAME ( _flsbuf , _nullfunc );
8798
8899int _msvc_fputc_nolock (int c , FILE * fp )
89100{
0 commit comments