From 90dbd25097d7d4af0bea0cd9cab60d749ed0a6a2 Mon Sep 17 00:00:00 2001 From: Richard Levitte Date: Wed, 30 Mar 2016 08:32:19 +0200 Subject: [PATCH] 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 --- apps/apps.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/apps/apps.c b/apps/apps.c index 128f387593..e1241495ea 100644 --- a/apps/apps.c +++ b/apps/apps.c @@ -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 +#endif setbuf(fp, NULL); +#if defined(OPENSSL_SYS_VMS) && defined(__DECC) +# pragma environment restore +#endif } static const char *modestr(char mode, int format) -- 2.25.1