Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Musl
提交
97c8bdd8
T
Third Party Musl
项目概览
OpenHarmony
/
Third Party Musl
10 个月 前同步成功
通知
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,体验更适合开发者的 AI 搜索 >>
提交
97c8bdd8
编写于
10月 18, 2012
作者:
R
Rich Felker
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix parent-memory-clobber in posix_spawn (environ)
上级
44eb4d8b
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
17 addition
and
9 deletion
+17
-9
src/process/execvp.c
src/process/execvp.c
+10
-3
src/process/posix_spawn.c
src/process/posix_spawn.c
+3
-4
src/process/posix_spawnp.c
src/process/posix_spawnp.c
+4
-2
未找到文件。
src/process/execvp.c
浏览文件 @
97c8bdd8
...
...
@@ -4,7 +4,9 @@
#include <errno.h>
#include <limits.h>
int
execvp
(
const
char
*
file
,
char
*
const
argv
[])
extern
char
**
environ
;
int
__execvpe
(
const
char
*
file
,
char
*
const
argv
[],
char
*
const
envp
[])
{
const
char
*
p
,
*
z
,
*
path
=
getenv
(
"PATH"
);
size_t
l
,
k
;
...
...
@@ -13,7 +15,7 @@ int execvp(const char *file, char *const argv[])
if
(
!*
file
)
return
-
1
;
if
(
strchr
(
file
,
'/'
))
return
execv
(
file
,
argv
);
return
execv
e
(
file
,
argv
,
envp
);
if
(
!
path
)
path
=
"/usr/local/bin:/bin:/usr/bin"
;
k
=
strnlen
(
file
,
NAME_MAX
+
1
);
...
...
@@ -34,9 +36,14 @@ int execvp(const char *file, char *const argv[])
memcpy
(
b
,
p
,
z
-
p
);
b
[
z
-
p
]
=
'/'
;
memcpy
(
b
+
(
z
-
p
)
+
(
z
>
p
),
file
,
k
+
1
);
execv
(
b
,
argv
);
execv
e
(
b
,
argv
,
envp
);
if
(
errno
!=
ENOENT
)
return
-
1
;
if
(
!*
z
++
)
break
;
}
return
-
1
;
}
int
execvp
(
const
char
*
file
,
char
*
const
argv
[])
{
return
__execvpe
(
file
,
argv
,
environ
);
}
src/process/posix_spawn.c
浏览文件 @
97c8bdd8
...
...
@@ -19,7 +19,7 @@ weak_alias(dummy_0, __release_ptc);
pid_t
__vfork
(
void
);
int
__posix_spawnx
(
pid_t
*
restrict
res
,
const
char
*
restrict
path
,
int
(
*
exec
)(
const
char
*
,
char
*
const
*
),
int
(
*
exec
)(
const
char
*
,
char
*
const
*
,
char
*
const
*
),
const
posix_spawn_file_actions_t
*
fa
,
const
posix_spawnattr_t
*
restrict
attr
,
char
*
const
argv
[
restrict
],
char
*
const
envp
[
restrict
])
...
...
@@ -95,8 +95,7 @@ int __posix_spawnx(pid_t *restrict res, const char *restrict path,
sigprocmask
(
SIG_SETMASK
,
(
attr
->
__flags
&
POSIX_SPAWN_SETSIGMASK
)
?
&
attr
->
__mask
:
&
oldmask
,
0
);
if
(
envp
)
environ
=
(
char
**
)
envp
;
exec
(
path
,
argv
);
exec
(
path
,
argv
,
envp
?
envp
:
environ
);
_exit
(
127
);
return
0
;
...
...
@@ -107,5 +106,5 @@ int posix_spawn(pid_t *restrict res, const char *restrict path,
const
posix_spawnattr_t
*
restrict
attr
,
char
*
const
argv
[
restrict
],
char
*
const
envp
[
restrict
])
{
return
__posix_spawnx
(
res
,
path
,
execv
,
fa
,
attr
,
argv
,
envp
);
return
__posix_spawnx
(
res
,
path
,
execv
e
,
fa
,
attr
,
argv
,
envp
);
}
src/process/posix_spawnp.c
浏览文件 @
97c8bdd8
#include <spawn.h>
#include <unistd.h>
int
__execvpe
(
const
char
*
,
char
*
const
*
,
char
*
const
*
);
int
__posix_spawnx
(
pid_t
*
restrict
,
const
char
*
restrict
,
int
(
*
)(
const
char
*
,
char
*
const
*
),
int
(
*
)(
const
char
*
,
char
*
const
*
,
char
*
const
*
),
const
posix_spawn_file_actions_t
*
,
const
posix_spawnattr_t
*
restrict
,
char
*
const
*
restrict
,
char
*
const
*
restrict
);
...
...
@@ -11,5 +13,5 @@ int posix_spawnp(pid_t *restrict res, const char *restrict file,
const
posix_spawnattr_t
*
restrict
attr
,
char
*
const
argv
[
restrict
],
char
*
const
envp
[
restrict
])
{
return
__posix_spawnx
(
res
,
file
,
execvp
,
fa
,
attr
,
argv
,
envp
);
return
__posix_spawnx
(
res
,
file
,
__execvpe
,
fa
,
attr
,
argv
,
envp
);
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录