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 a66600c1a3..6904b5c081 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); |
