/* * Copyright (c) 2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include #include #include #include #include #include #include #include #include #define FAIL 0 #define SUCCESS 1 #define PARAM_0 0 #define PARAM_0777 0777 static napi_value PosixSpawnAttrGetflags(napi_env env, napi_callback_info info) { posix_spawnattr_t attr; posix_spawnattr_init(&attr); short flags = PARAM_0; int resultinfo = posix_spawnattr_getflags(&attr, &flags); napi_value result = nullptr; napi_create_int32(env, resultinfo, &result); return result; } static napi_value PosixSpawnFileActionsAddclose(napi_env env, napi_callback_info info) { posix_spawn_file_actions_t param; posix_spawn_file_actions_init(¶m); int ret = posix_spawn_file_actions_addclose(¶m, SUCCESS); napi_value result = nullptr; napi_create_int32(env, ret, &result); return result; } static napi_value PosixSpawn(napi_env env, napi_callback_info info) { pid_t Pid = PARAM_0; Pid = getpid(); posix_spawnattr_t spawnAttributes; posix_spawnattr_init(&spawnAttributes); errno = FAIL; int backInfo = FAIL; char **Environ = environ; const char *CommandCStr = "posix delete -i 1024"; const char *argv[] = {"sh", "-c", CommandCStr, nullptr}; char filepath[] = "/data/storage/el2/base/files/fzl.txt"; int fileDescribe = open(filepath, O_CREAT, PARAM_0777); posix_spawn(&Pid, filepath, nullptr, &spawnAttributes, (char *const *)argv, Environ); close(fileDescribe); napi_value result = nullptr; if (errno == FAIL) { backInfo = SUCCESS; } napi_create_int32(env, backInfo, &result); return result; } static napi_value PosixSpawnP(napi_env env, napi_callback_info info) { pid_t Pid = PARAM_0; Pid = getpid(); posix_spawnattr_t spawnAttributes = {PARAM_0}; posix_spawnattr_init(&spawnAttributes); errno = FAIL; int backInfo = FAIL; char **Environ = environ; const char *CommandCStr = nullptr; const char *argv[] = {"sh", "-c", CommandCStr, nullptr}; char filepath[] = "/data/storage/el2/base/files/fzl.txt"; int fileDescribe = open(filepath, O_CREAT, PARAM_0777); posix_spawnp(&Pid, filepath, nullptr, &spawnAttributes, (char *const *)argv, Environ); napi_value result = nullptr; close(fileDescribe); if (errno == FAIL) { backInfo = SUCCESS; } napi_create_int32(env, backInfo, &result); return result; } static napi_value PosixSpawnFileActionsAddDup2(napi_env env, napi_callback_info info) { posix_spawn_file_actions_t param; posix_spawn_file_actions_init(¶m); int ret = posix_spawn_file_actions_adddup2(¶m, SUCCESS, SUCCESS); napi_value result = nullptr; napi_create_int32(env, ret, &result); return result; } static napi_value PosixSpawnFileActionsAddOpen(napi_env env, napi_callback_info info) { errno = FAIL; int returnValue = FAIL; posix_spawn_file_actions_t param; posix_spawn_file_actions_init(¶m); int fileDescribe = open("/data/storage/el2/base/files/fzl.txt", O_CREAT, PARAM_0777); posix_spawn_file_actions_addopen(¶m, fileDescribe, "/data/storage/el2/base/files/fzl.txt", O_CREAT, S_IXGRP); napi_value result = nullptr; if (errno == FAIL) { returnValue = SUCCESS; } close(fileDescribe); napi_create_int32(env, returnValue, &result); return result; } extern "C" int __fstat_time64(int, struct stat *); static napi_value PosixSpawnFileActionsDestory(napi_env env, napi_callback_info info) { posix_spawn_file_actions_t param; posix_spawn_file_actions_init(¶m); int ret = posix_spawn_file_actions_destroy(¶m); napi_value result = nullptr; napi_create_int32(env, ret, &result); return result; } static napi_value PosixSpawnFileActionsInit(napi_env env, napi_callback_info info) { posix_spawn_file_actions_t param; int returnValue = posix_spawn_file_actions_init(¶m); napi_value result = nullptr; napi_create_int32(env, returnValue, &result); return result; } static napi_value PosixSpawnAttrDestory(napi_env env, napi_callback_info info) { posix_spawnattr_t param; param.__flags = SUCCESS; param.__pgrp = SUCCESS; param.__prio = SUCCESS; param.__pol = SUCCESS; posix_spawnattr_init(¶m); int returnValue = posix_spawnattr_destroy(¶m); napi_value result = nullptr; napi_create_int32(env, returnValue, &result); return result; } static napi_value PosixSpawnAttrGetpGroup(napi_env env, napi_callback_info info) { posix_spawnattr_t param; pid_t pid; pid = getpid(); posix_spawnattr_init(¶m); int returnValue = posix_spawnattr_getpgroup(¶m, &pid); napi_value result = nullptr; napi_create_int32(env, returnValue, &result); return result; } static napi_value PosixSpawnAttrGetSchedParam(napi_env env, napi_callback_info info) { posix_spawnattr_t param; posix_spawnattr_init(¶m); struct sched_param *secondParam = nullptr; int returnValue = posix_spawnattr_getschedparam(¶m, secondParam); napi_value result = nullptr; napi_create_int32(env, returnValue, &result); return result; } static napi_value PosixSpawnAttrGetSchedPolicy(napi_env env, napi_callback_info info) { posix_spawnattr_t param; posix_spawnattr_init(¶m); int *secondParam = nullptr; int returnValue = posix_spawnattr_getschedpolicy(¶m, secondParam); napi_value result = nullptr; napi_create_int32(env, returnValue, &result); return result; } static napi_value PosixSpawnAttrGetSigDefault(napi_env env, napi_callback_info info) { posix_spawnattr_t param; sigset_t secondParam; int returnValue = posix_spawnattr_getsigdefault(¶m, &secondParam); napi_value result = nullptr; napi_create_int32(env, returnValue, &result); return result; } static napi_value PosixSpawnAttrGetSigMask(napi_env env, napi_callback_info info) { posix_spawnattr_t param; posix_spawnattr_init(¶m); sigset_t secondParam; int returnValue = posix_spawnattr_getsigmask(¶m, &secondParam); napi_value result = nullptr; napi_create_int32(env, returnValue, &result); return result; } static napi_value PosixSpawnAttrInit(napi_env env, napi_callback_info info) { posix_spawnattr_t param; int returnValue = posix_spawnattr_init(¶m); napi_value result = nullptr; napi_create_int32(env, returnValue, &result); return result; } static napi_value PosixSpawnAttrSetFlags(napi_env env, napi_callback_info info) { posix_spawnattr_t param; int returnValue = posix_spawnattr_setflags(¶m, SUCCESS); napi_value result = nullptr; napi_create_int32(env, returnValue, &result); return result; } static napi_value PosixSpawnAttrSetSigDefault(napi_env env, napi_callback_info info) { posix_spawnattr_t param; posix_spawnattr_init(¶m); sigset_t paramSecond; int returnValue = posix_spawnattr_setsigdefault(¶m, ¶mSecond); napi_value result = nullptr; napi_create_int32(env, returnValue, &result); return result; } static napi_value PosixSpawnAttrSetSigMask(napi_env env, napi_callback_info info) { posix_spawnattr_t param; posix_spawnattr_init(¶m); sigset_t paramSecond; int returnValue = posix_spawnattr_setsigmask(¶m, ¶mSecond); napi_value result = nullptr; napi_create_int32(env, returnValue, &result); return result; } static napi_value PosixSpawnAttrSetSchedPolicy(napi_env env, napi_callback_info info) { posix_spawnattr_t param; posix_spawnattr_init(¶m); int paramSecond = SUCCESS; int returnValue = posix_spawnattr_setschedpolicy(¶m, paramSecond); napi_value result = nullptr; napi_create_int32(env, returnValue, &result); return result; } static napi_value PosixSpawnAttrSetSchedParam(napi_env env, napi_callback_info info) { posix_spawnattr_t param; posix_spawnattr_init(¶m); sched_param *paramSecond; int returnValue = posix_spawnattr_setschedparam(¶m, paramSecond); napi_value result = nullptr; napi_create_int32(env, returnValue, &result); return result; } static napi_value PosixSpawnAttrSetPGroup(napi_env env, napi_callback_info info) { posix_spawnattr_t param; posix_spawnattr_init(¶m); pid_t pid; pid = getpid(); int returnValue = posix_spawnattr_setpgroup(¶m, pid); napi_value result = nullptr; napi_create_int32(env, returnValue, &result); return result; } EXTERN_C_START static napi_value Init(napi_env env, napi_value exports) { napi_property_descriptor desc[] = { {"posixSpawnAttrGetFlags", nullptr, PosixSpawnAttrGetflags, nullptr, nullptr, nullptr, napi_default, nullptr}, {"posixSpawnFileActionsAddClose", nullptr, PosixSpawnFileActionsAddclose, nullptr, nullptr, nullptr, napi_default, nullptr}, {"posixSpawn", nullptr, PosixSpawn, nullptr, nullptr, nullptr, napi_default, nullptr}, {"posixSpawnFileActionsAdddup2", nullptr, PosixSpawnFileActionsAddDup2, nullptr, nullptr, nullptr, napi_default, nullptr}, {"posixSpawnFileActionsAddopen", nullptr, PosixSpawnFileActionsAddOpen, nullptr, nullptr, nullptr, napi_default, nullptr}, {"posixSpawnFileActionsDestroy", nullptr, PosixSpawnFileActionsDestory, nullptr, nullptr, nullptr, napi_default, nullptr}, {"posixSpawnFileActionsInit", nullptr, PosixSpawnFileActionsInit, nullptr, nullptr, nullptr, napi_default, nullptr}, {"posixSpawnAttrDestroy", nullptr, PosixSpawnAttrDestory, nullptr, nullptr, nullptr, napi_default, nullptr}, {"posixSpawnAttrGetpGroup", nullptr, PosixSpawnAttrGetpGroup, nullptr, nullptr, nullptr, napi_default, nullptr}, {"posixSpawnAttrGetSchedParam", nullptr, PosixSpawnAttrGetSchedParam, nullptr, nullptr, nullptr, napi_default, nullptr}, {"posixSpawnAttrGetSchedPolicy", nullptr, PosixSpawnAttrGetSchedPolicy, nullptr, nullptr, nullptr, napi_default, nullptr}, {"posixSpawnAttrGetSigDefault", nullptr, PosixSpawnAttrGetSigDefault, nullptr, nullptr, nullptr, napi_default, nullptr}, {"posixSpawnAttrGetSigMask", nullptr, PosixSpawnAttrGetSigMask, nullptr, nullptr, nullptr, napi_default, nullptr}, {"posixSpawnAttrInit", nullptr, PosixSpawnAttrInit, nullptr, nullptr, nullptr, napi_default, nullptr}, {"posixSpawnAttrSetFlags", nullptr, PosixSpawnAttrSetFlags, nullptr, nullptr, nullptr, napi_default, nullptr}, {"posixSpawnP", nullptr, PosixSpawnP, nullptr, nullptr, nullptr, napi_default, nullptr}, {"posixSpawnAttrSetSigDefault", nullptr, PosixSpawnAttrSetSigDefault, nullptr, nullptr, nullptr, napi_default, nullptr}, {"posixSpawnAttrSetSigMask", nullptr, PosixSpawnAttrSetSigMask, nullptr, nullptr, nullptr, napi_default, nullptr}, {"posixSpawnAttrSetSchedPolicy", nullptr, PosixSpawnAttrSetSchedPolicy, nullptr, nullptr, nullptr, napi_default, nullptr}, {"posixSpawnAttrSetSchedParam", nullptr, PosixSpawnAttrSetSchedParam, nullptr, nullptr, nullptr, napi_default, nullptr}, {"posixSpawnAttrSetPGroup", nullptr, PosixSpawnAttrSetPGroup, nullptr, nullptr, nullptr, napi_default, nullptr}, }; napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc); return exports; } EXTERN_C_END static napi_module demoModule = { .nm_version = 1, .nm_flags = 0, .nm_filename = nullptr, .nm_register_func = Init, .nm_modname = "libspawnndk", .nm_priv = ((void *)0), .reserved = {0}, }; extern "C" __attribute__((constructor)) void RegisterModule(void) { napi_module_register(&demoModule); }