1 /*
2 * Copyright (c) 2021-2022 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 "constants.h"
17
18 #include <cstdio>
19 #include <cstdlib>
20 #include <cstring>
21 #include <fcntl.h>
22 #include <memory>
23 #include <sstream>
24 #include <sys/stat.h>
25 #include <unistd.h>
26
27 #include "securec.h"
28 #include "../../common/log.h"
29 #include "../../common/napi/n_class.h"
30 #include "../../common/napi/n_func_arg.h"
31 #include "../../common/uni_error.h"
32
33 namespace OHOS {
34 namespace DistributedFS {
35 namespace ModuleFileIO {
36 using namespace std;
37
Constructor(napi_env env,napi_callback_info info)38 napi_value Constants::Constructor(napi_env env, napi_callback_info info)
39 {
40 NFuncArg funcArg(env, info);
41
42 if (!funcArg.InitArgs(NARG_CNT::ZERO)) {
43 UniError(EINVAL).ThrowErr(env, "Number of arguments unmatched");
44 return nullptr;
45 }
46 return funcArg.GetThisVar();
47 }
48
Export()49 bool Constants::Export()
50 {
51 // access
52 napi_value F_OK_ = nullptr;
53 napi_create_int32(exports_.env_, F_OK, &F_OK_); // 0 F_OK
54 napi_value R_OK_ = nullptr;
55 napi_create_int32(exports_.env_, R_OK, &R_OK_); // 4 R_OK
56 napi_value W_OK_ = nullptr;
57 napi_create_int32(exports_.env_, W_OK, &W_OK_); // 2 W_OK
58 napi_value X_OK_ = nullptr;
59 napi_create_int32(exports_.env_, X_OK, &X_OK_); // 1 X_OK
60 // open
61 napi_value O_RDONLY_ = nullptr;
62 napi_create_int32(exports_.env_, O_RDONLY, &O_RDONLY_); // 0 O_RDONLY
63 napi_value O_WRONLY_ = nullptr;
64 napi_create_int32(exports_.env_, O_WRONLY, &O_WRONLY_); // 1 O_WRONLY
65 napi_value O_RDWR_ = nullptr;
66 napi_create_int32(exports_.env_, O_RDWR, &O_RDWR_); // 2 O_RDWR
67 napi_value O_CREAT_ = nullptr;
68 napi_create_int32(exports_.env_, O_CREAT, &O_CREAT_); // 0o100 O_CREAT
69 napi_value O_EXCL_ = nullptr;
70 napi_create_int32(exports_.env_, O_EXCL, &O_EXCL_); // 0o200 O_EXCL
71 napi_value O_TRUNC_ = nullptr;
72 napi_create_int32(exports_.env_, O_TRUNC, &O_TRUNC_); // 0o1000 O_TRUNC
73 napi_value O_APPEND_ = nullptr;
74 napi_create_int32(exports_.env_, O_APPEND, &O_APPEND_); // 0o2000 O_APPEND
75 napi_value O_NONBLOCK_ = nullptr;
76 napi_create_int32(exports_.env_, O_NONBLOCK, &O_NONBLOCK_); // 0o4000 O_NONBLOCK
77 napi_value O_DIRECTORY_ = nullptr;
78 napi_create_int32(exports_.env_, O_DIRECTORY, &O_DIRECTORY_); // 0o200000 O_DIRECTORY
79 napi_value O_NOFOLLOW_ = nullptr;
80 napi_create_int32(exports_.env_, O_NOFOLLOW, &O_NOFOLLOW_); // 0o400000 O_NOFOLLOW
81 napi_value O_SYNC_ = nullptr;
82 napi_create_int32(exports_.env_, O_SYNC, &O_SYNC_); // 0o4010000 O_SYNC
83
84 // stat
85 napi_value S_IFMT_ = nullptr;
86 napi_create_int32(exports_.env_, S_IFMT, &S_IFMT_); // 0o170000 S_IFMT
87 napi_value S_IFSOCK_ = nullptr;
88 napi_create_int32(exports_.env_, S_IFSOCK, &S_IFSOCK_); // 0o140000 S_IFSOCK
89 napi_value S_IFLNK_ = nullptr;
90 napi_create_int32(exports_.env_, S_IFLNK, &S_IFLNK_); // 0o120000 S_IFLNK
91 napi_value S_IFREG_ = nullptr;
92 napi_create_int32(exports_.env_, S_IFREG, &S_IFREG_); // 0o100000 S_IFREG
93 napi_value S_IFBLK_ = nullptr;
94 napi_create_int32(exports_.env_, S_IFBLK, &S_IFBLK_); // 0o060000 S_IFBLK
95 napi_value S_IFDIR_ = nullptr;
96 napi_create_int32(exports_.env_, S_IFDIR, &S_IFDIR_); // 0o040000 S_IFDIR
97 napi_value S_IFCHR_ = nullptr;
98 napi_create_int32(exports_.env_, S_IFCHR, &S_IFCHR_); // 0o020000 S_IFCHR
99 napi_value S_IFIFO_ = nullptr;
100 napi_create_int32(exports_.env_, S_IFIFO, &S_IFIFO_); // 0o010000 S_IFIFO
101 napi_value S_IRWXU_ = nullptr;
102 napi_create_int32(exports_.env_, S_IRWXU, &S_IRWXU_); // 0o0700 S_IRWXU
103 napi_value S_IRUSR_ = nullptr;
104 napi_create_int32(exports_.env_, S_IRUSR, &S_IRUSR_); // 0o0400 S_IRUSR
105 napi_value S_IWUSR_ = nullptr;
106 napi_create_int32(exports_.env_, S_IWUSR, &S_IWUSR_); // 0o0200 S_IWUSR
107 napi_value S_IXUSR_ = nullptr;
108 napi_create_int32(exports_.env_, S_IXUSR, &S_IXUSR_); // 0o0100 S_IXUSR
109 napi_value S_IRWXG_ = nullptr;
110 napi_create_int32(exports_.env_, S_IRWXG, &S_IRWXG_); // 0o0070 S_IRWXG
111 napi_value S_IRGRP_ = nullptr;
112 napi_create_int32(exports_.env_, S_IRGRP, &S_IRGRP_); // 0o0040 S_IRGRP
113 napi_value S_IWGRP_ = nullptr;
114 napi_create_int32(exports_.env_, S_IWGRP, &S_IWGRP_); // 0o0020 S_IWGRP
115 napi_value S_IXGRP_ = nullptr;
116 napi_create_int32(exports_.env_, S_IXGRP, &S_IXGRP_); // 0o0010 S_IXGRP
117 napi_value S_IRWXO_ = nullptr;
118 napi_create_int32(exports_.env_, S_IRWXO, &S_IRWXO_); // 0o0007 S_IRWXO
119 napi_value S_IROTH_ = nullptr;
120 napi_create_int32(exports_.env_, S_IROTH, &S_IROTH_); // 0o0004 S_IROTH
121 napi_value S_IWOTH_ = nullptr;
122 napi_create_int32(exports_.env_, S_IWOTH, &S_IWOTH_); // 0o0002 S_IWOTH
123 napi_value S_IXOTH_ = nullptr;
124 napi_create_int32(exports_.env_, S_IXOTH, &S_IXOTH_); // 0o0001 S_IXOTH
125
126 vector<napi_property_descriptor> props = {
127 NVal::DeclareNapiStaticProperty("F_OK", F_OK_),
128 NVal::DeclareNapiStaticProperty("R_OK", R_OK_),
129 NVal::DeclareNapiStaticProperty("W_OK", W_OK_),
130 NVal::DeclareNapiStaticProperty("X_OK", X_OK_),
131 NVal::DeclareNapiStaticProperty("O_RDONLY", O_RDONLY_),
132 NVal::DeclareNapiStaticProperty("O_WRONLY", O_WRONLY_),
133 NVal::DeclareNapiStaticProperty("O_RDWR", O_RDWR_),
134 NVal::DeclareNapiStaticProperty("O_CREAT", O_CREAT_),
135 NVal::DeclareNapiStaticProperty("O_EXCL", O_EXCL_),
136 NVal::DeclareNapiStaticProperty("O_TRUNC", O_TRUNC_),
137 NVal::DeclareNapiStaticProperty("O_APPEND", O_APPEND_),
138 NVal::DeclareNapiStaticProperty("O_NONBLOCK", O_NONBLOCK_),
139 NVal::DeclareNapiStaticProperty("O_DIRECTORY", O_DIRECTORY_),
140 NVal::DeclareNapiStaticProperty("O_NOFOLLOW", O_NOFOLLOW_),
141 NVal::DeclareNapiStaticProperty("O_SYNC", O_SYNC_),
142 NVal::DeclareNapiStaticProperty("S_IFMT", S_IFMT_),
143 NVal::DeclareNapiStaticProperty("S_IFSOCK", S_IFSOCK_),
144 NVal::DeclareNapiStaticProperty("S_IFLNK", S_IFLNK_),
145 NVal::DeclareNapiStaticProperty("S_IFREG", S_IFREG_),
146 NVal::DeclareNapiStaticProperty("S_IFBLK", S_IFBLK_),
147 NVal::DeclareNapiStaticProperty("S_IFDIR", S_IFDIR_),
148 NVal::DeclareNapiStaticProperty("S_IFCHR", S_IFCHR_),
149 NVal::DeclareNapiStaticProperty("S_IFIFO", S_IFIFO_),
150 NVal::DeclareNapiStaticProperty("S_IRWXU", S_IRWXU_),
151 NVal::DeclareNapiStaticProperty("S_IRUSR", S_IRUSR_),
152 NVal::DeclareNapiStaticProperty("S_IWUSR", S_IWUSR_),
153 NVal::DeclareNapiStaticProperty("S_IXUSR", S_IXUSR_),
154 NVal::DeclareNapiStaticProperty("S_IRWXG", S_IRWXG_),
155 NVal::DeclareNapiStaticProperty("S_IRGRP", S_IRGRP_),
156 NVal::DeclareNapiStaticProperty("S_IWGRP", S_IWGRP_),
157 NVal::DeclareNapiStaticProperty("S_IXGRP", S_IXGRP_),
158 NVal::DeclareNapiStaticProperty("S_IRWXO", S_IRWXO_),
159 NVal::DeclareNapiStaticProperty("S_IROTH", S_IROTH_),
160 NVal::DeclareNapiStaticProperty("S_IWOTH", S_IWOTH_),
161 NVal::DeclareNapiStaticProperty("S_IXOTH", S_IXOTH_),
162 };
163
164 string className = GetClassName();
165 bool succ = false;
166 napi_value classValue = nullptr;
167 tie(succ, classValue) = NClass::DefineClass(exports_.env_, className, Constants::Constructor, std::move(props));
168 if (!succ) {
169 UniError(EIO).ThrowErr(exports_.env_, "INNER BUG. Failed to define class");
170 return false;
171 }
172 succ = NClass::SaveClass(exports_.env_, className, classValue);
173 if (!succ) {
174 UniError(EIO).ThrowErr(exports_.env_, "INNER BUG. Failed to save class");
175 return false;
176 }
177
178 return exports_.AddProp(className, classValue);
179 }
180
GetClassName()181 string Constants::GetClassName()
182 {
183 return Constants::className_;
184 }
185
Constants(napi_env env,napi_value exports)186 Constants::Constants(napi_env env, napi_value exports) : NExporter(env, exports) {}
~Constants()187 Constants::~Constants() {}
188 } // namespace ModuleFileIO
189 } // namespace DistributedFS
190 } // namespace OHOS
191