ec/ecp_nistz256.c: harmonize with latest indent script.
[oweals/openssl.git] / crypto / bio / bss_file.c
index 8bfa0bcd97d7a2a9052f4f63d1a9860f92a3cf53..01df9702d6f76f8c91dda87112a2a12ff319a226 100644 (file)
@@ -56,7 +56,7 @@
  * [including the GNU Public Licence.]
  */
 
-/*
+/*-
  * 03-Dec-1997 rdenny@dc3.com  Fix bug preventing use of stdin/stdout
  *             with binary data (e.g. asn1parse -inform DER < xxx) under
  *             Windows
 
 #if !defined(OPENSSL_NO_STDIO)
 
-static int MS_CALLBACK file_write(BIO *h, const char *buf, int num);
-static int MS_CALLBACK file_read(BIO *h, char *buf, int size);
-static int MS_CALLBACK file_puts(BIO *h, const char *str);
-static int MS_CALLBACK file_gets(BIO *h, char *str, int size);
-static long MS_CALLBACK file_ctrl(BIO *h, int cmd, long arg1, void *arg2);
-static int MS_CALLBACK file_new(BIO *h);
-static int MS_CALLBACK file_free(BIO *data);
+static int file_write(BIO *h, const char *buf, int num);
+static int file_read(BIO *h, char *buf, int size);
+static int file_puts(BIO *h, const char *str);
+static int file_gets(BIO *h, char *str, int size);
+static long file_ctrl(BIO *h, int cmd, long arg1, void *arg2);
+static int file_new(BIO *h);
+static int file_free(BIO *data);
 static BIO_METHOD methods_filep=
        {
        BIO_TYPE_FILE,
@@ -123,6 +123,7 @@ BIO *BIO_new_file(const char *filename, const char *mode)
 
 #if defined(_WIN32) && defined(CP_UTF8)
        int sz, len_0 = (int)strlen(filename)+1;
+       DWORD flags;
 
        /*
         * Basically there are three cases to cover: a) filename is
@@ -136,20 +137,30 @@ BIO *BIO_new_file(const char *filename, const char *mode)
         * ERROR_NO_UNICODE_TRANSLATION, in which case we fall
         * back to fopen...
         */
-       if ((sz=MultiByteToWideChar(CP_UTF8,MB_ERR_INVALID_CHARS,
+       if ((sz=MultiByteToWideChar(CP_UTF8,(flags=MB_ERR_INVALID_CHARS),
+                                       filename,len_0,NULL,0))>0 ||
+           (GetLastError()==ERROR_INVALID_FLAGS &&
+            (sz=MultiByteToWideChar(CP_UTF8,(flags=0),
                                        filename,len_0,NULL,0))>0)
+          )
                {
                WCHAR  wmode[8];
                WCHAR *wfilename = _alloca(sz*sizeof(WCHAR));
 
-               if (MultiByteToWideChar(CP_UTF8,MB_ERR_INVALID_CHARS,
+               if (MultiByteToWideChar(CP_UTF8,flags,
                                        filename,len_0,wfilename,sz) &&
                    MultiByteToWideChar(CP_UTF8,0,mode,strlen(mode)+1,
                                        wmode,sizeof(wmode)/sizeof(wmode[0])) &&
-                   (file=_wfopen(wfilename,wmode))==NULL && errno==ENOENT
-                  )    /* UTF-8 decode succeeded, but no file, filename
-                        * could still have been locale-ized... */
+                   (file=_wfopen(wfilename,wmode))==NULL &&
+                   (errno==ENOENT || errno==EBADF)
+                  )
+                       {
+                       /*
+                        * UTF-8 decode succeeded, but no file, filename
+                        * could still have been locale-ized...
+                        */
                        file = fopen(filename,mode);
+                       }
                }
        else if (GetLastError()==ERROR_NO_UNICODE_TRANSLATION)
                {
@@ -196,7 +207,7 @@ BIO_METHOD *BIO_s_file(void)
        return(&methods_filep);
        }
 
-static int MS_CALLBACK file_new(BIO *bi)
+static int file_new(BIO *bi)
        {
        bi->init=0;
        bi->num=0;
@@ -205,7 +216,7 @@ static int MS_CALLBACK file_new(BIO *bi)
        return(1);
        }
 
-static int MS_CALLBACK file_free(BIO *a)
+static int file_free(BIO *a)
        {
        if (a == NULL) return(0);
        if (a->shutdown)
@@ -224,7 +235,7 @@ static int MS_CALLBACK file_free(BIO *a)
        return(1);
        }
        
-static int MS_CALLBACK file_read(BIO *b, char *out, int outl)
+static int file_read(BIO *b, char *out, int outl)
        {
        int ret=0;
 
@@ -244,7 +255,7 @@ static int MS_CALLBACK file_read(BIO *b, char *out, int outl)
        return(ret);
        }
 
-static int MS_CALLBACK file_write(BIO *b, const char *in, int inl)
+static int file_write(BIO *b, const char *in, int inl)
        {
        int ret=0;
 
@@ -264,7 +275,7 @@ static int MS_CALLBACK file_write(BIO *b, const char *in, int inl)
        return(ret);
        }
 
-static long MS_CALLBACK file_ctrl(BIO *b, int cmd, long num, void *ptr)
+static long file_ctrl(BIO *b, int cmd, long num, void *ptr)
        {
        long ret=1;
        FILE *fp=(FILE *)b->ptr;
@@ -434,7 +445,7 @@ static long MS_CALLBACK file_ctrl(BIO *b, int cmd, long num, void *ptr)
        return(ret);
        }
 
-static int MS_CALLBACK file_gets(BIO *bp, char *buf, int size)
+static int file_gets(BIO *bp, char *buf, int size)
        {
        int ret=0;
 
@@ -455,7 +466,7 @@ static int MS_CALLBACK file_gets(BIO *bp, char *buf, int size)
        return(ret);
        }
 
-static int MS_CALLBACK file_puts(BIO *bp, const char *str)
+static int file_puts(BIO *bp, const char *str)
        {
        int n,ret;