Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
btwise
openssl
提交
09487816
O
openssl
项目概览
btwise
/
openssl
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
openssl
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
09487816
编写于
6月 21, 2016
作者:
A
Andy Polyakov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Move OS-specific fopen quirks to o_fopen.c.
Reviewed-by:
N
Richard Levitte
<
levitte@openssl.org
>
上级
eeac54ef
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
111 addition
and
85 deletion
+111
-85
crypto/bio/bss_file.c
crypto/bio/bss_file.c
+2
-83
crypto/build.info
crypto/build.info
+1
-1
crypto/include/internal/cryptlib.h
crypto/include/internal/cryptlib.h
+5
-1
crypto/o_fopen.c
crypto/o_fopen.c
+103
-0
未找到文件。
crypto/bio/bss_file.c
浏览文件 @
09487816
...
...
@@ -61,91 +61,10 @@ static const BIO_METHOD methods_filep = {
NULL
,
};
static
FILE
*
file_fopen
(
const
char
*
filename
,
const
char
*
mode
)
{
FILE
*
file
=
NULL
;
# 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
* 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
,
OSSL_NELEM
(
wmode
))
&&
(
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
)
{
file
=
fopen
(
filename
,
mode
);
}
# elif defined(__DJGPP__)
{
char
*
newname
=
NULL
;
if
(
!
HAS_LFN_SUPPORT
(
filename
))
{
char
*
iterator
;
char
lastchar
;
newname
=
OPENSSL_malloc
(
strlen
(
filename
)
+
1
);
if
(
newname
==
NULL
)
return
NULL
;
for
(
iterator
=
newname
,
lastchar
=
'\0'
;
*
filename
;
filename
++
,
iterator
++
)
{
if
(
lastchar
==
'/'
&&
filename
[
0
]
==
'.'
&&
filename
[
1
]
!=
'.'
&&
filename
[
1
]
!=
'/'
)
{
/* Leading dots are not permitted in plain DOS. */
*
iterator
=
'_'
;
}
else
{
*
iterator
=
*
filename
;
}
lastchar
=
*
filename
;
}
*
iterator
=
'\0'
;
filename
=
newname
;
}
file
=
fopen
(
filename
,
mode
);
OPENSSL_free
(
newname
);
}
# else
file
=
fopen
(
filename
,
mode
);
# endif
return
(
file
);
}
BIO
*
BIO_new_file
(
const
char
*
filename
,
const
char
*
mode
)
{
BIO
*
ret
;
FILE
*
file
=
file
_fopen
(
filename
,
mode
);
FILE
*
file
=
openssl
_fopen
(
filename
,
mode
);
int
fp_flags
=
BIO_CLOSE
;
if
(
strchr
(
mode
,
'b'
)
==
NULL
)
...
...
@@ -363,7 +282,7 @@ static long file_ctrl(BIO *b, int cmd, long num, void *ptr)
else
strcat
(
p
,
"t"
);
# endif
fp
=
file
_fopen
(
ptr
,
p
);
fp
=
openssl
_fopen
(
ptr
,
p
);
if
(
fp
==
NULL
)
{
SYSerr
(
SYS_F_FOPEN
,
get_last_sys_error
());
ERR_add_error_data
(
5
,
"fopen('"
,
ptr
,
"','"
,
p
,
"')"
);
...
...
crypto/build.info
浏览文件 @
09487816
...
...
@@ -2,7 +2,7 @@
LIBS=../libcrypto
SOURCE[../libcrypto]=\
cryptlib.c mem.c mem_dbg.c cversion.c ex_data.c cpt_err.c \
ebcdic.c uid.c o_time.c o_str.c o_dir.c \
ebcdic.c uid.c o_time.c o_str.c o_dir.c
o_fopen.c
\
threads_pthread.c threads_win.c threads_none.c \
o_init.c o_fips.c mem_sec.c init.c {- $target{cpuid_asm_src} -} \
{- $target{uplink_aux_src} -}
...
...
crypto/include/internal/cryptlib.h
浏览文件 @
09487816
...
...
@@ -25,7 +25,6 @@
# include <openssl/buffer.h>
# include <openssl/bio.h>
# include <openssl/err.h>
# include <openssl/opensslconf.h>
#ifdef __cplusplus
extern
"C"
{
...
...
@@ -69,6 +68,11 @@ extern int OPENSSL_NONPIC_relocated;
void
crypto_cleanup_all_ex_data_int
(
void
);
int
openssl_strerror_r
(
int
errnum
,
char
*
buf
,
size_t
buflen
);
# if !defined(OPENSSL_NO_STDIO)
FILE
*
openssl_fopen
(
const
char
*
filename
,
const
char
*
mode
);
# else
void
*
openssl_fopen
(
const
char
*
filename
,
const
char
*
mode
);
# endif
#ifdef __cplusplus
}
...
...
crypto/o_fopen.c
0 → 100644
浏览文件 @
09487816
/*
* Copyright 2016 The OpenSSL Project Authors. All Rights Reserved.
*
* Licensed under the OpenSSL license (the "License"). You may not use
* this file except in compliance with the License. You can obtain a copy
* in the file LICENSE in the source distribution or at
* https://www.openssl.org/source/license.html
*/
#include "internal/cryptlib.h"
#if !defined(OPENSSL_NO_STDIO)
# include <stdio.h>
FILE
*
openssl_fopen
(
const
char
*
filename
,
const
char
*
mode
)
{
FILE
*
file
=
NULL
;
# 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
* 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
,
OSSL_NELEM
(
wmode
))
&&
(
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
)
{
file
=
fopen
(
filename
,
mode
);
}
# elif defined(__DJGPP__)
{
char
*
newname
=
NULL
;
if
(
!
HAS_LFN_SUPPORT
(
filename
))
{
char
*
iterator
;
char
lastchar
;
newname
=
OPENSSL_malloc
(
strlen
(
filename
)
+
1
);
if
(
newname
==
NULL
)
return
NULL
;
for
(
iterator
=
newname
,
lastchar
=
'\0'
;
*
filename
;
filename
++
,
iterator
++
)
{
if
(
lastchar
==
'/'
&&
filename
[
0
]
==
'.'
&&
filename
[
1
]
!=
'.'
&&
filename
[
1
]
!=
'/'
)
{
/* Leading dots are not permitted in plain DOS. */
*
iterator
=
'_'
;
}
else
{
*
iterator
=
*
filename
;
}
lastchar
=
*
filename
;
}
*
iterator
=
'\0'
;
filename
=
newname
;
}
file
=
fopen
(
filename
,
mode
);
OPENSSL_free
(
newname
);
}
# else
file
=
fopen
(
filename
,
mode
);
# endif
return
file
;
}
#else
void
*
openssl_fopen
(
const
char
*
filename
,
const
char
*
mode
)
{
return
NULL
;
}
#endif
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录