bss_file.c: fix MSC 6.0 warning.
[openssl.git] / crypto / bio / bss_file.c
index ccc741556ea54aa59151ad1c3094872f5b8abee4..ba4f8e9940300686b797d890007233b2364627ce 100644 (file)
 #include "bio_lcl.h"
 #include <openssl/err.h>
 
+#if defined(OPENSSL_SYS_NETWARE) && defined(NETWARE_CLIB)
+#include <nwfileio.h>
+#endif
+
 #if !defined(OPENSSL_NO_STDIO)
 
 static int MS_CALLBACK file_write(BIO *h, const char *buf, int num);
@@ -127,8 +131,11 @@ BIO *BIO_new_file(const char *filename, const char *mode)
                        BIOerr(BIO_F_BIO_NEW_FILE,ERR_R_SYS_LIB);
                return(NULL);
                }
-       if ((ret=BIO_new(BIO_s_file_internal())) == NULL)
+       if ((ret=BIO_new(BIO_s_file())) == NULL)
+               {
+               fclose(file);
                return(NULL);
+               }
 
        BIO_clear_flags(ret,BIO_FLAGS_UPLINK); /* we did fopen -> we disengage UPLINK */
        BIO_set_fp(ret,file,BIO_CLOSE);
@@ -265,26 +272,25 @@ static long MS_CALLBACK file_ctrl(BIO *b, int cmd, long num, void *ptr)
                        BIO_clear_flags(b,BIO_FLAGS_UPLINK);
 #endif
 #endif
-#ifdef UP_fsetmode
+#ifdef UP_fsetmod
                if (b->flags&BIO_FLAGS_UPLINK)
-                       UP_fsetmode(b->ptr,num&BIO_FP_TEXT?'t':'b');
+                       UP_fsetmod(b->ptr,(char)((num&BIO_FP_TEXT)?'t':'b'));
                else
 #endif
                {
 #if defined(OPENSSL_SYS_WINDOWS)
-               int fd = fileno((FILE*)ptr);
+               int fd = _fileno((FILE*)ptr);
                if (num & BIO_FP_TEXT)
                        _setmode(fd,_O_TEXT);
                else
                        _setmode(fd,_O_BINARY);
 #elif defined(OPENSSL_SYS_NETWARE) && defined(NETWARE_CLIB)
                int fd = fileno((FILE*)ptr);
-         /* Under CLib there are differences in file modes
-         */
+               /* Under CLib there are differences in file modes */
                if (num & BIO_FP_TEXT)
-                       _setmode(fd,O_TEXT);
+                       setmode(fd,O_TEXT);
                else
-                       _setmode(fd,O_BINARY);
+                       setmode(fd,O_BINARY);
 #elif defined(OPENSSL_SYS_MSDOS)
                int fd = fileno((FILE*)ptr);
                /* Set correct text/binary mode */
@@ -301,7 +307,7 @@ static long MS_CALLBACK file_ctrl(BIO *b, int cmd, long num, void *ptr)
                        else
                                _setmode(fd,_O_BINARY);
                        }
-#elif defined(OPENSSL_SYS_OS2)
+#elif defined(OPENSSL_SYS_OS2) || defined(OPENSSL_SYS_WIN32_CYGWIN)
                int fd = fileno((FILE*)ptr);
                if (num & BIO_FP_TEXT)
                        setmode(fd, O_TEXT);
@@ -396,9 +402,19 @@ static int MS_CALLBACK file_gets(BIO *bp, char *buf, int size)
        int ret=0;
 
        buf[0]='\0';
-       fgets(buf,size,(FILE *)bp->ptr);
+       if (bp->flags&BIO_FLAGS_UPLINK)
+               {
+               if (!UP_fgets(buf,size,bp->ptr))
+                       goto err;
+               }
+       else
+               {
+               if (!fgets(buf,size,(FILE *)bp->ptr))
+                       goto err;
+               }
        if (buf[0] != '\0')
                ret=strlen(buf);
+       err:
        return(ret);
        }