X-Git-Url: https://git.openssl.org/?p=openssl.git;a=blobdiff_plain;f=e_os.h;h=c6c6082c83feb2da2499ca3972492af6fdbf7fd4;hp=01d7963ecc93019a7462436bd2519e752ac0c63d;hb=fe150ac25df9d15d149c796cc8a8435fa291dc5b;hpb=eef0c1f34c7b7d6a38e02f3294eb509aef081749 diff --git a/e_os.h b/e_os.h index 01d7963ecc..c6c6082c83 100644 --- a/e_os.h +++ b/e_os.h @@ -285,6 +285,7 @@ extern "C" { /* yes, they have to be #included prior */ # endif # include +# include # include # include # include @@ -300,13 +301,38 @@ static unsigned int _strlen31(const char *str) # endif # include # if defined(_MSC_VER) && _MSC_VER<=1200 && defined(_MT) && defined(isspace) - /* compensate for bug is VC6 ctype.h */ + /* compensate for bug in VC6 ctype.h */ # undef isspace # undef isdigit # undef isalnum # undef isupper # undef isxdigit # endif +# if defined(_MSC_VER) && !defined(_DLL) && defined(stdin) +# if _MSC_VER>=1300 +# undef stdin +# undef stdout +# undef stderr + FILE *__iob_func(); +# define stdin (&__iob_func()[0]) +# define stdout (&__iob_func()[1]) +# define stderr (&__iob_func()[2]) +# elif defined(I_CAN_LIVE_WITH_LNK4049) +# undef stdin +# undef stdout +# undef stderr + /* pre-1300 has __p__iob(), but it's available only in msvcrt.lib, + * or in other words with /MD. Declaring implicit import, i.e. + * with _imp_ prefix, works correctly with all compiler options, + * but without /MD results in LINK warning LNK4049: + * 'locally defined symbol "__iob" imported'. + */ + extern FILE *_imp___iob; +# define stdin (&_imp___iob[0]) +# define stdout (&_imp___iob[1]) +# define stderr (&_imp___iob[2]) +# endif +# endif # endif # include # include