Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Openssl
提交
ba9f2808
T
Third Party Openssl
项目概览
OpenHarmony
/
Third Party Openssl
大约 1 年 前同步成功
通知
9
Star
18
Fork
1
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
Third Party Openssl
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
ba9f2808
编写于
6月 07, 1999
作者:
B
Bodo Möller
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Use locking in a way that makes more sense.
上级
ce9449cf
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
45 addition
and
22 deletion
+45
-22
crypto/bio/b_sock.c
crypto/bio/b_sock.c
+45
-22
未找到文件。
crypto/bio/b_sock.c
浏览文件 @
ba9f2808
...
...
@@ -100,6 +100,8 @@ static struct hostent *ghbn_dup(struct hostent *a);
int
BIO_get_host_ip
(
const
char
*
str
,
unsigned
char
*
ip
)
{
int
i
;
int
err
=
1
;
int
locked
=
0
;
struct
hostent
*
he
;
i
=
get_ip
(
str
,
ip
);
...
...
@@ -107,32 +109,42 @@ int BIO_get_host_ip(const char *str, unsigned char *ip)
if
(
i
<
0
)
{
BIOerr
(
BIO_F_BIO_GET_HOST_IP
,
BIO_R_INVALID_IP_ADDRESS
);
ERR_add_error_data
(
2
,
"host="
,
str
);
return
(
0
);
goto
err
;
}
else
{
/* do a gethostbyname */
if
(
!
BIO_sock_init
())
return
(
0
);
/* do a gethostbyname */
if
(
!
BIO_sock_init
())
return
(
0
);
/* don't generate another error code here */
CRYPTO_w_lock
(
CRYPTO_LOCK_GETHOSTBYNAME
);
locked
=
1
;
he
=
BIO_gethostbyname
(
str
);
if
(
he
==
NULL
)
{
BIOerr
(
BIO_F_BIO_GET_HOST_IP
,
BIO_R_BAD_HOSTNAME_LOOKUP
);
ERR_add_error_data
(
2
,
"host="
,
str
);
return
(
0
);
goto
err
;
}
/* cast to short because of win16 winsock definition */
if
((
short
)
he
->
h_addrtype
!=
AF_INET
)
{
BIOerr
(
BIO_F_BIO_GET_HOST_IP
,
BIO_R_GETHOSTBYNAME_ADDR_IS_NOT_AF_INET
);
ERR_add_error_data
(
2
,
"host="
,
str
);
return
(
0
);
goto
err
;
}
for
(
i
=
0
;
i
<
4
;
i
++
)
ip
[
i
]
=
he
->
h_addr_list
[
0
][
i
];
err
=
0
;
err:
if
(
locked
)
CRYPTO_w_unlock
(
CRYPTO_LOCK_GETHOSTBYNAME
);
if
(
err
)
{
ERR_add_error_data
(
2
,
"host="
,
str
);
return
0
;
}
return
(
1
);
else
return
1
;
}
int
BIO_get_port
(
const
char
*
str
,
unsigned
short
*
port_ptr
)
...
...
@@ -327,7 +339,12 @@ struct hostent *BIO_gethostbyname(const char *name)
/* return(gethostbyname(name)); */
#if 0 /* It doesn't make sense to use locking here: The function interface
* is not thread-safe, because threads can never be sure when
* some other thread destroys the data they were given a pointer to.
*/
CRYPTO_w_lock(CRYPTO_LOCK_GETHOSTBYNAME);
#endif
j
=
strlen
(
name
);
if
(
j
<
128
)
{
...
...
@@ -357,7 +374,11 @@ struct hostent *BIO_gethostbyname(const char *name)
goto
end
;
if
(
j
>
128
)
/* too big to cache */
{
#if 0 /* If we were trying to make this function thread-safe (which
* is bound to fail), we'd have to give up in this case
* (or allocate more memory). */
ret = NULL;
#endif
goto
end
;
}
...
...
@@ -381,7 +402,9 @@ struct hostent *BIO_gethostbyname(const char *name)
ghbn_cache
[
i
].
order
=
BIO_ghbn_miss
+
BIO_ghbn_hits
;
}
end:
#if 0
CRYPTO_w_unlock(CRYPTO_LOCK_GETHOSTBYNAME);
#endif
return
(
ret
);
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录