OLD | NEW |
1 /* Copyright (c) 2013 The Native Client Authors. All rights reserved. | 1 /* Copyright (c) 2013 The Native Client Authors. All rights reserved. |
2 * Use of this source code is governed by a BSD-style license that can be | 2 * Use of this source code is governed by a BSD-style license that can be |
3 * found in the LICENSE file. */ | 3 * found in the LICENSE file. */ |
4 | 4 |
5 #include <assert.h> | 5 #include <assert.h> |
6 #include <fcntl.h> | 6 #include <fcntl.h> |
7 #include <libtar.h> | |
8 #include <limits.h> | 7 #include <limits.h> |
9 #include <stdio.h> | 8 #include <stdio.h> |
10 #include <stdlib.h> | 9 #include <stdlib.h> |
11 #include <string.h> | 10 #include <string.h> |
12 #include <sys/mount.h> | 11 #include <sys/mount.h> |
| 12 #include <sys/stat.h> |
13 #include <unistd.h> | 13 #include <unistd.h> |
14 | 14 |
15 #include "ppapi_simple/ps_main.h" | 15 #include "ppapi_simple/ps_main.h" |
16 | 16 |
17 int lua_main(int argc, char **argv); | 17 int gambc_main(int argc, char **argv); |
18 | 18 |
19 static int setup_unix_environment(const char* tarfile) { | 19 static int setup_unix_environment() { |
20 int ret = umount("/"); | 20 int ret = umount("/"); |
21 if (ret) { | 21 if (ret) { |
22 printf("unmounting root fs failed\n"); | 22 printf("unmounting root fs failed\n"); |
23 return 1; | 23 return 1; |
24 } | 24 } |
25 ret = mount("", "/", "memfs", 0, NULL); | 25 ret = mount("", "/", "memfs", 0, NULL); |
26 if (ret) { | 26 if (ret) { |
27 printf("mounting root fs failed\n"); | 27 printf("mounting root fs failed\n"); |
28 return 1; | 28 return 1; |
29 } | 29 } |
30 | 30 |
31 mkdir("/home", 0777); | 31 mkdir("/home", 0777); |
32 mkdir("/tmp", 0777); | 32 mkdir("/tmp", 0777); |
33 mkdir("/bin", 0777); | 33 mkdir("/bin", 0777); |
34 mkdir("/etc", 0777); | 34 mkdir("/etc", 0777); |
35 mkdir("/mnt", 0777); | 35 mkdir("/mnt", 0777); |
36 mkdir("/mnt/http", 0777); | 36 mkdir("/mnt/http", 0777); |
37 mkdir("/mnt/html5", 0777); | 37 mkdir("/mnt/html5", 0777); |
38 | 38 |
39 const char* data_url = getenv("DATA_URL"); | 39 const char* data_url = getenv("DATA_URL"); |
40 if (!data_url) | 40 if (!data_url) |
41 data_url = "./"; | 41 data_url = "./scm"; |
42 | 42 |
43 ret = mount(data_url, "/mnt/http", "httpfs", 0, | 43 ret = mount(data_url, "/mnt/http", "httpfs", 0, |
44 "allow_cross_origin_requests=true,allow_credentials=false"); | 44 "allow_cross_origin_requests=true,allow_credentials=false"); |
45 if (ret) { | 45 if (ret) { |
46 printf("mounting http filesystem failed\n"); | 46 printf("mounting http filesystem failed\n"); |
47 return 1; | 47 return 1; |
48 } | 48 } |
49 | 49 |
50 // Ignore failures from mounting html5fs. For example, it will always | 50 // Ignore failures from mounting html5fs. For example, it will always |
51 // fail in incognito mode. | 51 // fail in incognito mode. |
52 mount("/", "/mnt/html5", "html5fs", 0, ""); | 52 mount("/", "/mnt/html5", "html5fs", 0, ""); |
53 | 53 |
54 // Extra tar achive from http filesystem. | |
55 if (tarfile) { | |
56 TAR* tar; | |
57 char filename[PATH_MAX]; | |
58 strcpy(filename, "/mnt/http/"); | |
59 strcat(filename, tarfile); | |
60 ret = tar_open(&tar, filename, NULL, O_RDONLY, 0, 0); | |
61 if (ret) { | |
62 printf("error opening: %s\n", filename); | |
63 return 1; | |
64 } | |
65 | |
66 ret = tar_extract_all(tar, "/"); | |
67 if (ret) { | |
68 printf("error extracting: %s\n", filename); | |
69 return 1; | |
70 } | |
71 | |
72 ret = tar_close(tar); | |
73 assert(ret == 0); | |
74 } | |
75 | |
76 // Setup environment | 54 // Setup environment |
77 setenv("HOME", "/home", 1); | 55 setenv("HOME", "/home", 1); |
78 setenv("PATH", "/bin", 1); | 56 setenv("PATH", "/bin", 1); |
79 setenv("USER", "user", 1); | 57 setenv("USER", "user", 1); |
80 setenv("LOGNAME", "user", 1); | 58 setenv("LOGNAME", "user", 1); |
81 return 0; | 59 return 0; |
82 } | 60 } |
83 | 61 |
84 int lua_ppapi_main(int argc, char **argv) { | 62 int gambc_ppapi_main(int argc, char **argv) { |
85 if (setup_unix_environment("luadata.tar")) | 63 if (setup_unix_environment()) |
86 return 1; | 64 return 1; |
87 | 65 |
88 chdir("/lua-5.2.2-tests"); | 66 return gambc_main(argc, argv); |
89 | |
90 return lua_main(argc, argv); | |
91 } | 67 } |
92 | 68 |
93 PPAPI_SIMPLE_REGISTER_MAIN(lua_ppapi_main) | 69 PPAPI_SIMPLE_REGISTER_MAIN(gambc_ppapi_main) |
OLD | NEW |