Fix pointer size issue with setbuf() on VMS

setbuf() is only for 32-bit pointers.  If compiled with /POINTER_SIZE=64,
we get a nasty warning about possible loss of data.  However, since
the only pointer used in the call is a FILE *, and the C RTL shouldn't
give us a pointer above the first 4GB, it's safe to turn off the
warning for this call.

Reviewed-by: Andy Polyakov <>
Richard Levitte 2016-03-30 08:32:19 +02:00
parent fcd9c8c014
commit 90dbd25097
1 changed files with 14 additions and 0 deletions

View File

@ -2499,7 +2499,21 @@ BIO *dup_bio_err(int format)
void unbuffer(FILE *fp)
* On VMS, setbuf() will only take 32-bit pointers, and a compilation
* with /POINTER_SIZE=64 will give off a MAYLOSEDATA2 warning here.
* However, we trust that the C RTL will never give us a FILE pointer
* above the first 4 GB of memory, so we simply turn off the warning
* temporarily.
#if defined(OPENSSL_SYS_VMS) && defined(__DECC)
# pragma environment save
# pragma message disable maylosedata2
setbuf(fp, NULL);
#if defined(OPENSSL_SYS_VMS) && defined(__DECC)
# pragma environment restore
static const char *modestr(char mode, int format)