diff --git a/crypto/bio/file.c b/crypto/bio/file.c index 9e29b43c..b903bc28 100644 --- a/crypto/bio/file.c +++ b/crypto/bio/file.c @@ -87,47 +87,11 @@ #define BIO_FP_WRITE 0x04 #define BIO_FP_APPEND 0x08 -static FILE *open_file(const char *filename, const char *mode) { -#if defined(OPENSSL_WINDOWS) && defined(CP_UTF8) - int sz, len_0 = (int)strlen(filename) + 1; - DWORD flags; - - /* Basically there are three cases to cover: a) filename is pure ASCII - * string; b) actual UTF-8 encoded string and c) locale-ized string, i.e. one - * containing 8-bit characters that are meaningful in current system locale. - * If filename is pure ASCII or real UTF-8 encoded string, - * MultiByteToWideChar succeeds and _wfopen works. If filename is locale-ized - * string, chances are that MultiByteToWideChar fails reporting - * ERROR_NO_UNICODE_TRANSLATION, in which case we fall back to fopen... */ - 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, 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 || - errno == EBADF)) /* UTF-8 decode succeeded, but no file, filename - * could still have been locale-ized... */ - return fopen(filename, mode); - } else if (GetLastError() == ERROR_NO_UNICODE_TRANSLATION) { - return fopen(filename, mode); - } -#else - return fopen(filename, mode); -#endif -} - BIO *BIO_new_file(const char *filename, const char *mode) { BIO *ret; FILE *file; - file = open_file(filename, mode); + file = fopen(filename, mode); if (file == NULL) { OPENSSL_PUT_SYSTEM_ERROR(); @@ -256,7 +220,7 @@ static long file_ctrl(BIO *b, int cmd, long num, void *ptr) { ret = 0; break; } - fp = open_file(ptr, p); + fp = fopen(ptr, p); if (fp == NULL) { OPENSSL_PUT_SYSTEM_ERROR(); ERR_add_error_data(5, "fopen('", ptr, "','", p, "')");