mirror of
https://github.com/Leonmmcoset/cleonos.git
synced 2026-04-24 11:14:01 +00:00
应用程序套件
This commit is contained in:
53
kit/runtime/runtime.c
Normal file
53
kit/runtime/runtime.c
Normal file
@@ -0,0 +1,53 @@
|
||||
#include <cleonos_syscall.h>
|
||||
|
||||
#define CLEONOS_RUNTIME_ARGV_MAX 24ULL
|
||||
#define CLEONOS_RUNTIME_ENVP_MAX 24ULL
|
||||
#define CLEONOS_RUNTIME_ITEM_MAX 128ULL
|
||||
|
||||
extern int cleonos_app_main(int argc, char **argv, char **envp);
|
||||
extern void cleonos_cmd_runtime_pre_main(char **envp) __attribute__((weak));
|
||||
|
||||
u64 _start(void) {
|
||||
static char argv_items[CLEONOS_RUNTIME_ARGV_MAX][CLEONOS_RUNTIME_ITEM_MAX];
|
||||
static char env_items[CLEONOS_RUNTIME_ENVP_MAX][CLEONOS_RUNTIME_ITEM_MAX];
|
||||
static char *argv_ptrs[CLEONOS_RUNTIME_ARGV_MAX + 1ULL];
|
||||
static char *env_ptrs[CLEONOS_RUNTIME_ENVP_MAX + 1ULL];
|
||||
u64 argc = 0ULL;
|
||||
u64 envc = 0ULL;
|
||||
u64 i;
|
||||
int code;
|
||||
|
||||
argc = cleonos_sys_proc_argc();
|
||||
envc = cleonos_sys_proc_envc();
|
||||
|
||||
if (argc > CLEONOS_RUNTIME_ARGV_MAX) {
|
||||
argc = CLEONOS_RUNTIME_ARGV_MAX;
|
||||
}
|
||||
|
||||
if (envc > CLEONOS_RUNTIME_ENVP_MAX) {
|
||||
envc = CLEONOS_RUNTIME_ENVP_MAX;
|
||||
}
|
||||
|
||||
for (i = 0ULL; i < argc; i++) {
|
||||
argv_items[i][0] = '\0';
|
||||
(void)cleonos_sys_proc_argv(i, argv_items[i], CLEONOS_RUNTIME_ITEM_MAX);
|
||||
argv_ptrs[i] = argv_items[i];
|
||||
}
|
||||
|
||||
argv_ptrs[argc] = (char *)0;
|
||||
|
||||
for (i = 0ULL; i < envc; i++) {
|
||||
env_items[i][0] = '\0';
|
||||
(void)cleonos_sys_proc_env(i, env_items[i], CLEONOS_RUNTIME_ITEM_MAX);
|
||||
env_ptrs[i] = env_items[i];
|
||||
}
|
||||
|
||||
env_ptrs[envc] = (char *)0;
|
||||
|
||||
if (cleonos_cmd_runtime_pre_main != (void (*)(char **))0) {
|
||||
cleonos_cmd_runtime_pre_main(env_ptrs);
|
||||
}
|
||||
|
||||
code = cleonos_app_main((int)argc, argv_ptrs, env_ptrs);
|
||||
return (u64)code;
|
||||
}
|
||||
Reference in New Issue
Block a user