• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include <cerrno>
17 #include <dirent.h>
18 #include <fcntl.h>
19 #include <js_native_api.h>
20 #include <js_native_api_types.h>
21 #include <node_api.h>
22 #include <spawn.h>
23 #include <sys/stat.h>
24 #include <unistd.h>
25 
26 #define FAIL 0
27 #define SUCCESS 1
28 #define PARAM_0 0
29 
PosixSpawnAttrGetflags(napi_env env,napi_callback_info info)30 static napi_value PosixSpawnAttrGetflags(napi_env env, napi_callback_info info)
31 {
32     posix_spawnattr_t attr;
33     posix_spawnattr_init(&attr);
34     short flags = PARAM_0;
35     int resultinfo = posix_spawnattr_getflags(&attr, &flags);
36     napi_value result = nullptr;
37     napi_create_int32(env, resultinfo, &result);
38     return result;
39 }
40 
PosixSpawnFileActionsAddclose(napi_env env,napi_callback_info info)41 static napi_value PosixSpawnFileActionsAddclose(napi_env env, napi_callback_info info)
42 {
43     posix_spawn_file_actions_t param;
44     posix_spawn_file_actions_init(&param);
45     int ret = posix_spawn_file_actions_addclose(&param, SUCCESS);
46     napi_value result = nullptr;
47     napi_create_int32(env, ret, &result);
48     return result;
49 }
50 
PosixSpawn(napi_env env,napi_callback_info info)51 static napi_value PosixSpawn(napi_env env, napi_callback_info info)
52 {
53     pid_t Pid = PARAM_0;
54     Pid = getpid();
55     posix_spawnattr_t spawnAttributes;
56     posix_spawnattr_init(&spawnAttributes);
57     errno = FAIL;
58     int backInfo = FAIL;
59     char **Environ = environ;
60     const char *CommandCStr = "posix delete -i 1024";
61     const char *argv[] = {"sh", "-c", CommandCStr, nullptr};
62     char filepath[] = "/data/storage/el2/base/files/fzl.txt";
63     int fileDescribe = open(filepath, O_CREAT);
64     posix_spawn(&Pid, filepath, nullptr, &spawnAttributes, (char *const *)argv, Environ);
65     close(fileDescribe);
66     napi_value result = nullptr;
67     if (errno == FAIL) {
68         backInfo = SUCCESS;
69     }
70     napi_create_int32(env, backInfo, &result);
71     return result;
72 }
73 
PosixSpawnP(napi_env env,napi_callback_info info)74 static napi_value PosixSpawnP(napi_env env, napi_callback_info info)
75 {
76     pid_t Pid = PARAM_0;
77     Pid = getpid();
78     posix_spawnattr_t spawnAttributes = {PARAM_0};
79     posix_spawnattr_init(&spawnAttributes);
80     errno = FAIL;
81     int backInfo = FAIL;
82     char **Environ = environ;
83     const char *CommandCStr = nullptr;
84     const char *argv[] = {"sh", "-c", CommandCStr, nullptr};
85     char filepath[] = "/data/storage/el2/base/files/fzl.txt";
86     int fileDescribe = open(filepath, O_CREAT);
87     posix_spawnp(&Pid, filepath, nullptr, &spawnAttributes, (char *const *)argv, Environ);
88     napi_value result = nullptr;
89     close(fileDescribe);
90     if (errno == FAIL) {
91         backInfo = SUCCESS;
92     }
93     napi_create_int32(env, backInfo, &result);
94     return result;
95 }
96 
PosixSpawnFileActionsAddDup2(napi_env env,napi_callback_info info)97 static napi_value PosixSpawnFileActionsAddDup2(napi_env env, napi_callback_info info)
98 {
99     posix_spawn_file_actions_t param;
100     posix_spawn_file_actions_init(&param);
101     int ret = posix_spawn_file_actions_adddup2(&param, SUCCESS, SUCCESS);
102     napi_value result = nullptr;
103     napi_create_int32(env, ret, &result);
104     return result;
105 }
106 
PosixSpawnFileActionsAddOpen(napi_env env,napi_callback_info info)107 static napi_value PosixSpawnFileActionsAddOpen(napi_env env, napi_callback_info info)
108 {
109     errno = FAIL;
110     int returnValue = FAIL;
111     posix_spawn_file_actions_t param;
112     posix_spawn_file_actions_init(&param);
113     int fileDescribe = open("/data/storage/el2/base/files/fzl.txt", O_CREAT);
114     posix_spawn_file_actions_addopen(&param, fileDescribe, "/data/storage/el2/base/files/fzl.txt", O_CREAT, S_IXGRP);
115     napi_value result = nullptr;
116     if (errno == FAIL) {
117         returnValue = SUCCESS;
118     }
119     napi_create_int32(env, returnValue, &result);
120     return result;
121 }
122 
123 extern "C" int __fstat_time64(int, struct stat *);
PosixSpawnFileActionsDestory(napi_env env,napi_callback_info info)124 static napi_value PosixSpawnFileActionsDestory(napi_env env, napi_callback_info info)
125 {
126     posix_spawn_file_actions_t param;
127     posix_spawn_file_actions_init(&param);
128     int ret = posix_spawn_file_actions_destroy(&param);
129     napi_value result = nullptr;
130     napi_create_int32(env, ret, &result);
131     return result;
132 }
133 
PosixSpawnFileActionsInit(napi_env env,napi_callback_info info)134 static napi_value PosixSpawnFileActionsInit(napi_env env, napi_callback_info info)
135 {
136     posix_spawn_file_actions_t param;
137     int returnValue = posix_spawn_file_actions_init(&param);
138     napi_value result = nullptr;
139     napi_create_int32(env, returnValue, &result);
140     return result;
141 }
142 
PosixSpawnAttrDestory(napi_env env,napi_callback_info info)143 static napi_value PosixSpawnAttrDestory(napi_env env, napi_callback_info info)
144 {
145     posix_spawnattr_t param;
146     param.__flags = SUCCESS;
147     param.__pgrp = SUCCESS;
148     param.__prio = SUCCESS;
149     param.__pol = SUCCESS;
150     posix_spawnattr_init(&param);
151     int returnValue = posix_spawnattr_destroy(&param);
152     napi_value result = nullptr;
153     napi_create_int32(env, returnValue, &result);
154     return result;
155 }
156 
PosixSpawnAttrGetpGroup(napi_env env,napi_callback_info info)157 static napi_value PosixSpawnAttrGetpGroup(napi_env env, napi_callback_info info)
158 {
159     posix_spawnattr_t param;
160     pid_t pid;
161     pid = getpid();
162     posix_spawnattr_init(&param);
163     int returnValue = posix_spawnattr_getpgroup(&param, &pid);
164     napi_value result = nullptr;
165     napi_create_int32(env, returnValue, &result);
166     return result;
167 }
168 
PosixSpawnAttrGetSchedParam(napi_env env,napi_callback_info info)169 static napi_value PosixSpawnAttrGetSchedParam(napi_env env, napi_callback_info info)
170 {
171     posix_spawnattr_t param;
172     posix_spawnattr_init(&param);
173     struct sched_param *secondParam = nullptr;
174     int returnValue = posix_spawnattr_getschedparam(&param, secondParam);
175     napi_value result = nullptr;
176     napi_create_int32(env, returnValue, &result);
177     return result;
178 }
179 
PosixSpawnAttrGetSchedPolicy(napi_env env,napi_callback_info info)180 static napi_value PosixSpawnAttrGetSchedPolicy(napi_env env, napi_callback_info info)
181 {
182     posix_spawnattr_t param;
183     posix_spawnattr_init(&param);
184     int *secondParam = nullptr;
185     int returnValue = posix_spawnattr_getschedpolicy(&param, secondParam);
186     napi_value result = nullptr;
187     napi_create_int32(env, returnValue, &result);
188     return result;
189 }
190 
PosixSpawnAttrGetSigDefault(napi_env env,napi_callback_info info)191 static napi_value PosixSpawnAttrGetSigDefault(napi_env env, napi_callback_info info)
192 {
193     posix_spawnattr_t param;
194     sigset_t secondParam;
195     int returnValue = posix_spawnattr_getsigdefault(&param, &secondParam);
196     napi_value result = nullptr;
197     napi_create_int32(env, returnValue, &result);
198     return result;
199 }
200 
PosixSpawnAttrGetSigMask(napi_env env,napi_callback_info info)201 static napi_value PosixSpawnAttrGetSigMask(napi_env env, napi_callback_info info)
202 {
203     posix_spawnattr_t param;
204     posix_spawnattr_init(&param);
205     sigset_t secondParam;
206     int returnValue = posix_spawnattr_getsigmask(&param, &secondParam);
207     napi_value result = nullptr;
208     napi_create_int32(env, returnValue, &result);
209     return result;
210 }
211 
PosixSpawnAttrInit(napi_env env,napi_callback_info info)212 static napi_value PosixSpawnAttrInit(napi_env env, napi_callback_info info)
213 {
214     posix_spawnattr_t param;
215     int returnValue = posix_spawnattr_init(&param);
216     napi_value result = nullptr;
217     napi_create_int32(env, returnValue, &result);
218     return result;
219 }
220 
PosixSpawnAttrSetFlags(napi_env env,napi_callback_info info)221 static napi_value PosixSpawnAttrSetFlags(napi_env env, napi_callback_info info)
222 {
223     posix_spawnattr_t param;
224     int returnValue = posix_spawnattr_setflags(&param, SUCCESS);
225     napi_value result = nullptr;
226     napi_create_int32(env, returnValue, &result);
227     return result;
228 }
229 
PosixSpawnAttrSetSigDefault(napi_env env,napi_callback_info info)230 static napi_value PosixSpawnAttrSetSigDefault(napi_env env, napi_callback_info info)
231 {
232     posix_spawnattr_t param;
233     posix_spawnattr_init(&param);
234     sigset_t paramSecond;
235     int returnValue = posix_spawnattr_setsigdefault(&param, &paramSecond);
236     napi_value result = nullptr;
237     napi_create_int32(env, returnValue, &result);
238     return result;
239 }
240 
PosixSpawnAttrSetSigMask(napi_env env,napi_callback_info info)241 static napi_value PosixSpawnAttrSetSigMask(napi_env env, napi_callback_info info)
242 {
243     posix_spawnattr_t param;
244     posix_spawnattr_init(&param);
245     sigset_t paramSecond;
246     int returnValue = posix_spawnattr_setsigmask(&param, &paramSecond);
247     napi_value result = nullptr;
248     napi_create_int32(env, returnValue, &result);
249     return result;
250 }
251 
PosixSpawnAttrSetSchedPolicy(napi_env env,napi_callback_info info)252 static napi_value PosixSpawnAttrSetSchedPolicy(napi_env env, napi_callback_info info)
253 {
254     posix_spawnattr_t param;
255     posix_spawnattr_init(&param);
256     int paramSecond = SUCCESS;
257     int returnValue = posix_spawnattr_setschedpolicy(&param, paramSecond);
258     napi_value result = nullptr;
259     napi_create_int32(env, returnValue, &result);
260     return result;
261 }
262 
PosixSpawnAttrSetSchedParam(napi_env env,napi_callback_info info)263 static napi_value PosixSpawnAttrSetSchedParam(napi_env env, napi_callback_info info)
264 {
265     posix_spawnattr_t param;
266     posix_spawnattr_init(&param);
267     sched_param *paramSecond;
268     int returnValue = posix_spawnattr_setschedparam(&param, paramSecond);
269     napi_value result = nullptr;
270     napi_create_int32(env, returnValue, &result);
271     return result;
272 }
273 
PosixSpawnAttrSetPGroup(napi_env env,napi_callback_info info)274 static napi_value PosixSpawnAttrSetPGroup(napi_env env, napi_callback_info info)
275 {
276     posix_spawnattr_t param;
277     posix_spawnattr_init(&param);
278     pid_t pid;
279     pid = getpid();
280     int returnValue = posix_spawnattr_setpgroup(&param, pid);
281     napi_value result = nullptr;
282     napi_create_int32(env, returnValue, &result);
283     return result;
284 }
285 
Init(napi_env env,napi_value exports)286 EXTERN_C_START static napi_value Init(napi_env env, napi_value exports)
287 {
288     napi_property_descriptor desc[] = {
289         {"posixSpawnAttrGetFlags", nullptr, PosixSpawnAttrGetflags, nullptr, nullptr, nullptr, napi_default, nullptr},
290         {"posixSpawnFileActionsAddClose", nullptr, PosixSpawnFileActionsAddclose, nullptr, nullptr, nullptr,
291          napi_default, nullptr},
292         {"posixSpawn", nullptr, PosixSpawn, nullptr, nullptr, nullptr, napi_default, nullptr},
293         {"posixSpawnFileActionsAdddup2", nullptr, PosixSpawnFileActionsAddDup2, nullptr, nullptr, nullptr, napi_default,
294          nullptr},
295         {"posixSpawnFileActionsAddopen", nullptr, PosixSpawnFileActionsAddOpen, nullptr, nullptr, nullptr, napi_default,
296          nullptr},
297         {"posixSpawnFileActionsDestroy", nullptr, PosixSpawnFileActionsDestory, nullptr, nullptr, nullptr, napi_default,
298          nullptr},
299         {"posixSpawnFileActionsInit", nullptr, PosixSpawnFileActionsInit, nullptr, nullptr, nullptr, napi_default,
300          nullptr},
301         {"posixSpawnAttrDestroy", nullptr, PosixSpawnAttrDestory, nullptr, nullptr, nullptr, napi_default, nullptr},
302         {"posixSpawnAttrGetpGroup", nullptr, PosixSpawnAttrGetpGroup, nullptr, nullptr, nullptr, napi_default, nullptr},
303         {"posixSpawnAttrGetSchedParam", nullptr, PosixSpawnAttrGetSchedParam, nullptr, nullptr, nullptr, napi_default,
304          nullptr},
305         {"posixSpawnAttrGetSchedPolicy", nullptr, PosixSpawnAttrGetSchedPolicy, nullptr, nullptr, nullptr, napi_default,
306          nullptr},
307         {"posixSpawnAttrGetSigDefault", nullptr, PosixSpawnAttrGetSigDefault, nullptr, nullptr, nullptr, napi_default,
308          nullptr},
309         {"posixSpawnAttrGetSigMask", nullptr, PosixSpawnAttrGetSigMask, nullptr, nullptr, nullptr, napi_default,
310          nullptr},
311         {"posixSpawnAttrInit", nullptr, PosixSpawnAttrInit, nullptr, nullptr, nullptr, napi_default, nullptr},
312         {"posixSpawnAttrSetFlags", nullptr, PosixSpawnAttrSetFlags, nullptr, nullptr, nullptr, napi_default, nullptr},
313         {"posixSpawnP", nullptr, PosixSpawnP, nullptr, nullptr, nullptr, napi_default, nullptr},
314         {"posixSpawnAttrSetSigDefault", nullptr, PosixSpawnAttrSetSigDefault, nullptr, nullptr, nullptr, napi_default,
315          nullptr},
316         {"posixSpawnAttrSetSigMask", nullptr, PosixSpawnAttrSetSigMask, nullptr, nullptr, nullptr, napi_default,
317          nullptr},
318         {"posixSpawnAttrSetSchedPolicy", nullptr, PosixSpawnAttrSetSchedPolicy, nullptr, nullptr, nullptr, napi_default,
319          nullptr},
320         {"posixSpawnAttrSetSchedParam", nullptr, PosixSpawnAttrSetSchedParam, nullptr, nullptr, nullptr, napi_default,
321          nullptr},
322         {"posixSpawnAttrSetPGroup", nullptr, PosixSpawnAttrSetPGroup, nullptr, nullptr, nullptr, napi_default, nullptr},
323     };
324     napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);
325     return exports;
326 }
327 EXTERN_C_END
328 
329 static napi_module demoModule = {
330     .nm_version = 1,
331     .nm_flags = 0,
332     .nm_filename = nullptr,
333     .nm_register_func = Init,
334     .nm_modname = "libspawnndk",
335     .nm_priv = ((void *)0),
336     .reserved = {0},
337 };
338 
RegisterModule(void)339 extern "C" __attribute__((constructor)) void RegisterModule(void) { napi_module_register(&demoModule); }