Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Musl
提交
06588fcb
T
Third Party Musl
项目概览
OpenHarmony
/
Third Party Musl
1 年多 前同步成功
通知
37
Star
125
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
Third Party Musl
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
06588fcb
编写于
11月 07, 2022
作者:
O
openharmony_ci
提交者:
Gitee
11月 07, 2022
浏览文件
操作
浏览文件
下载
差异文件
!639 Pick !634:Optimize musl I/O function with st.st_blksize
Merge pull request !639 from Wang Yaofeng/1018a
上级
386333df
9cc66759
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
106 addition
and
0 deletion
+106
-0
musl_src.gni
musl_src.gni
+1
-0
porting/linux/user/src/stdio/__fdopen.c
porting/linux/user/src/stdio/__fdopen.c
+105
-0
未找到文件。
musl_src.gni
浏览文件 @
06588fcb
...
...
@@ -2124,6 +2124,7 @@ musl_src_porting_file = [
"src/ldso/arm/dlvsym.s",
"src/ldso/riscv64/dlvsym.s",
"src/ldso/x86_64/dlvsym.s",
"src/stdio/__fdopen.c",
]
musl_inc_hook_files = [
...
...
porting/linux/user/src/stdio/__fdopen.c
0 → 100644
浏览文件 @
06588fcb
/* Copyright (c) 2021-2022 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "stdio_impl.h"
#include <stdlib.h>
#include <sys/ioctl.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <string.h>
#include "libc.h"
static
size_t
get_bufsize
(
int
fd
)
{
struct
stat
st
;
size_t
buf_size
=
0
;
if
(
fstat
(
fd
,
&
st
)
<
0
)
{
buf_size
=
BUFSIZ
;
}
else
if
(
st
.
st_blksize
==
0
)
{
buf_size
=
BUFSIZ
;
}
else
{
buf_size
=
st
.
st_blksize
;
}
return
buf_size
;
}
FILE
*
__fdopen
(
int
fd
,
const
char
*
mode
)
{
FILE
*
f
;
struct
winsize
wsz
;
size_t
buf_size
=
0
;
/* Check for valid initial mode character */
if
(
!
strchr
(
"rwa"
,
*
mode
))
{
errno
=
EINVAL
;
return
0
;
}
/* get buffer size via file stat */
buf_size
=
get_bufsize
(
fd
);
/* Allocate FILE+buffer or fail */
if
(
!
(
f
=
malloc
(
sizeof
*
f
+
UNGET
+
buf_size
)))
{
return
0
;
}
/* Zero-fill only the struct, not the buffer */
memset
(
f
,
0
,
sizeof
*
f
);
/* Impose mode restrictions */
if
(
!
strchr
(
mode
,
'+'
))
{
f
->
flags
=
(
*
mode
==
'r'
)
?
F_NOWR
:
F_NORD
;
}
/* Apply close-on-exec flag */
if
(
strchr
(
mode
,
'e'
))
{
__syscall
(
SYS_fcntl
,
fd
,
F_SETFD
,
FD_CLOEXEC
);
}
/* Set append mode on fd if opened for append */
if
(
*
mode
==
'a'
)
{
int
flags
=
__syscall
(
SYS_fcntl
,
fd
,
F_GETFL
);
if
(
!
(
flags
&
O_APPEND
))
__syscall
(
SYS_fcntl
,
fd
,
F_SETFL
,
flags
|
O_APPEND
);
f
->
flags
|=
F_APP
;
}
f
->
fd
=
fd
;
f
->
buf
=
(
unsigned
char
*
)
f
+
sizeof
*
f
+
UNGET
;
f
->
buf_size
=
buf_size
;
/* Activate line buffered mode for terminals */
f
->
lbf
=
EOF
;
if
(
!
(
f
->
flags
&
F_NOWR
)
&&
!
__syscall
(
SYS_ioctl
,
fd
,
TIOCGWINSZ
,
&
wsz
))
{
f
->
lbf
=
'\n'
;
}
/* Initialize op ptrs. No problem if some are unneeded. */
f
->
read
=
__stdio_read
;
f
->
write
=
__stdio_write
;
f
->
seek
=
__stdio_seek
;
f
->
close
=
__stdio_close
;
if
(
!
libc
.
threaded
)
{
f
->
lock
=
-
1
;
}
/* Add new FILE to open file list */
return
__ofl_add
(
f
);
}
weak_alias
(
__fdopen
,
fdopen
);
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录