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