• 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 "common/napi_helper.cpp"
17 #include "napi/native_api.h"
18 #include <cstdio>
19 #include <cstring>
20 #include <fcntl.h>
21 #include <ifaddrs.h>
22 #include <js_native_api_types.h>
23 #include <linux/quota.h>
24 #include <net/if.h>
25 #include <string>
26 #include <sys/inotify.h>
27 #include <sys/stat.h>
28 #include <unistd.h>
29 #include <utmp.h>
30 #include <uv.h>
31 
32 #define ONE 1
33 #define TWO 2
34 #define SIZE_2 2
35 #define PATH "/data/storage/el2/base/files"
36 #define PARAM_777 777
37 #define PARAM_0777 0777
38 #define PARAM_0 0
39 #define PARAM_1 1
40 #define PARAM_2 2
41 #define PARAM_UNNORMAL (-1)
42 #define ERRON_0 0
43 #define SUCCESS 1
44 #define SIZE_64 64
45 #define SEC_TIME 123840
46 #define TEST_MODE 0666
47 #define TEST_AT_FDCWD (-100)
48 #define TEST_ERROR_AT_FDCWD 100
49 #define NO_ERR 0
50 #define SUCCESS 1
51 #define FAIL (-1)
52 #define TEN 10
53 #define TEST_FIFO_MODE 0666
54 #define BUFSIZE 128
55 
56 extern "C" int __fstat_time64(int, struct stat *);
FStat_time64(napi_env env,napi_callback_info info)57 static napi_value FStat_time64(napi_env env, napi_callback_info info)
58 {
59     struct stat stat {};
60     int ret = __fstat_time64(PARAM_UNNORMAL, &stat);
61     napi_value result = nullptr;
62     napi_create_int32(env, ret, &result);
63     return result;
64 }
65 
66 extern "C" int __lstat_time64(const char *__restrict, struct stat *__restrict);
LStat_time64(napi_env env,napi_callback_info info)67 static napi_value LStat_time64(napi_env env, napi_callback_info info)
68 {
69     struct stat stat {};
70     int ret = __lstat_time64("teststat.txt", &stat);
71     napi_value result = nullptr;
72     napi_create_int32(env, ret, &result);
73     return result;
74 }
75 
76 extern "C" int __stat_time64(const char *__restrict, struct stat *__restrict);
Stat_time64(napi_env env,napi_callback_info info)77 static napi_value Stat_time64(napi_env env, napi_callback_info info)
78 {
79     struct stat stat {};
80     int ret = __stat_time64("teststat.txt", &stat);
81     napi_value result = nullptr;
82     napi_create_int32(env, ret, &result);
83     return result;
84 }
85 
Chmod(napi_env env,napi_callback_info info)86 static napi_value Chmod(napi_env env, napi_callback_info info)
87 {
88     int ret = chmod("teststat.txt", S_IRWXU | S_IRWXG | S_IRWXO);
89     napi_value result;
90     napi_create_int32(env, ret, &result);
91     return result;
92 }
93 
Fstatat(napi_env env,napi_callback_info info)94 static napi_value Fstatat(napi_env env, napi_callback_info info)
95 {
96     struct stat st = {PARAM_0};
97     int ret = fstatat(AT_FDCWD, "teststat.txt", &st, PARAM_0);
98     napi_value result;
99     napi_create_int32(env, ret, &result);
100     return result;
101 }
102 
Fstatat64(napi_env env,napi_callback_info info)103 static napi_value Fstatat64(napi_env env, napi_callback_info info)
104 {
105     struct stat64 st = {PARAM_0};
106     int ret = fstatat64(AT_FDCWD, "teststat.txt", &st, PARAM_0);
107     napi_value result;
108     napi_create_int32(env, ret, &result);
109     return result;
110 }
111 
Lstat(napi_env env,napi_callback_info info)112 static napi_value Lstat(napi_env env, napi_callback_info info)
113 {
114     struct stat statbuff;
115     int32_t ret = lstat("teststat.txt", &statbuff);
116     napi_value result = nullptr;
117     if (ret == FAIL) {
118         napi_create_int32(env, PARAM_UNNORMAL, &result);
119     } else {
120         napi_create_int32(env, PARAM_0, &result);
121     }
122     return result;
123 }
124 
Lstat64(napi_env env,napi_callback_info info)125 static napi_value Lstat64(napi_env env, napi_callback_info info)
126 {
127     struct stat64 statbuff;
128     int32_t ret = lstat64("teststat.txt", &statbuff);
129     napi_value result = nullptr;
130     if (ret == FAIL) {
131         napi_create_int32(env, PARAM_UNNORMAL, &result);
132     } else {
133         napi_create_int32(env, PARAM_0, &result);
134     }
135     return result;
136 }
137 
Futimens(napi_env env,napi_callback_info info)138 static napi_value Futimens(napi_env env, napi_callback_info info)
139 {
140     int ret = futimens(PARAM_UNNORMAL, ((struct timespec[2]){{.tv_nsec = UTIME_NOW}, {.tv_nsec = UTIME_NOW}}));
141     napi_value result;
142     napi_create_int32(env, ret, &result);
143     return result;
144 }
145 
Umask(napi_env env,napi_callback_info info)146 static napi_value Umask(napi_env env, napi_callback_info info)
147 {
148     mode_t mode = FAIL;
149     mode_t ret = umask(mode);
150     ret = umask(ret);
151     napi_value result = nullptr;
152     if (ret != mode) {
153         napi_create_int32(env, FAIL, &result);
154     } else {
155         napi_create_int32(env, PARAM_0, &result);
156     }
157     return result;
158 }
159 
160 EXTERN_C_START
Init(napi_env env,napi_value exports)161 static napi_value Init(napi_env env, napi_value exports)
162 {
163     napi_property_descriptor desc[] = {
164         {"__fstat_time64", nullptr, FStat_time64, nullptr, nullptr, nullptr, napi_default, nullptr},
165         {"__lstat_time64", nullptr, LStat_time64, nullptr, nullptr, nullptr, napi_default, nullptr},
166         {"__stat_time64", nullptr, Stat_time64, nullptr, nullptr, nullptr, napi_default, nullptr},
167         {"chmod", nullptr, Chmod, nullptr, nullptr, nullptr, napi_default, nullptr},
168         {"fstatat", nullptr, Fstatat, nullptr, nullptr, nullptr, napi_default, nullptr},
169         {"fstatat64", nullptr, Fstatat64, nullptr, nullptr, nullptr, napi_default, nullptr},
170         {"lstat", nullptr, Lstat, nullptr, nullptr, nullptr, napi_default, nullptr},
171         {"lstat64", nullptr, Lstat64, nullptr, nullptr, nullptr, napi_default, nullptr},
172         {"futimens", nullptr, Futimens, nullptr, nullptr, nullptr, napi_default, nullptr},
173         {"umask", nullptr, Umask, nullptr, nullptr, nullptr, napi_default, nullptr}};
174     napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);
175     return exports;
176 }
177 EXTERN_C_END
178 
179 static napi_module demoModule = {
180     .nm_version = 1,
181     .nm_flags = 0,
182     .nm_filename = nullptr,
183     .nm_register_func = Init,
184     .nm_modname = "stat1",
185     .nm_priv = ((void *)0),
186     .reserved = {0},
187 };
188 
RegisterModule(void)189 extern "C" __attribute__((constructor)) void RegisterModule(void) { napi_module_register(&demoModule); }
190