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