Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
小白菜888
Obs Studio
提交
f52d8bdd
O
Obs Studio
项目概览
小白菜888
/
Obs Studio
通知
4
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
Obs Studio
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
f52d8bdd
编写于
3月 30, 2019
作者:
R
Richard Stanway
提交者:
jp9000
4月 19, 2019
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
libobs: Allow Win32 pipes to pass STDERR for logging of errors
上级
90df9ea2
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
49 addition
and
3 deletion
+49
-3
libobs/util/pipe-posix.c
libobs/util/pipe-posix.c
+9
-0
libobs/util/pipe-windows.c
libobs/util/pipe-windows.c
+38
-3
libobs/util/pipe.h
libobs/util/pipe.h
+2
-0
未找到文件。
libobs/util/pipe-posix.c
浏览文件 @
f52d8bdd
...
...
@@ -73,6 +73,15 @@ size_t os_process_pipe_read(os_process_pipe_t *pp, uint8_t *data, size_t len)
return
fread
(
data
,
1
,
len
,
pp
->
file
);
}
size_t
os_process_pipe_read_err
(
os_process_pipe_t
*
pp
,
uint8_t
*
data
,
size_t
len
)
{
/* XXX: unsupported on posix */
UNUSED_PARAMETER
(
pp
);
UNUSED_PARAMETER
(
data
);
UNUSED_PARAMETER
(
len
);
return
0
;
}
size_t
os_process_pipe_write
(
os_process_pipe_t
*
pp
,
const
uint8_t
*
data
,
size_t
len
)
{
...
...
libobs/util/pipe-windows.c
浏览文件 @
f52d8bdd
...
...
@@ -24,6 +24,7 @@
struct
os_process_pipe
{
bool
read_pipe
;
HANDLE
handle
;
HANDLE
handle_err
;
HANDLE
process
;
};
...
...
@@ -42,7 +43,7 @@ static bool create_pipe(HANDLE *input, HANDLE *output)
}
static
inline
bool
create_process
(
const
char
*
cmd_line
,
HANDLE
stdin_handle
,
HANDLE
stdout_handle
,
HANDLE
*
process
)
HANDLE
stdout_handle
,
HANDLE
stderr_handle
,
HANDLE
*
process
)
{
PROCESS_INFORMATION
pi
=
{
0
};
wchar_t
*
cmd_line_w
=
NULL
;
...
...
@@ -53,6 +54,7 @@ static inline bool create_process(const char *cmd_line, HANDLE stdin_handle,
si
.
dwFlags
=
STARTF_USESTDHANDLES
|
STARTF_FORCEOFFFEEDBACK
;
si
.
hStdInput
=
stdin_handle
;
si
.
hStdOutput
=
stdout_handle
;
si
.
hStdError
=
stderr_handle
;
os_utf8_to_wcs_ptr
(
cmd_line
,
0
,
&
cmd_line_w
);
if
(
cmd_line_w
)
{
...
...
@@ -77,6 +79,7 @@ os_process_pipe_t *os_process_pipe_create(const char *cmd_line,
bool
read_pipe
;
HANDLE
process
;
HANDLE
output
;
HANDLE
err_input
,
err_output
;
HANDLE
input
;
bool
success
;
...
...
@@ -90,26 +93,38 @@ os_process_pipe_t *os_process_pipe_create(const char *cmd_line,
return
NULL
;
}
if
(
!
create_pipe
(
&
err_input
,
&
err_output
))
{
return
NULL
;
}
read_pipe
=
*
type
==
'r'
;
success
=
!!
SetHandleInformation
(
read_pipe
?
input
:
output
,
HANDLE_FLAG_INHERIT
,
false
);
HANDLE_FLAG_INHERIT
,
false
);
if
(
!
success
)
{
goto
error
;
}
success
=
!!
SetHandleInformation
(
err_input
,
HANDLE_FLAG_INHERIT
,
false
);
if
(
!
success
)
{
goto
error
;
}
success
=
create_process
(
cmd_line
,
read_pipe
?
NULL
:
input
,
read_pipe
?
output
:
NULL
,
&
process
);
read_pipe
?
output
:
NULL
,
err_output
,
&
process
);
if
(
!
success
)
{
goto
error
;
}
pp
=
bmalloc
(
sizeof
(
*
pp
));
pp
->
handle
=
read_pipe
?
input
:
output
;
pp
->
read_pipe
=
read_pipe
;
pp
->
process
=
process
;
pp
->
handle_err
=
err_input
;
CloseHandle
(
read_pipe
?
output
:
input
);
CloseHandle
(
err_output
);
return
pp
;
error:
...
...
@@ -126,6 +141,7 @@ int os_process_pipe_destroy(os_process_pipe_t *pp)
DWORD
code
;
CloseHandle
(
pp
->
handle
);
CloseHandle
(
pp
->
handle_err
);
WaitForSingleObject
(
pp
->
process
,
INFINITE
);
if
(
GetExitCodeProcess
(
pp
->
process
,
&
code
))
...
...
@@ -158,6 +174,25 @@ size_t os_process_pipe_read(os_process_pipe_t *pp, uint8_t *data, size_t len)
return
0
;
}
size_t
os_process_pipe_read_err
(
os_process_pipe_t
*
pp
,
uint8_t
*
data
,
size_t
len
)
{
DWORD
bytes_read
;
bool
success
;
if
(
!
pp
||
!
pp
->
handle_err
)
{
return
0
;
}
success
=
!!
ReadFile
(
pp
->
handle_err
,
data
,
(
DWORD
)
len
,
&
bytes_read
,
NULL
);
if
(
success
&&
bytes_read
)
{
return
bytes_read
;
}
else
bytes_read
=
GetLastError
();
return
0
;
}
size_t
os_process_pipe_write
(
os_process_pipe_t
*
pp
,
const
uint8_t
*
data
,
size_t
len
)
{
...
...
libobs/util/pipe.h
浏览文件 @
f52d8bdd
...
...
@@ -27,5 +27,7 @@ EXPORT int os_process_pipe_destroy(os_process_pipe_t *pp);
EXPORT
size_t
os_process_pipe_read
(
os_process_pipe_t
*
pp
,
uint8_t
*
data
,
size_t
len
);
EXPORT
size_t
os_process_pipe_read_err
(
os_process_pipe_t
*
pp
,
uint8_t
*
data
,
size_t
len
);
EXPORT
size_t
os_process_pipe_write
(
os_process_pipe_t
*
pp
,
const
uint8_t
*
data
,
size_t
len
);
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录