• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022-2024 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 #ifndef FILEMGMT_LIBN_N_ERROR_H
17 #define FILEMGMT_LIBN_N_ERROR_H
18 
19 #include <functional>
20 #include <string>
21 #include <tuple>
22 #include <unordered_map>
23 
24 #include "n_napi.h"
25 
26 namespace OHOS {
27 namespace FileManagement {
28 namespace LibN {
29 
30 #if (defined IOS_PLATFORM) || (defined WIN_PLATFORM)
31 constexpr int EBADR = 53;
32 constexpr int EBADFD = 77;
33 constexpr int ERESTART = 85;
34 #endif
35 #ifdef WIN_PLATFORM
36 constexpr int EDQUOT = 122;
37 #endif
38 constexpr int UNKROWN_ERR = -1;
39 constexpr int NO_TASK_ERR = -2;
40 constexpr int CANCEL_ERR = -3;
41 constexpr int ERRNO_NOERR = 0;
42 constexpr int ECONNECTIONFAIL = 45;
43 constexpr int ECONNECTIONABORT = 46;
44 constexpr int STORAGE_SERVICE_SYS_CAP_TAG = 13600000;
45 constexpr int FILEIO_SYS_CAP_TAG = 13900000;
46 constexpr int USER_FILE_MANAGER_SYS_CAP_TAG = 14000000;
47 constexpr int USER_FILE_SERVICE_SYS_CAP_TAG = 14300000;
48 constexpr int DISTRIBUTEDFILE_SERVICE_SYS_CAP_TAG = 22400000;
49 constexpr int SOFTBUS_TRANS_FILE_PERMISSION_DENIED = -426114938;
50 constexpr int SOFTBUS_TRANS_FILE_DISK_QUOTA_EXCEEDED = -426114937;
51 constexpr int SOFTBUS_TRANS_FILE_NO_MEMORY = -426114936;
52 constexpr int SOFTBUS_TRANS_FILE_NETWORK_ERROR = -426114935;
53 constexpr int SOFTBUS_TRANS_FILE_NOT_FOUND = -426114934;
54 constexpr int SOFTBUS_TRANS_FILE_EXISTED = -426114933;
55 constexpr int DFS_CANCEL_SUCCESS = 204;
56 const std::string FILEIO_TAG_ERR_CODE = "code";
57 const std::string FILEIO_TAG_ERR_DATA = "data";
58 
59 enum ErrCodeSuffixOfFileIO {
60     E_PERM = 1,
61     E_NOENT,
62     E_SRCH,
63     E_INTR,
64     E_IO,
65     E_NXIO,
66     E_2BIG,
67     E_BADF,
68     E_CHILD,
69     E_AGAIN,
70     E_NOMEM,
71     E_ACCES,
72     E_FAULT,
73     E_BUSY,
74     E_EXIST,
75     E_XDEV,
76     E_NODEV,
77     E_NOTDIR,
78     E_ISDIR,
79     E_INVAL,
80     E_NFILE,
81     E_MFILE,
82     E_TXTBSY,
83     E_FBIG,
84     E_NOSPC,
85     E_SPIPE,
86     E_ROFS,
87     E_MLINK,
88     E_DEADLK,
89     E_NAMETOOLONG,
90     E_NOSYS,
91     E_NOTEMPTY,
92     E_LOOP,
93     E_WOULDBLOCK,
94     E_BADR,
95     E_NOSTR,
96     E_NODATA,
97     E_OVERFLOW,
98     E_BADFD,
99     E_RESTART,
100     E_DQUOT,
101     E_UKERR,
102     E_NOLCK,
103     E_NETUNREACH,
104     E_CONNECTION_FAIL,
105     E_CONNECTION_ABORT,
106     E_NOTASK,
107     E_UNCANCELED,
108     E_CANCELED,
109 };
110 
111 enum ErrCodeSuffixOfUserFileManager {
112     E_DISPLAYNAME = 1,
113     E_URIM,
114     E_SUFFIX,
115     E_TRASH,
116     E_OPEN_MODE,
117     E_NOT_ALBUM,
118     E_ROOT_DIR,
119     E_MOVE_DENIED,
120     E_RENAME_DENIED,
121     E_RELATIVEPATH,
122     E_INNER_FAIL,
123     E_FILE_TYPE,
124     E_FILE_KEY,
125     E_INPUT
126 };
127 
128 enum ErrCodeSuffixOfStorageService {
129     E_IPCSS = 1,
130     E_NOTSUPPORTEDFS,
131     E_MOUNT,
132     E_UNMOUNT,
133     E_VOLUMESTATE,
134     E_PREPARE,
135     E_DELETE,
136     E_NOOBJECT,
137     E_OUTOFRANGE
138 };
139 
140 enum ErrCodeSuffixOfUserFileService {
141     E_IPCS = 1,
142     E_URIS,
143     E_GETINFO,
144     E_GETRESULT,
145     E_REGISTER,
146     E_REMOVE,
147     E_INIT,
148     E_NOTIFY,
149     E_CONNECT,
150     E_CALLBACK_AND_URI_HAS_NOT_RELATIONS,
151     E_CALLBACK_IS_NOT_REGISTER,
152     E_CAN_NOT_FIND_URI,
153     E_DO_NOT_HAVE_PARENT,
154     E_LOAD_SA,
155     E_COUNT
156 };
157 
158 enum ErrCodeSuffixOfDistributedFile {
159     E_CLOUD_NOT_READY = 1,
160     E_NETWORK_ERR,
161     E_BATTERY_WARNING,
162     E_EXCEED_MAX_LIMIT,
163     E_INNER_ERROR,
164     E_OTHER_TASK_RUNNING,
165     E_VERSION_FILE_NO_EXIST,
166 };
167 
168 enum CommonErrCode {
169     E_PERMISSION = 201,
170     E_PERMISSION_SYS = 202,
171     E_PARAMS = 401,
172     E_DEVICENOTSUPPORT = 801,
173     E_OSNOTSUPPORT = 901,
174     E_UNKNOWN_ERROR = 13900042
175 };
176 
177 static inline std::unordered_map<int, int> softbusErr2ErrCodeTable {
178     {SOFTBUS_TRANS_FILE_PERMISSION_DENIED, EPERM},
179     {SOFTBUS_TRANS_FILE_DISK_QUOTA_EXCEEDED, EIO},
180     {SOFTBUS_TRANS_FILE_NO_MEMORY, ENOMEM},
181     {SOFTBUS_TRANS_FILE_NETWORK_ERROR, ENETUNREACH},
182     {SOFTBUS_TRANS_FILE_NOT_FOUND, ENOENT},
183     {SOFTBUS_TRANS_FILE_EXISTED, EEXIST},
184     {DFS_CANCEL_SUCCESS, ECANCELED},
185 };
186 
187 static inline std::unordered_map<std::string_view, int> uvCode2ErrCodeTable {
188     { "EPERM", EPERM },
189     { "ENOENT", ENOENT },
190     { "ESRCH", ESRCH },
191     { "EINTR", EINTR },
192     { "EIO", EIO },
193     { "ENXIO", ENXIO },
194     { "E2BIG", E2BIG },
195     { "EBADF", EBADF },
196     { "ECHILD", ECHILD },
197     { "EAGAIN", EAGAIN },
198     { "ENOMEM", ENOMEM },
199     { "EACCES", EACCES },
200     { "EFAULT", EFAULT },
201     { "EBUSY", EBUSY },
202     { "EEXIST", EEXIST },
203     { "EXDEV", EXDEV },
204     { "ENODEV", ENODEV },
205     { "ENOTDIR", ENOTDIR },
206     { "EISDIR", EISDIR },
207     { "EINVAL", EINVAL },
208     { "ENFILE", ENFILE },
209     { "EMFILE", EMFILE },
210     { "ETXTBSY", ETXTBSY },
211     { "EFBIG", EFBIG },
212     { "ENOSPC", ENOSPC },
213     { "ESPIPE", ESPIPE },
214     { "EROFS", EROFS },
215     { "EMLINK", EMLINK },
216     { "EDEADLK", EDEADLK },
217     { "ENAMETOOLONG", ENAMETOOLONG },
218     { "ENOSYS", ENOSYS },
219     { "ENOTEMPTY", ENOTEMPTY },
220     { "ELOOP", ELOOP },
221     { "EWOULDBLOCK", EWOULDBLOCK },
222     { "EBADR", EBADR },
223     { "ENOSTR", ENOSTR },
224     { "ENODATA", ENODATA },
225     { "EOVERFLOW", EOVERFLOW },
226     { "EBADFD", EBADFD },
227     { "ERESTART", ERESTART },
228     { "EDQUOT", EDQUOT },
229     { "ENETUNREACH", ENETUNREACH },
230     { "ECONNECTIONFAIL", ECONNECTIONFAIL },
231     { "ECONNECTIONABORT", ECONNECTIONABORT },
232     { "ECANCELED", ECANCELED },
233     { "ECONNABORTED", ECONNABORTED },
234 };
235 
236 static inline std::unordered_map<int, std::pair<int32_t, std::string>> errCodeTable {
237     { ERRNO_NOERR, { ERRNO_NOERR, "No error imformation" } },
238     { EPERM, { FILEIO_SYS_CAP_TAG + E_PERM, "Operation not permitted" } },
239     { ENOENT, { FILEIO_SYS_CAP_TAG + E_NOENT, "No such file or directory" } },
240     { ESRCH, { FILEIO_SYS_CAP_TAG + E_SRCH, "No such process" } },
241     { EINTR, { FILEIO_SYS_CAP_TAG + E_INTR, "Interrupted system call" } },
242     { EIO, { FILEIO_SYS_CAP_TAG + E_IO, "I/O error" } },
243     { ENXIO, { FILEIO_SYS_CAP_TAG + E_NXIO, "No such device or address" } },
244     { E2BIG, { FILEIO_SYS_CAP_TAG + E_2BIG, "Arg list too long" } },
245     { EBADF, { FILEIO_SYS_CAP_TAG + E_BADF, "Bad file descriptor" } },
246     { ECHILD, { FILEIO_SYS_CAP_TAG + E_CHILD, "No child processes" } },
247     { EAGAIN, { FILEIO_SYS_CAP_TAG + E_AGAIN, "Try again" } },
248     { ENOMEM, { FILEIO_SYS_CAP_TAG + E_NOMEM, "Out of memory" } },
249     { EACCES, { FILEIO_SYS_CAP_TAG + E_ACCES, "Permission denied" } },
250     { EFAULT, { FILEIO_SYS_CAP_TAG + E_FAULT, "Bad address" } },
251     { EBUSY, { FILEIO_SYS_CAP_TAG + E_BUSY, "Device or resource busy" } },
252     { EEXIST, { FILEIO_SYS_CAP_TAG + E_EXIST, "File exists" } },
253     { EXDEV, { FILEIO_SYS_CAP_TAG + E_XDEV, "Cross-device link" } },
254     { ENODEV, { FILEIO_SYS_CAP_TAG + E_NODEV, "No such device" } },
255     { ENOTDIR, { FILEIO_SYS_CAP_TAG + E_NOTDIR, "Not a directory" } },
256     { EISDIR, { FILEIO_SYS_CAP_TAG + E_ISDIR, "Is a directory" } },
257     { EINVAL, { FILEIO_SYS_CAP_TAG + E_INVAL, "Invalid argument" } },
258     { ENFILE, { FILEIO_SYS_CAP_TAG + E_NFILE, "File table overflow" } },
259     { EMFILE, { FILEIO_SYS_CAP_TAG + E_MFILE, "Too many open files" } },
260     { ETXTBSY, { FILEIO_SYS_CAP_TAG + E_TXTBSY, "Text file busy" } },
261     { EFBIG, { FILEIO_SYS_CAP_TAG + E_FBIG, "File too large" } },
262     { ENOSPC, { FILEIO_SYS_CAP_TAG + E_NOSPC, "No space left on device" } },
263     { ESPIPE, { FILEIO_SYS_CAP_TAG + E_SPIPE, "Illegal seek" } },
264     { EROFS, { FILEIO_SYS_CAP_TAG + E_ROFS, "Read-only file system" } },
265     { EMLINK, { FILEIO_SYS_CAP_TAG + E_MLINK, "Too many links" } },
266     { EDEADLK, { FILEIO_SYS_CAP_TAG + E_DEADLK, "Resource deadlock would occur" } },
267     { ENAMETOOLONG, { FILEIO_SYS_CAP_TAG + E_NAMETOOLONG, "File name too long" } },
268     { ENOSYS, { FILEIO_SYS_CAP_TAG + E_NOSYS, "Function not implemented" } },
269     { ENOTEMPTY, { FILEIO_SYS_CAP_TAG + E_NOTEMPTY, "Directory not empty" } },
270     { ELOOP, { FILEIO_SYS_CAP_TAG + E_LOOP, "Too many symbolic links encountered" } },
271     { EWOULDBLOCK, { FILEIO_SYS_CAP_TAG + E_WOULDBLOCK, "Operation would block" } },
272     { EBADR, { FILEIO_SYS_CAP_TAG + E_BADR, "Invalid request descriptor" } },
273     { ENOSTR, { FILEIO_SYS_CAP_TAG + E_NOSTR, "Device not a stream" } },
274     { ENODATA, { FILEIO_SYS_CAP_TAG + E_NODATA, "No data available" } },
275     { EOVERFLOW, { FILEIO_SYS_CAP_TAG + E_OVERFLOW, "Value too large for defined data type" } },
276     { EBADFD, { FILEIO_SYS_CAP_TAG + E_BADFD, "File descriptor in bad state" } },
277     { ERESTART, { FILEIO_SYS_CAP_TAG + E_RESTART, "Interrupted system call should be restarted" } },
278     { EDQUOT, { FILEIO_SYS_CAP_TAG + E_DQUOT, "Quota exceeded" } },
279     { UNKROWN_ERR, { FILEIO_SYS_CAP_TAG + E_UKERR, "Unknown error. Possible causes: 1.Insufficient memory."
280         "2.Memory operation error. 3.Null pointer. 4.Failed to obtain expected resources." } },
281     { ENOLCK, { FILEIO_SYS_CAP_TAG + E_NOLCK, "No record locks available" } },
282     { ENETUNREACH, { FILEIO_SYS_CAP_TAG + E_NETUNREACH, "Network is unreachable" } },
283     { ECONNECTIONFAIL, { FILEIO_SYS_CAP_TAG + E_CONNECTION_FAIL, "Connection failed" } },
284     { ECONNECTIONABORT, { FILEIO_SYS_CAP_TAG + E_CONNECTION_ABORT,
285         "Software caused connection abort" } },
286     { ECONNABORTED, { FILEIO_SYS_CAP_TAG + E_CONNECTION_ABORT,
287         "Software caused connection abort" } },
288     { NO_TASK_ERR, { FILEIO_SYS_CAP_TAG + E_NOTASK, "No task can be canceled" } },
289     { CANCEL_ERR, { FILEIO_SYS_CAP_TAG + E_UNCANCELED, "Failed to cancel" } },
290     { ECANCELED, { FILEIO_SYS_CAP_TAG + E_CANCELED, "Operation canceled" } },
291     { FILEIO_SYS_CAP_TAG + E_PERM, { FILEIO_SYS_CAP_TAG + E_PERM, "Operation not permitted" } },
292     { FILEIO_SYS_CAP_TAG + E_NOENT, { FILEIO_SYS_CAP_TAG + E_NOENT, "No such file or directory" } },
293     { FILEIO_SYS_CAP_TAG + E_SRCH, { FILEIO_SYS_CAP_TAG + E_SRCH, "No such process" } },
294     { FILEIO_SYS_CAP_TAG + E_INTR, { FILEIO_SYS_CAP_TAG + E_INTR, "Interrupted system call" } },
295     { FILEIO_SYS_CAP_TAG + E_IO, { FILEIO_SYS_CAP_TAG + E_IO, "I/O error" } },
296     { FILEIO_SYS_CAP_TAG + E_NXIO, { FILEIO_SYS_CAP_TAG + E_NXIO, "No such device or address" } },
297     { FILEIO_SYS_CAP_TAG + E_2BIG, { FILEIO_SYS_CAP_TAG + E_2BIG, "Arg list too long" } },
298     { FILEIO_SYS_CAP_TAG + E_BADF, { FILEIO_SYS_CAP_TAG + E_BADF, "Bad file descriptor" } },
299     { FILEIO_SYS_CAP_TAG + E_CHILD, { FILEIO_SYS_CAP_TAG + E_CHILD, "No child processes" } },
300     { FILEIO_SYS_CAP_TAG + E_AGAIN, { FILEIO_SYS_CAP_TAG + E_AGAIN, "Try again" } },
301     { FILEIO_SYS_CAP_TAG + E_NOMEM, { FILEIO_SYS_CAP_TAG + E_NOMEM, "Out of memory" } },
302     { FILEIO_SYS_CAP_TAG + E_ACCES, { FILEIO_SYS_CAP_TAG + E_ACCES, "Permission denied" } },
303     { FILEIO_SYS_CAP_TAG + E_FAULT, { FILEIO_SYS_CAP_TAG + E_FAULT, "Bad address" } },
304     { FILEIO_SYS_CAP_TAG + E_BUSY, { FILEIO_SYS_CAP_TAG + E_BUSY, "Device or resource busy" } },
305     { FILEIO_SYS_CAP_TAG + E_EXIST, { FILEIO_SYS_CAP_TAG + E_EXIST, "File exists" } },
306     { FILEIO_SYS_CAP_TAG + E_XDEV, { FILEIO_SYS_CAP_TAG + E_XDEV, "Cross-device link" } },
307     { FILEIO_SYS_CAP_TAG + E_NODEV, { FILEIO_SYS_CAP_TAG + E_NODEV, "No such device" } },
308     { FILEIO_SYS_CAP_TAG + E_NOTDIR, { FILEIO_SYS_CAP_TAG + E_NOTDIR, "Not a directory" } },
309     { FILEIO_SYS_CAP_TAG + E_ISDIR, { FILEIO_SYS_CAP_TAG + E_ISDIR, "Is a directory" } },
310     { FILEIO_SYS_CAP_TAG + E_INVAL, { FILEIO_SYS_CAP_TAG + E_INVAL, "Invalid argument" } },
311     { FILEIO_SYS_CAP_TAG + E_NFILE, { FILEIO_SYS_CAP_TAG + E_NFILE, "File table overflow" } },
312     { FILEIO_SYS_CAP_TAG + E_MFILE, { FILEIO_SYS_CAP_TAG + E_MFILE, "Too many open files" } },
313     { FILEIO_SYS_CAP_TAG + E_TXTBSY, { FILEIO_SYS_CAP_TAG + E_TXTBSY, "Text file busy" } },
314     { FILEIO_SYS_CAP_TAG + E_FBIG, { FILEIO_SYS_CAP_TAG + E_FBIG, "File too large" } },
315     { FILEIO_SYS_CAP_TAG + E_NOSPC, { FILEIO_SYS_CAP_TAG + E_NOSPC, "No space left on device" } },
316     { FILEIO_SYS_CAP_TAG + E_SPIPE, { FILEIO_SYS_CAP_TAG + E_SPIPE, "Illegal seek" } },
317     { FILEIO_SYS_CAP_TAG + E_ROFS, { FILEIO_SYS_CAP_TAG + E_ROFS, "Read-only file system" } },
318     { FILEIO_SYS_CAP_TAG + E_MLINK, { FILEIO_SYS_CAP_TAG + E_MLINK, "Too many links" } },
319     { FILEIO_SYS_CAP_TAG + E_DEADLK, { FILEIO_SYS_CAP_TAG + E_DEADLK, "Resource deadlock would occur" } },
320     { FILEIO_SYS_CAP_TAG + E_NAMETOOLONG, { FILEIO_SYS_CAP_TAG + E_NAMETOOLONG, "File name too long" } },
321     { FILEIO_SYS_CAP_TAG + E_NOSYS, { FILEIO_SYS_CAP_TAG + E_NOSYS, "Function not implemented" } },
322     { FILEIO_SYS_CAP_TAG + E_NOTEMPTY, { FILEIO_SYS_CAP_TAG + E_NOTEMPTY, "Directory not empty" } },
323     { FILEIO_SYS_CAP_TAG + E_LOOP, { FILEIO_SYS_CAP_TAG + E_LOOP, "Too many symbolic links encountered" } },
324     { FILEIO_SYS_CAP_TAG + E_WOULDBLOCK, { FILEIO_SYS_CAP_TAG + E_WOULDBLOCK, "Operation would block" } },
325     { FILEIO_SYS_CAP_TAG + E_BADR, { FILEIO_SYS_CAP_TAG + E_BADR, "Invalid request descriptor" } },
326     { FILEIO_SYS_CAP_TAG + E_NOSTR, { FILEIO_SYS_CAP_TAG + E_NOSTR, "Device not a stream" } },
327     { FILEIO_SYS_CAP_TAG + E_NODATA, { FILEIO_SYS_CAP_TAG + E_NODATA, "No data available" } },
328     { FILEIO_SYS_CAP_TAG + E_OVERFLOW, { FILEIO_SYS_CAP_TAG + E_OVERFLOW, "Value too large for defined data type" } },
329     { FILEIO_SYS_CAP_TAG + E_BADFD, { FILEIO_SYS_CAP_TAG + E_BADFD, "File descriptor in bad state" } },
330     { FILEIO_SYS_CAP_TAG + E_RESTART, { FILEIO_SYS_CAP_TAG + E_RESTART,
331         "Interrupted system call should be restarted" } },
332     { FILEIO_SYS_CAP_TAG + E_DQUOT, { FILEIO_SYS_CAP_TAG + E_DQUOT, "Quota exceeded" } },
333     { FILEIO_SYS_CAP_TAG + E_UKERR, { FILEIO_SYS_CAP_TAG + E_UKERR, "Unknown error. Possible causes:"
334         "1.Insufficient memory. 2.Memory operation error. 3.Null pointer. 4.Failed to obtain expected resources." } },
335     { FILEIO_SYS_CAP_TAG + E_NOLCK, { FILEIO_SYS_CAP_TAG + E_NOLCK, "No record locks available" } },
336     { FILEIO_SYS_CAP_TAG + E_NETUNREACH, { FILEIO_SYS_CAP_TAG + E_NETUNREACH, "Network is unreachable" } },
337     { FILEIO_SYS_CAP_TAG + E_CONNECTION_FAIL, { FILEIO_SYS_CAP_TAG + E_CONNECTION_FAIL, "Connection failed" } },
338     { FILEIO_SYS_CAP_TAG + E_CONNECTION_ABORT, { FILEIO_SYS_CAP_TAG + E_CONNECTION_ABORT,
339         "Software caused connection abort" } },
340     { USER_FILE_MANAGER_SYS_CAP_TAG + E_DISPLAYNAME, { USER_FILE_MANAGER_SYS_CAP_TAG + E_DISPLAYNAME,
341         "Invalid display name" } },
342     { USER_FILE_MANAGER_SYS_CAP_TAG + E_URIM, { USER_FILE_MANAGER_SYS_CAP_TAG + E_URIM, "Invalid uri" } },
343     { USER_FILE_MANAGER_SYS_CAP_TAG + E_SUFFIX, { USER_FILE_MANAGER_SYS_CAP_TAG + E_SUFFIX,
344         "Invalid file extension" } },
345     { USER_FILE_MANAGER_SYS_CAP_TAG + E_TRASH, { USER_FILE_MANAGER_SYS_CAP_TAG + E_TRASH,
346         "File has been put into trash bin" } },
347     { USER_FILE_MANAGER_SYS_CAP_TAG + E_OPEN_MODE, { USER_FILE_MANAGER_SYS_CAP_TAG + E_OPEN_MODE,
348         "Invalid open mode" } },
349     { USER_FILE_MANAGER_SYS_CAP_TAG + E_NOT_ALBUM, { USER_FILE_MANAGER_SYS_CAP_TAG + E_NOT_ALBUM,
350         "The uri is not album" } },
351     { USER_FILE_MANAGER_SYS_CAP_TAG + E_ROOT_DIR, { USER_FILE_MANAGER_SYS_CAP_TAG + E_ROOT_DIR,
352         "Invalid root dir" } },
353     { USER_FILE_MANAGER_SYS_CAP_TAG + E_MOVE_DENIED, { USER_FILE_MANAGER_SYS_CAP_TAG + E_MOVE_DENIED,
354         "Failed to move as dir check failed" } },
355     { USER_FILE_MANAGER_SYS_CAP_TAG + E_RENAME_DENIED, { USER_FILE_MANAGER_SYS_CAP_TAG + E_RENAME_DENIED,
356         "Failed to rename as dir check failed" } },
357     { USER_FILE_MANAGER_SYS_CAP_TAG + E_RELATIVEPATH, { USER_FILE_MANAGER_SYS_CAP_TAG + E_RELATIVEPATH,
358         "Relative path not exist or invalid" } },
359     { USER_FILE_MANAGER_SYS_CAP_TAG + E_INNER_FAIL, { USER_FILE_MANAGER_SYS_CAP_TAG + E_INNER_FAIL,
360         "MediaLibrary inner fail" } },
361     { USER_FILE_MANAGER_SYS_CAP_TAG + E_FILE_TYPE, { USER_FILE_MANAGER_SYS_CAP_TAG + E_FILE_TYPE,
362         "File type is not allow in the directory" } },
363     { USER_FILE_MANAGER_SYS_CAP_TAG + E_FILE_KEY, { USER_FILE_MANAGER_SYS_CAP_TAG + E_FILE_KEY,
364         "Member not exist" } },
365     { USER_FILE_MANAGER_SYS_CAP_TAG + E_INPUT, { USER_FILE_MANAGER_SYS_CAP_TAG + E_INPUT,
366         "Wrong input parameter" } },
367     { STORAGE_SERVICE_SYS_CAP_TAG + E_IPCSS, { STORAGE_SERVICE_SYS_CAP_TAG + E_IPCSS,
368         "IPC error. Possible causes: 1.IPC failed or timed out. 2.Failed to load the service" } },
369     { STORAGE_SERVICE_SYS_CAP_TAG + E_NOTSUPPORTEDFS, { STORAGE_SERVICE_SYS_CAP_TAG + E_NOTSUPPORTEDFS,
370         "Not supported filesystem" } },
371     { STORAGE_SERVICE_SYS_CAP_TAG + E_MOUNT, { STORAGE_SERVICE_SYS_CAP_TAG + E_MOUNT, "Failed to mount" } },
372     { STORAGE_SERVICE_SYS_CAP_TAG + E_UNMOUNT, { STORAGE_SERVICE_SYS_CAP_TAG + E_UNMOUNT, "Failed to unmount" } },
373     { STORAGE_SERVICE_SYS_CAP_TAG + E_VOLUMESTATE, { STORAGE_SERVICE_SYS_CAP_TAG + E_VOLUMESTATE,
374         "Incorrect volume state" } },
375     { STORAGE_SERVICE_SYS_CAP_TAG + E_PREPARE, { STORAGE_SERVICE_SYS_CAP_TAG + E_PREPARE,
376         "Prepare directory or node error" } },
377     { STORAGE_SERVICE_SYS_CAP_TAG + E_DELETE, { STORAGE_SERVICE_SYS_CAP_TAG + E_DELETE,
378         "Delete directory or node error" } },
379     { STORAGE_SERVICE_SYS_CAP_TAG + E_NOOBJECT, { STORAGE_SERVICE_SYS_CAP_TAG + E_NOOBJECT, "No such object" } },
380     { STORAGE_SERVICE_SYS_CAP_TAG + E_OUTOFRANGE, { STORAGE_SERVICE_SYS_CAP_TAG + E_OUTOFRANGE,
381         "User id out of range" } },
382     { STORAGE_SERVICE_SYS_CAP_TAG + E_NOOBJECT, { STORAGE_SERVICE_SYS_CAP_TAG + E_NOOBJECT, "No such object" } },
383     { USER_FILE_SERVICE_SYS_CAP_TAG + E_IPCS, { USER_FILE_SERVICE_SYS_CAP_TAG + E_IPCS, "IPC error" } },
384     { USER_FILE_SERVICE_SYS_CAP_TAG + E_URIS, { USER_FILE_SERVICE_SYS_CAP_TAG + E_URIS, "Invalid uri" } },
385     { USER_FILE_SERVICE_SYS_CAP_TAG + E_GETINFO, { USER_FILE_SERVICE_SYS_CAP_TAG + E_GETINFO,
386         "Fail to get fileextension info" } },
387     { USER_FILE_SERVICE_SYS_CAP_TAG + E_GETRESULT, { USER_FILE_SERVICE_SYS_CAP_TAG + E_GETRESULT,
388         "Get wrong result" } },
389     { USER_FILE_SERVICE_SYS_CAP_TAG + E_REGISTER, { USER_FILE_SERVICE_SYS_CAP_TAG + E_REGISTER,
390         "Fail to register notification" } },
391     { USER_FILE_SERVICE_SYS_CAP_TAG + E_REMOVE, { USER_FILE_SERVICE_SYS_CAP_TAG + E_REMOVE,
392         "Fail to remove notification" } },
393     { USER_FILE_SERVICE_SYS_CAP_TAG + E_INIT, { USER_FILE_SERVICE_SYS_CAP_TAG + E_INIT,
394         "Fail to init notification agent" } },
395     { USER_FILE_SERVICE_SYS_CAP_TAG + E_NOTIFY, { USER_FILE_SERVICE_SYS_CAP_TAG + E_NOTIFY, "Fail to notify agent" } },
396     { USER_FILE_SERVICE_SYS_CAP_TAG + E_CONNECT, { USER_FILE_SERVICE_SYS_CAP_TAG + E_CONNECT,
397         "Fail to connect file access extension ability" } },
398     { USER_FILE_SERVICE_SYS_CAP_TAG + E_CALLBACK_AND_URI_HAS_NOT_RELATIONS, { USER_FILE_SERVICE_SYS_CAP_TAG +
399         E_CALLBACK_AND_URI_HAS_NOT_RELATIONS,
400         "The uri has no relationship with the callback and cannot be unregistered" } },
401     { USER_FILE_SERVICE_SYS_CAP_TAG + E_CALLBACK_IS_NOT_REGISTER, { USER_FILE_SERVICE_SYS_CAP_TAG +
402         E_CALLBACK_IS_NOT_REGISTER, "Cannot unregister the callback that has not been registered" } },
403     { USER_FILE_SERVICE_SYS_CAP_TAG + E_CAN_NOT_FIND_URI, { USER_FILE_SERVICE_SYS_CAP_TAG + E_CAN_NOT_FIND_URI,
404         "Can not find registered uri" } },
405     { USER_FILE_SERVICE_SYS_CAP_TAG + E_DO_NOT_HAVE_PARENT, { USER_FILE_SERVICE_SYS_CAP_TAG + E_DO_NOT_HAVE_PARENT,
406         "Do not have parent uri" } },
407     { USER_FILE_SERVICE_SYS_CAP_TAG + E_LOAD_SA, { USER_FILE_SERVICE_SYS_CAP_TAG + E_LOAD_SA,
408         "Fail to load system ability" } },
409     { USER_FILE_SERVICE_SYS_CAP_TAG + E_COUNT, { USER_FILE_SERVICE_SYS_CAP_TAG + E_COUNT, "Too many records" } },
410     { E_PERMISSION, { E_PERMISSION, "Permission verification failed" } },
411     { E_PERMISSION_SYS, { E_PERMISSION_SYS, "The caller is not a system application" } },
412     { E_PARAMS, { E_PARAMS, "The input parameter is invalid" } },
413     { E_DEVICENOTSUPPORT, { E_DEVICENOTSUPPORT, "The device doesn't support this api" } },
414     { E_OSNOTSUPPORT, { E_OSNOTSUPPORT, "The os doesn't support this api" } },
415     { DISTRIBUTEDFILE_SERVICE_SYS_CAP_TAG + E_CLOUD_NOT_READY, { DISTRIBUTEDFILE_SERVICE_SYS_CAP_TAG +
416         E_CLOUD_NOT_READY, "Cloud status not ready" } },
417     { DISTRIBUTEDFILE_SERVICE_SYS_CAP_TAG + E_NETWORK_ERR, { DISTRIBUTEDFILE_SERVICE_SYS_CAP_TAG +
418         E_NETWORK_ERR, "Network unavailable" } },
419     { DISTRIBUTEDFILE_SERVICE_SYS_CAP_TAG + E_BATTERY_WARNING, { DISTRIBUTEDFILE_SERVICE_SYS_CAP_TAG +
420         E_BATTERY_WARNING, "Battery level warning" } },
421     { DISTRIBUTEDFILE_SERVICE_SYS_CAP_TAG + E_EXCEED_MAX_LIMIT, { DISTRIBUTEDFILE_SERVICE_SYS_CAP_TAG +
422         E_EXCEED_MAX_LIMIT, "Exceed the maximum limit" } },
423     { DISTRIBUTEDFILE_SERVICE_SYS_CAP_TAG + E_INNER_ERROR, { DISTRIBUTEDFILE_SERVICE_SYS_CAP_TAG +
424         E_INNER_ERROR, "Inner error. Possible causes: 1.Failed to access the database or execute the SQL statement."
425         "2.System error, such as a null pointer, insufficient memory or a JS engine exception." } },
426     { DISTRIBUTEDFILE_SERVICE_SYS_CAP_TAG + E_OTHER_TASK_RUNNING, { DISTRIBUTEDFILE_SERVICE_SYS_CAP_TAG +
427         E_OTHER_TASK_RUNNING, "The same task is already in progress" } },
428     { DISTRIBUTEDFILE_SERVICE_SYS_CAP_TAG + E_VERSION_FILE_NO_EXIST, { DISTRIBUTEDFILE_SERVICE_SYS_CAP_TAG +
429         E_VERSION_FILE_NO_EXIST, "The version file specified to replace the original file does not exist." } },
430 
431 };
432 
433 class NError {
434 public:
435     NError();
436     NError(int ePosix);
437     NError(std::function<std::tuple<uint32_t, std::string>()> errGen);
438     ~NError() = default;
439     explicit operator bool() const;
440     napi_value GetNapiErr(napi_env env);
441     napi_value GetNapiErr(napi_env env, int errCode);
442     napi_value GetNapiErrAddData(napi_env env, int errCode, napi_value data);
443     void ThrowErr(napi_env env);
444     void ThrowErr(napi_env env, int errCode);
445     void ThrowErr(napi_env env, std::string errMsg);
446     void ThrowErrAddData(napi_env env, int errCode, napi_value data);
447 
448 private:
449     int errno_ = ERRNO_NOERR;
450     std::string errMsg_;
451 };
452 } // namespace LibN
453 } // namespace FileManagement
454 } // namespace OHOS
455 
456 #endif // FILEMGMT_LIBN_N_ERROR_H
457