summaryrefslogtreecommitdiff
path: root/core/src/xmake/process/openv.c
diff options
context:
space:
mode:
authorruki <[email protected]>2025-11-10 06:35:04 +0800
committerGitHub <[email protected]>2025-11-10 06:35:04 +0800
commit2b01e46fcf619aaecb8435b0fac975e3aff0587f (patch)
tree8f005a8dfc3272e9f027560e5e1b5881a7a8bc70 /core/src/xmake/process/openv.c
parenta1b0ec856e2c22aac84022feb05b6687912e3d6e (diff)
parent2c387895657ae13cd717d7f42f5baed5eb028a8e (diff)
Merge pull request #7008 from xmake-io/format
format code
Diffstat (limited to 'core/src/xmake/process/openv.c')
-rw-r--r--core/src/xmake/process/openv.c188
1 files changed, 84 insertions, 104 deletions
diff --git a/core/src/xmake/process/openv.c b/core/src/xmake/process/openv.c
index 24a8cc112..1b95c45fe 100644
--- a/core/src/xmake/process/openv.c
+++ b/core/src/xmake/process/openv.c
@@ -22,16 +22,17 @@
/* //////////////////////////////////////////////////////////////////////////////////////
* trace
*/
-#define TB_TRACE_MODULE_NAME "process.openv"
-#define TB_TRACE_MODULE_DEBUG (0)
+#define TB_TRACE_MODULE_NAME "process.openv"
+#define TB_TRACE_MODULE_DEBUG (0)
/* //////////////////////////////////////////////////////////////////////////////////////
* includes
*/
#include "prefix.h"
#include "../io/prefix.h"
-#if defined(TB_CONFIG_OS_MACOSX) || defined(TB_CONFIG_OS_LINUX) || defined(TB_CONFIG_OS_BSD) || defined(TB_CONFIG_OS_HAIKU) || defined(TB_COMPILER_IS_MINGW)
-# include <signal.h>
+#if defined(TB_CONFIG_OS_MACOSX) || defined(TB_CONFIG_OS_LINUX) || defined(TB_CONFIG_OS_BSD) || \
+ defined(TB_CONFIG_OS_HAIKU) || defined(TB_COMPILER_IS_MINGW)
+#include <signal.h>
#endif
/* //////////////////////////////////////////////////////////////////////////////////////
@@ -44,14 +45,11 @@
* infile = "", inpipe = "", inpipe = "",
* envs = {"PATH=xxx", "XXX=yyy"}})
*/
-tb_int_t xm_process_openv(lua_State* lua)
-{
- // check
+tb_int_t xm_process_openv(lua_State *lua) {
tb_assert_and_check_return_val(lua, 0);
// check argv
- if (!lua_istable(lua, 2))
- {
+ if (!lua_istable(lua, 2)) {
// error
lua_pushfstring(lua, "invalid argv type(%s) for process.openv", luaL_typename(lua, 2));
lua_error(lua);
@@ -59,7 +57,7 @@ tb_int_t xm_process_openv(lua_State* lua)
}
// get shellname
- tb_char_t const* shellname = lua_tostring(lua, 1);
+ tb_char_t const *shellname = lua_tostring(lua, 1);
tb_check_return_val(shellname, 0);
// get the arguments count
@@ -67,34 +65,29 @@ tb_int_t xm_process_openv(lua_State* lua)
tb_check_return_val(argn >= 0, 0);
// get arguments
- tb_size_t argi = 0;
- tb_char_t const** argv = tb_nalloc0_type(1 + argn + 1, tb_char_t const*);
+ tb_size_t argi = 0;
+ tb_char_t const **argv = tb_nalloc0_type(1 + argn + 1, tb_char_t const *);
tb_check_return_val(argv, 0);
// fill arguments
argv[0] = shellname;
- for (argi = 0; argi < argn; argi++)
- {
+ for (argi = 0; argi < argn; argi++) {
// get argv[i]
lua_pushinteger(lua, argi + 1);
lua_gettable(lua, 2);
// is string?
- if (lua_isstring(lua, -1))
- {
+ if (lua_isstring(lua, -1)) {
// pass this argument
argv[1 + argi] = lua_tostring(lua, -1);
}
// is path instance?
- else if (lua_istable(lua, -1))
- {
+ else if (lua_istable(lua, -1)) {
lua_pushstring(lua, "_STR");
lua_gettable(lua, -2);
argv[1 + argi] = lua_tostring(lua, -1);
lua_pop(lua, 1);
- }
- else
- {
+ } else {
// error
lua_pushfstring(lua, "invalid argv[%d] type(%s) for process.openv", (tb_int_t)argi, luaL_typename(lua, -1));
lua_error(lua);
@@ -105,35 +98,36 @@ tb_int_t xm_process_openv(lua_State* lua)
}
// init attributes
- tb_process_attr_t attr = {0};
+ tb_process_attr_t attr = { 0 };
// get option arguments
- tb_bool_t exclusive = tb_false;
- 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, 3))
- {
+ tb_bool_t exclusive = tb_false;
+ 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, 3)) {
// is detached?
lua_pushstring(lua, "detach");
lua_gettable(lua, 3);
- if (lua_toboolean(lua, -1))
+ if (lua_toboolean(lua, -1)) {
attr.flags |= TB_PROCESS_FLAG_DETACH;
+ }
lua_pop(lua, 1);
// is exclusive?
lua_pushstring(lua, "exclusive");
lua_gettable(lua, 3);
- if (lua_toboolean(lua, -1))
+ if (lua_toboolean(lua, -1)) {
exclusive = tb_true;
+ }
lua_pop(lua, 1);
// get curdir
@@ -161,35 +155,31 @@ tb_int_t xm_process_openv(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);
@@ -197,8 +187,7 @@ tb_int_t xm_process_openv(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);
@@ -206,8 +195,7 @@ tb_int_t xm_process_openv(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);
@@ -217,36 +205,36 @@ tb_int_t xm_process_openv(lua_State* lua)
// get environments
lua_pushstring(lua, "envs");
lua_gettable(lua, 3);
- 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);
}
@@ -258,96 +246,88 @@ tb_int_t xm_process_openv(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;
+ }
/* we need to ignore SIGINT and SIGQUIT if we enter exclusive mode
* @see https://github.com/xmake-io/xmake/discussions/2893
*/
#if defined(SIGINT)
- if (exclusive) signal(SIGINT, SIG_IGN);
+ if (exclusive) {
+ signal(SIGINT, SIG_IGN);
+ }
#endif
#if defined(SIGQUIT)
- if (exclusive) signal(SIGQUIT, SIG_IGN);
+ if (exclusive) {
+ signal(SIGQUIT, SIG_IGN);
+ }
#endif
// init process
tb_process_ref_t process = (tb_process_ref_t)tb_process_init(shellname, argv, &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);
+ }
// exit argv
- if (argv) tb_free(argv);
+ if (argv) {
+ tb_free(argv);
+ }
argv = tb_null;
- // ok
return 1;
}