Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Musl
提交
0b8b2645
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看板
体验新版 GitCode,发现更多精彩内容 >>
提交
0b8b2645
编写于
11月 02, 2022
作者:
Y
yaofeng wang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix code format
Signed-off-by:
N
yaofeng wang
<
wangyaofeng.wang@huawei.com
>
上级
c61e5844
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
87 addition
and
64 deletion
+87
-64
porting/linux/user/src/stdio/__fdopen.c
porting/linux/user/src/stdio/__fdopen.c
+87
-64
未找到文件。
porting/linux/user/src/stdio/__fdopen.c
浏览文件 @
0b8b2645
/* 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 "stdio_impl.h"
#include <stdlib.h>
#include <stdlib.h>
#include <sys/ioctl.h>
#include <sys/ioctl.h>
...
@@ -9,74 +23,83 @@
...
@@ -9,74 +23,83 @@
static
size_t
get_bufsize
(
int
fd
)
static
size_t
get_bufsize
(
int
fd
)
{
{
struct
stat
st
;
struct
stat
st
;
size_t
buf_size
=
0
;
size_t
buf_size
=
0
;
if
(
fstat
(
fd
,
&
st
)
<
0
)
{
if
(
fstat
(
fd
,
&
st
)
<
0
)
{
buf_size
=
BUFSIZ
;
buf_size
=
BUFSIZ
;
}
else
if
(
st
.
st_blksize
==
0
)
{
}
else
if
(
st
.
st_blksize
==
0
)
{
buf_size
=
BUFSIZ
;
buf_size
=
BUFSIZ
;
}
else
{
}
else
{
buf_size
=
st
.
st_blksize
;
buf_size
=
st
.
st_blksize
;
}
}
return
buf_size
;
return
buf_size
;
}
}
FILE
*
__fdopen
(
int
fd
,
const
char
*
mode
)
FILE
*
__fdopen
(
int
fd
,
const
char
*
mode
)
{
{
FILE
*
f
;
FILE
*
f
;
struct
winsize
wsz
;
struct
winsize
wsz
;
size_t
buf_size
=
0
;
size_t
buf_size
=
0
;
/* Check for valid initial mode character */
/* Check for valid initial mode character */
if
(
!
strchr
(
"rwa"
,
*
mode
))
{
if
(
!
strchr
(
"rwa"
,
*
mode
))
{
errno
=
EINVAL
;
errno
=
EINVAL
;
return
0
;
return
0
;
}
}
/* get buffer size via file stat */
/* get buffer size via file stat */
buf_size
=
get_bufsize
(
fd
);
buf_size
=
get_bufsize
(
fd
);
/* Allocate FILE+buffer or fail */
/* Allocate FILE+buffer or fail */
if
(
!
(
f
=
malloc
(
sizeof
*
f
+
UNGET
+
buf_size
)))
return
0
;
if
(
!
(
f
=
malloc
(
sizeof
*
f
+
UNGET
+
buf_size
)))
{
return
0
;
/* Zero-fill only the struct, not the buffer */
}
memset
(
f
,
0
,
sizeof
*
f
);
/* Zero-fill only the struct, not the buffer */
/* Impose mode restrictions */
memset
(
f
,
0
,
sizeof
*
f
);
if
(
!
strchr
(
mode
,
'+'
))
f
->
flags
=
(
*
mode
==
'r'
)
?
F_NOWR
:
F_NORD
;
/* Impose mode restrictions */
/* Apply close-on-exec flag */
if
(
!
strchr
(
mode
,
'+'
))
{
if
(
strchr
(
mode
,
'e'
))
__syscall
(
SYS_fcntl
,
fd
,
F_SETFD
,
FD_CLOEXEC
);
f
->
flags
=
(
*
mode
==
'r'
)
?
F_NOWR
:
F_NORD
;
}
/* Set append mode on fd if opened for append */
if
(
*
mode
==
'a'
)
{
/* Apply close-on-exec flag */
int
flags
=
__syscall
(
SYS_fcntl
,
fd
,
F_GETFL
);
if
(
strchr
(
mode
,
'e'
))
{
if
(
!
(
flags
&
O_APPEND
))
__syscall
(
SYS_fcntl
,
fd
,
F_SETFD
,
FD_CLOEXEC
);
__syscall
(
SYS_fcntl
,
fd
,
F_SETFL
,
flags
|
O_APPEND
);
}
f
->
flags
|=
F_APP
;
}
/* Set append mode on fd if opened for append */
if
(
*
mode
==
'a'
)
{
f
->
fd
=
fd
;
int
flags
=
__syscall
(
SYS_fcntl
,
fd
,
F_GETFL
);
f
->
buf
=
(
unsigned
char
*
)
f
+
sizeof
*
f
+
UNGET
;
if
(
!
(
flags
&
O_APPEND
))
f
->
buf_size
=
buf_size
;
__syscall
(
SYS_fcntl
,
fd
,
F_SETFL
,
flags
|
O_APPEND
);
f
->
flags
|=
F_APP
;
/* Activate line buffered mode for terminals */
}
f
->
lbf
=
EOF
;
if
(
!
(
f
->
flags
&
F_NOWR
)
&&
!
__syscall
(
SYS_ioctl
,
fd
,
TIOCGWINSZ
,
&
wsz
))
f
->
fd
=
fd
;
f
->
lbf
=
'\n'
;
f
->
buf
=
(
unsigned
char
*
)
f
+
sizeof
*
f
+
UNGET
;
f
->
buf_size
=
buf_size
;
/* Initialize op ptrs. No problem if some are unneeded. */
f
->
read
=
__stdio_read
;
/* Activate line buffered mode for terminals */
f
->
write
=
__stdio_write
;
f
->
lbf
=
EOF
;
f
->
seek
=
__stdio_seek
;
if
(
!
(
f
->
flags
&
F_NOWR
)
&&
!
__syscall
(
SYS_ioctl
,
fd
,
TIOCGWINSZ
,
&
wsz
))
{
f
->
close
=
__stdio_close
;
f
->
lbf
=
'\n'
;
}
if
(
!
libc
.
threaded
)
f
->
lock
=
-
1
;
/* Initialize op ptrs. No problem if some are unneeded. */
/* Add new FILE to open file list */
f
->
read
=
__stdio_read
;
return
__ofl_add
(
f
);
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
);
weak_alias
(
__fdopen
,
fdopen
);
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录