diff options
Diffstat (limited to 'src/lib/libcrypto/bio/bss_file.c')
-rw-r--r-- | src/lib/libcrypto/bio/bss_file.c | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/src/lib/libcrypto/bio/bss_file.c b/src/lib/libcrypto/bio/bss_file.c index e4e9df144c..0ca603ee0a 100644 --- a/src/lib/libcrypto/bio/bss_file.c +++ b/src/lib/libcrypto/bio/bss_file.c | |||
@@ -213,12 +213,29 @@ static long MS_CALLBACK file_ctrl(BIO *b, int cmd, long num, void *ptr) | |||
213 | b->shutdown=(int)num&BIO_CLOSE; | 213 | b->shutdown=(int)num&BIO_CLOSE; |
214 | b->ptr=(char *)ptr; | 214 | b->ptr=(char *)ptr; |
215 | b->init=1; | 215 | b->init=1; |
216 | #if defined(OPENSSL_SYS_MSDOS) || defined(OPENSSL_SYS_WINDOWS) | 216 | #if defined(OPENSSL_SYS_WINDOWS) |
217 | /* Set correct text/binary mode */ | ||
218 | if (num & BIO_FP_TEXT) | 217 | if (num & BIO_FP_TEXT) |
219 | _setmode(fileno((FILE *)ptr),_O_TEXT); | 218 | _setmode(fileno((FILE *)ptr),_O_TEXT); |
220 | else | 219 | else |
221 | _setmode(fileno((FILE *)ptr),_O_BINARY); | 220 | _setmode(fileno((FILE *)ptr),_O_BINARY); |
221 | #elif defined(OPENSSL_SYS_MSDOS) | ||
222 | { | ||
223 | int fd = fileno((FILE*)ptr); | ||
224 | /* Set correct text/binary mode */ | ||
225 | if (num & BIO_FP_TEXT) | ||
226 | _setmode(fd,_O_TEXT); | ||
227 | /* Dangerous to set stdin/stdout to raw (unless redirected) */ | ||
228 | else | ||
229 | { | ||
230 | if (fd == STDIN_FILENO || fd == STDOUT_FILENO) | ||
231 | { | ||
232 | if (isatty(fd) <= 0) | ||
233 | _setmode(fd,_O_BINARY); | ||
234 | } | ||
235 | else | ||
236 | _setmode(fd,_O_BINARY); | ||
237 | } | ||
238 | } | ||
222 | #elif defined(OPENSSL_SYS_OS2) | 239 | #elif defined(OPENSSL_SYS_OS2) |
223 | if (num & BIO_FP_TEXT) | 240 | if (num & BIO_FP_TEXT) |
224 | setmode(fileno((FILE *)ptr), O_TEXT); | 241 | setmode(fileno((FILE *)ptr), O_TEXT); |