Skip to content

Commit b204ba7

Browse files
authored
Create a copy of argv (#123)
1 parent 0c62464 commit b204ba7

File tree

2 files changed

+26
-6
lines changed

2 files changed

+26
-6
lines changed

src/bare.c

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,15 @@ int
2929
bare_setup(uv_loop_t *loop, js_platform_t *platform, js_env_t **env, int argc, const char *argv[], const bare_options_t *options, bare_t **result) {
3030
int err;
3131

32-
bare_t *bare = malloc(sizeof(bare_t));
32+
size_t len = sizeof(bare_t);
33+
34+
len += (size_t) argc * sizeof(char *);
35+
36+
for (int i = 0; i < argc; i++) {
37+
len += strlen(argv[i]) + 1 /* NULL */;
38+
}
39+
40+
bare_t *bare = malloc(len);
3341

3442
bare_process_t *process = &bare->process;
3543

@@ -38,11 +46,23 @@ bare_setup(uv_loop_t *loop, js_platform_t *platform, js_env_t **env, int argc, c
3846
process->options.memory_limit = bare__option(options, 0, memory_limit);
3947

4048
process->platform = platform;
41-
process->argc = argc;
42-
process->argv = argv;
4349

4450
memset(&process->callbacks, 0, sizeof(process->callbacks));
4551

52+
process->argc = argc;
53+
54+
char *storage = (char *) &process->argv[argc];
55+
56+
for (int i = 0; i < argc; i++) {
57+
size_t len = strlen(argv[i]) + 1 /* NULL */;
58+
59+
memcpy(storage, argv[i], len);
60+
61+
process->argv[i] = storage;
62+
63+
storage += len;
64+
}
65+
4666
bare_runtime_t *runtime = &process->runtime;
4767

4868
err = bare_runtime_setup(loop, process, runtime);

src/types.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,6 @@ struct bare_process_s {
5959

6060
js_platform_t *platform;
6161

62-
int argc;
63-
const char **argv;
64-
6562
struct {
6663
bare_before_exit_cb before_exit;
6764
void *before_exit_data;
@@ -84,6 +81,9 @@ struct bare_process_s {
8481
bare_thread_cb thread;
8582
void *thread_data;
8683
} callbacks;
84+
85+
int argc;
86+
char *argv[];
8787
};
8888

8989
struct bare_s {

0 commit comments

Comments
 (0)