summaryrefslogtreecommitdiff
path: root/core/src/xmake/process/open.c
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/xmake/process/open.c')
-rw-r--r--core/src/xmake/process/open.c148
1 files changed, 63 insertions, 85 deletions
diff --git a/core/src/xmake/process/open.c b/core/src/xmake/process/open.c
index 48d85c1f3..669e90ff1 100644
--- a/core/src/xmake/process/open.c
+++ b/core/src/xmake/process/open.c
@@ -22,8 +22,8 @@
/* //////////////////////////////////////////////////////////////////////////////////////
* trace
*/
-#define TB_TRACE_MODULE_NAME "process.open"
-#define TB_TRACE_MODULE_DEBUG (0)
+#define TB_TRACE_MODULE_NAME "process.open"
+#define TB_TRACE_MODULE_DEBUG (0)
/* //////////////////////////////////////////////////////////////////////////////////////
* includes
@@ -41,38 +41,36 @@
* infile = "", inpipe = "", inpipe = "",
* envs = {"PATH=xxx", "XXX=yyy"}})
*/
-tb_int_t xm_process_open(lua_State* lua)
-{
- // check
+tb_int_t xm_process_open(lua_State *lua) {
tb_assert_and_check_return_val(lua, 0);
// get command
- size_t command_size = 0;
- tb_char_t const* command = luaL_checklstring(lua, 1, &command_size);
+ size_t command_size = 0;
+ tb_char_t const *command = luaL_checklstring(lua, 1, &command_size);
tb_check_return_val(command, 0);
// init attributes
- tb_process_attr_t attr = {0};
+ tb_process_attr_t attr = { 0 };
// get option arguments
- tb_size_t envn = 0;
- tb_char_t const* envs[1024] = {0};
- tb_char_t const* inpath = tb_null;
- tb_char_t const* outpath = tb_null;
- tb_char_t const* errpath = tb_null;
- xm_io_file_t* infile = tb_null;
- xm_io_file_t* outfile = tb_null;
- xm_io_file_t* errfile = tb_null;
- tb_pipe_file_ref_t inpipe = tb_null;
- tb_pipe_file_ref_t outpipe = tb_null;
- tb_pipe_file_ref_t errpipe = tb_null;
- if (lua_istable(lua, 2))
- {
+ tb_size_t envn = 0;
+ tb_char_t const *envs[1024] = { 0 };
+ tb_char_t const *inpath = tb_null;
+ tb_char_t const *outpath = tb_null;
+ tb_char_t const *errpath = tb_null;
+ xm_io_file_t *infile = tb_null;
+ xm_io_file_t *outfile = tb_null;
+ xm_io_file_t *errfile = tb_null;
+ tb_pipe_file_ref_t inpipe = tb_null;
+ tb_pipe_file_ref_t outpipe = tb_null;
+ tb_pipe_file_ref_t errpipe = tb_null;
+ if (lua_istable(lua, 2)) {
// is detached?
lua_pushstring(lua, "detach");
lua_gettable(lua, 2);
- if (lua_toboolean(lua, -1))
+ if (lua_toboolean(lua, -1)) {
attr.flags |= TB_PROCESS_FLAG_DETACH;
+ }
lua_pop(lua, 1);
// get curdir
@@ -100,35 +98,31 @@ tb_int_t xm_process_open(lua_State* lua)
lua_pop(lua, 1);
// get infile
- if (!inpath)
- {
+ if (!inpath) {
lua_pushstring(lua, "infile");
lua_gettable(lua, 3);
- infile = (xm_io_file_t*)lua_touserdata(lua, -1);
+ infile = (xm_io_file_t *)lua_touserdata(lua, -1);
lua_pop(lua, 1);
}
// get outfile
- if (!outpath)
- {
+ if (!outpath) {
lua_pushstring(lua, "outfile");
lua_gettable(lua, 3);
- outfile = (xm_io_file_t*)lua_touserdata(lua, -1);
+ outfile = (xm_io_file_t *)lua_touserdata(lua, -1);
lua_pop(lua, 1);
}
// get errfile
- if (!errpath)
- {
+ if (!errpath) {
lua_pushstring(lua, "errfile");
lua_gettable(lua, 3);
- errfile = (xm_io_file_t*)lua_touserdata(lua, -1);
+ errfile = (xm_io_file_t *)lua_touserdata(lua, -1);
lua_pop(lua, 1);
}
// get inpipe
- if (!inpath && !infile)
- {
+ if (!inpath && !infile) {
lua_pushstring(lua, "inpipe");
lua_gettable(lua, 3);
inpipe = (tb_pipe_file_ref_t)lua_touserdata(lua, -1);
@@ -136,8 +130,7 @@ tb_int_t xm_process_open(lua_State* lua)
}
// get outpipe
- if (!outpath && !outfile)
- {
+ if (!outpath && !outfile) {
lua_pushstring(lua, "outpipe");
lua_gettable(lua, 3);
outpipe = (tb_pipe_file_ref_t)lua_touserdata(lua, -1);
@@ -145,8 +138,7 @@ tb_int_t xm_process_open(lua_State* lua)
}
// get errpipe
- if (!errpath && !errfile)
- {
+ if (!errpath && !errfile) {
lua_pushstring(lua, "errpipe");
lua_gettable(lua, 3);
errpipe = (tb_pipe_file_ref_t)lua_touserdata(lua, -1);
@@ -156,36 +148,36 @@ tb_int_t xm_process_open(lua_State* lua)
// get environments
lua_pushstring(lua, "envs");
lua_gettable(lua, 2);
- if (lua_istable(lua, -1))
- {
+ if (lua_istable(lua, -1)) {
// get environment variables count
tb_size_t count = (tb_size_t)lua_objlen(lua, -1);
// get all passed environment variables
tb_size_t i;
- for (i = 0; i < count; i++)
- {
+ for (i = 0; i < count; i++) {
// get envs[i]
lua_pushinteger(lua, i + 1);
lua_gettable(lua, -2);
// is string?
- if (lua_isstring(lua, -1))
- {
+ if (lua_isstring(lua, -1)) {
// add this environment value
- if (envn + 1 < tb_arrayn(envs))
+ if (envn + 1 < tb_arrayn(envs)) {
envs[envn++] = lua_tostring(lua, -1);
- else
- {
+ } else {
// error
- lua_pushfstring(lua, "envs is too large(%d > %d) for process.openv", (tb_int_t)envn, tb_arrayn(envs) - 1);
+ lua_pushfstring(lua,
+ "envs is too large(%d > %d) for process.openv",
+ (tb_int_t)envn,
+ tb_arrayn(envs) - 1);
lua_error(lua);
}
- }
- else
- {
+ } else {
// error
- lua_pushfstring(lua, "invalid envs[%d] type(%s) for process.openv", (tb_int_t)i, luaL_typename(lua, -1));
+ lua_pushfstring(lua,
+ "invalid envs[%d] type(%s) for process.openv",
+ (tb_int_t)i,
+ luaL_typename(lua, -1));
lua_error(lua);
}
@@ -197,81 +189,67 @@ tb_int_t xm_process_open(lua_State* lua)
}
// redirect stdin?
- if (inpath)
- {
+ if (inpath) {
// redirect stdin to file
attr.in.path = inpath;
attr.inmode = TB_FILE_MODE_RO;
attr.intype = TB_PROCESS_REDIRECT_TYPE_FILEPATH;
- }
- else if (infile && xm_io_file_is_file(infile))
- {
+ } else if (infile && xm_io_file_is_file(infile)) {
tb_file_ref_t rawfile = tb_null;
- if (tb_stream_ctrl(infile->stream, TB_STREAM_CTRL_FILE_GET_FILE, &rawfile) && rawfile)
- {
+ if (tb_stream_ctrl(infile->stream, TB_STREAM_CTRL_FILE_GET_FILE, &rawfile) && rawfile) {
attr.in.file = rawfile;
attr.intype = TB_PROCESS_REDIRECT_TYPE_FILE;
}
- }
- else if (inpipe)
- {
+ } else if (inpipe) {
attr.in.pipe = inpipe;
attr.intype = TB_PROCESS_REDIRECT_TYPE_PIPE;
}
-
// redirect stdout?
- if (outpath)
- {
+ if (outpath) {
// redirect stdout to file
attr.out.path = outpath;
attr.outmode = TB_FILE_MODE_RW | TB_FILE_MODE_TRUNC | TB_FILE_MODE_CREAT;
attr.outtype = TB_PROCESS_REDIRECT_TYPE_FILEPATH;
- }
- else if (outfile && xm_io_file_is_file(outfile))
- {
+ } else if (outfile && xm_io_file_is_file(outfile)) {
tb_file_ref_t rawfile = tb_null;
- if (tb_stream_ctrl(outfile->stream, TB_STREAM_CTRL_FILE_GET_FILE, &rawfile) && rawfile)
- {
+ if (tb_stream_ctrl(outfile->stream, TB_STREAM_CTRL_FILE_GET_FILE, &rawfile) && rawfile) {
attr.out.file = rawfile;
attr.outtype = TB_PROCESS_REDIRECT_TYPE_FILE;
}
- }
- else if (outpipe)
- {
+ } else if (outpipe) {
attr.out.pipe = outpipe;
attr.outtype = TB_PROCESS_REDIRECT_TYPE_PIPE;
}
// redirect stderr?
- if (errpath)
- {
+ if (errpath) {
// redirect stderr to file
attr.err.path = errpath;
attr.errmode = TB_FILE_MODE_RW | TB_FILE_MODE_TRUNC | TB_FILE_MODE_CREAT;
attr.errtype = TB_PROCESS_REDIRECT_TYPE_FILEPATH;
- }
- else if (errfile && xm_io_file_is_file(errfile))
- {
+ } else if (errfile && xm_io_file_is_file(errfile)) {
tb_file_ref_t rawfile = tb_null;
- if (tb_stream_ctrl(errfile->stream, TB_STREAM_CTRL_FILE_GET_FILE, &rawfile) && rawfile)
- {
+ if (tb_stream_ctrl(errfile->stream, TB_STREAM_CTRL_FILE_GET_FILE, &rawfile) && rawfile) {
attr.err.file = rawfile;
attr.errtype = TB_PROCESS_REDIRECT_TYPE_FILE;
}
- }
- else if (errpipe)
- {
+ } else if (errpipe) {
attr.err.pipe = errpipe;
attr.errtype = TB_PROCESS_REDIRECT_TYPE_PIPE;
}
// set the new environments
- if (envn > 0) attr.envp = envs;
+ if (envn > 0) {
+ attr.envp = envs;
+ }
// init process
tb_process_ref_t process = (tb_process_ref_t)tb_process_init_cmd(command, &attr);
- if (process) xm_lua_pushpointer(lua, (tb_pointer_t)process);
- else lua_pushnil(lua);
+ if (process) {
+ xm_lua_pushpointer(lua, (tb_pointer_t)process);
+ } else {
+ lua_pushnil(lua);
+ }
return 1;
}