File: main.c

package info (click to toggle)
emscripten 3.1.6~dfsg-5
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 114,112 kB
  • sloc: ansic: 583,052; cpp: 391,943; javascript: 79,361; python: 54,180; sh: 49,997; pascal: 4,658; makefile: 3,426; asm: 2,191; lisp: 1,869; ruby: 488; cs: 142
file content (42 lines) | stat: -rw-r--r-- 981 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
static int main_argc;
static char** main_argv;

IMPORT_IMPL(u32, Z_wasi_snapshot_preview1Z_args_sizes_getZ_iii, (u32 pargc, u32 pargv_buf_size), {
  wasm_i32_store(pargc, main_argc);
  u32 buf_size = 0;
  for (u32 i = 0; i < main_argc; i++) {
    buf_size += strlen(main_argv[i]) + 1;
  }
  wasm_i32_store(pargv_buf_size, buf_size);
  return 0;
});

IMPORT_IMPL(u32, Z_wasi_snapshot_preview1Z_args_getZ_iii, (u32 argv, u32 argv_buf), {
  u32 buf_size = 0;
  for (u32 i = 0; i < main_argc; i++) {
    u32 ptr = argv_buf + buf_size;
    wasm_i32_store(argv + i * 4, ptr);
    char* arg = main_argv[i];
    strcpy(MEMACCESS(ptr), arg);
    buf_size += strlen(arg) + 1;
  }
  return 0;
});

int main(int argc, char** argv) {
  main_argc = argc;
  main_argv = argv;

  init_fds();

  init();

  int trap_code;
  if ((trap_code = setjmp(g_jmp_buf))) {
    printf("[wasm trap %d, halting]\n", trap_code);
    return 1;
  } else {
    WASM_RT_ADD_PREFIX(Z__startZ_vv)();
  }
  return 0;
}