1 /*
2  * Copyright (c) 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 OHOS_FILE_FS_UNI_ERROR_H
17 #define OHOS_FILE_FS_UNI_ERROR_H
18 
19 #include "macro.h"
20 #include "uv.h"
21 
22 #include <cstring>
23 #include <string>
24 #include <unordered_map>
25 
26 namespace OHOS {
27 namespace CJSystemapi {
28 namespace FileFs {
29 
30 constexpr int UNKNOWN_ERR = -1;
31 constexpr int STORAGE_SERVICE_SYS_CAP_TAG = 13600000;
32 constexpr int FILEIO_SYS_CAP_TAG = 13900000;
33 constexpr int USER_FILE_MANAGER_SYS_CAP_TAG = 14000000;
34 constexpr int USER_FILE_SERVICE_SYS_CAP_TAG = 14300000;
35 constexpr int DISTRIBUTEDFILE_SERVICE_SYS_CAP_TAG = 22400000;
36 
37 enum ErrCodeSuffixOfFileIO {
38     E_PERM = 1,
39     E_NOENT,
40     E_SRCH,
41     E_INTR,
42     E_IO,
43     E_NXIO,
44     E_2BIG,
45     E_BADF,
46     E_CHILD,
47     E_AGAIN,
48     E_NOMEM,
49     E_ACCES,
50     E_FAULT,
51     E_BUSY,
52     E_EXIST,
53     E_XDEV,
54     E_NODEV,
55     E_NOTDIR,
56     E_ISDIR,
57     E_INVAL,
58     E_NFILE,
59     E_MFILE,
60     E_TXTBSY,
61     E_FBIG,
62     E_NOSPC,
63     E_SPIPE,
64     E_ROFS,
65     E_MLINK,
66     E_DEADLK,
67     E_NAMETOOLONG,
68     E_NOSYS,
69     E_NOTEMPTY,
70     E_LOOP,
71     E_WOULDBLOCK,
72     E_BADR,
73     E_NOSTR,
74     E_NODATA,
75     E_OVERFLOW,
76     E_BADFD,
77     E_RESTART,
78     E_DQUOT,
79     E_UKERR,
80     E_NOLCK
81 };
82 
83 enum ErrCodeSuffixOfUserFileManager {
84     E_DISPLAYNAME = 1,
85     E_URIM,
86     E_SUFFIX,
87     E_TRASH,
88     E_OPEN_MODE,
89     E_NOT_ALBUM,
90     E_ROOT_DIR,
91     E_MOVE_DENIED,
92     E_RENAME_DENIED,
93     E_RELATIVEPATH,
94     E_INNER_FAIL,
95     E_FILE_TYPE,
96     E_FILE_KEY,
97     E_INPUT
98 };
99 
100 enum ErrCodeSuffixOfStorageService {
101     E_IPCSS = 1,
102     E_NOTSUPPORTEDFS,
103     E_MOUNT,
104     E_UNMOUNT,
105     E_VOLUMESTATE,
106     E_PREPARE,
107     E_DELETE,
108     E_NOOBJECT,
109     E_OUTOFRANGE
110 };
111 
112 enum ErrCodeSuffixOfUserFileService {
113     E_IPCS = 1,
114     E_URIS,
115     E_GETINFO,
116     E_GETRESULT,
117     E_REGISTER,
118     E_REMOVE,
119     E_INIT,
120     E_NOTIFY,
121     E_CONNECT
122 };
123 
124 enum ErrCodeSuffixOfDistributedFile {
125     E_CLOUD_NOT_READY = 1,
126     E_NETWORK_ERR,
127     E_BATTERY_WARNING
128 };
129 
130 enum CommonErrCode {
131     E_PERMISSION = 201,
132     E_PERMISSION_SYS = 202,
133     E_PARAMS = 401,
134     E_DEVICENOTSUPPORT = 801,
135     E_OSNOTSUPPORT = 901
136 };
137 
138 const std::unordered_map<std::string, int> uvCode2ErrCodeTable {
139     { "EPERM", EPERM },
140     { "ENOENT", ENOENT },
141     { "ESRCH", ESRCH },
142     { "EINTR", EINTR },
143     { "EIO", EIO },
144     { "ENXIO", ENXIO },
145     { "E2BIG", E2BIG },
146     { "EBADF", EBADF },
147     { "ECHILD", ECHILD },
148     { "EAGAIN", EAGAIN },
149     { "ENOMEM", ENOMEM },
150     { "EACCES", EACCES },
151     { "EFAULT", EFAULT },
152     { "EBUSY", EBUSY },
153     { "EEXIST", EEXIST },
154     { "EXDEV", EXDEV },
155     { "ENODEV", ENODEV },
156     { "ENOTDIR", ENOTDIR },
157     { "EISDIR", EISDIR },
158     { "EINVAL", EINVAL },
159     { "ENFILE", ENFILE },
160     { "EMFILE", EMFILE },
161     { "ETXTBSY", ETXTBSY },
162     { "EFBIG", EFBIG },
163     { "ENOSPC", ENOSPC },
164     { "ESPIPE", ESPIPE },
165     { "EROFS", EROFS },
166     { "EMLINK", EMLINK },
167     { "EDEADLK", EDEADLK },
168     { "ENAMETOOLONG", ENAMETOOLONG },
169     { "ENOSYS", ENOSYS },
170     { "ENOTEMPTY", ENOTEMPTY },
171     { "ELOOP", ELOOP },
172     { "EWOULDBLOCK", EWOULDBLOCK },
173     { "EBADR", EBADR },
174     { "ENOSTR", ENOSTR },
175     { "ENODATA", ENODATA },
176     { "EOVERFLOW", EOVERFLOW },
177     { "EBADFD", EBADFD },
178     { "ERESTART", ERESTART },
179     { "EDQUOT", EDQUOT },
180 };
181 
182 inline std::unordered_map<int, int32_t> errCodeTable {
183     { EPERM, FILEIO_SYS_CAP_TAG + E_PERM},
184     { ENOENT, FILEIO_SYS_CAP_TAG + E_NOENT},
185     { ESRCH, FILEIO_SYS_CAP_TAG + E_SRCH},
186     { EINTR, FILEIO_SYS_CAP_TAG + E_INTR},
187     { EIO, FILEIO_SYS_CAP_TAG + E_IO},
188     { ENXIO, FILEIO_SYS_CAP_TAG + E_NXIO},
189     { E2BIG, FILEIO_SYS_CAP_TAG + E_2BIG},
190     { EBADF, FILEIO_SYS_CAP_TAG + E_BADF},
191     { ECHILD, FILEIO_SYS_CAP_TAG + E_CHILD},
192     { EAGAIN, FILEIO_SYS_CAP_TAG + E_AGAIN},
193     { ENOMEM, FILEIO_SYS_CAP_TAG + E_NOMEM},
194     { EACCES, FILEIO_SYS_CAP_TAG + E_ACCES},
195     { EFAULT, FILEIO_SYS_CAP_TAG + E_FAULT},
196     { EBUSY, FILEIO_SYS_CAP_TAG + E_BUSY},
197     { EEXIST, FILEIO_SYS_CAP_TAG + E_EXIST},
198     { EXDEV, FILEIO_SYS_CAP_TAG + E_XDEV},
199     { ENODEV, FILEIO_SYS_CAP_TAG + E_NODEV},
200     { ENOTDIR, FILEIO_SYS_CAP_TAG + E_NOTDIR},
201     { EISDIR, FILEIO_SYS_CAP_TAG + E_ISDIR},
202     { EINVAL, FILEIO_SYS_CAP_TAG + E_INVAL},
203     { ENFILE, FILEIO_SYS_CAP_TAG + E_NFILE},
204     { EMFILE, FILEIO_SYS_CAP_TAG + E_MFILE},
205     { ETXTBSY, FILEIO_SYS_CAP_TAG + E_TXTBSY},
206     { EFBIG, FILEIO_SYS_CAP_TAG + E_FBIG},
207     { ENOSPC, FILEIO_SYS_CAP_TAG + E_NOSPC},
208     { ESPIPE, FILEIO_SYS_CAP_TAG + E_SPIPE},
209     { EROFS, FILEIO_SYS_CAP_TAG + E_ROFS},
210     { EMLINK, FILEIO_SYS_CAP_TAG + E_MLINK},
211     { EDEADLK, FILEIO_SYS_CAP_TAG + E_DEADLK},
212     { ENAMETOOLONG, FILEIO_SYS_CAP_TAG + E_NAMETOOLONG},
213     { ENOSYS, FILEIO_SYS_CAP_TAG + E_NOSYS},
214     { ENOTEMPTY, FILEIO_SYS_CAP_TAG + E_NOTEMPTY},
215     { ELOOP, FILEIO_SYS_CAP_TAG + E_LOOP},
216     { EWOULDBLOCK, FILEIO_SYS_CAP_TAG + E_WOULDBLOCK},
217     { EBADR, FILEIO_SYS_CAP_TAG + E_BADR},
218     { ENOSTR, FILEIO_SYS_CAP_TAG + E_NOSTR},
219     { ENODATA, FILEIO_SYS_CAP_TAG + E_NODATA},
220     { EOVERFLOW, FILEIO_SYS_CAP_TAG + E_OVERFLOW},
221     { EBADFD, FILEIO_SYS_CAP_TAG + E_BADFD},
222     { ERESTART, FILEIO_SYS_CAP_TAG + E_RESTART},
223     { EDQUOT, FILEIO_SYS_CAP_TAG + E_DQUOT},
224     { UNKNOWN_ERR, FILEIO_SYS_CAP_TAG + E_UKERR},
225     { ENOLCK, FILEIO_SYS_CAP_TAG + E_NOLCK},
226     { FILEIO_SYS_CAP_TAG + E_PERM, FILEIO_SYS_CAP_TAG + E_PERM},
227     { FILEIO_SYS_CAP_TAG + E_NOENT, FILEIO_SYS_CAP_TAG + E_NOENT},
228     { FILEIO_SYS_CAP_TAG + E_SRCH, FILEIO_SYS_CAP_TAG + E_SRCH},
229     { FILEIO_SYS_CAP_TAG + E_INTR, FILEIO_SYS_CAP_TAG + E_INTR},
230     { FILEIO_SYS_CAP_TAG + E_IO, FILEIO_SYS_CAP_TAG + E_IO},
231     { FILEIO_SYS_CAP_TAG + E_NXIO, FILEIO_SYS_CAP_TAG + E_NXIO},
232     { FILEIO_SYS_CAP_TAG + E_2BIG, FILEIO_SYS_CAP_TAG + E_2BIG},
233     { FILEIO_SYS_CAP_TAG + E_BADF, FILEIO_SYS_CAP_TAG + E_BADF},
234     { FILEIO_SYS_CAP_TAG + E_CHILD, FILEIO_SYS_CAP_TAG + E_CHILD},
235     { FILEIO_SYS_CAP_TAG + E_AGAIN, FILEIO_SYS_CAP_TAG + E_AGAIN},
236     { FILEIO_SYS_CAP_TAG + E_NOMEM, FILEIO_SYS_CAP_TAG + E_NOMEM},
237     { FILEIO_SYS_CAP_TAG + E_ACCES, FILEIO_SYS_CAP_TAG + E_ACCES},
238     { FILEIO_SYS_CAP_TAG + E_FAULT, FILEIO_SYS_CAP_TAG + E_FAULT},
239     { FILEIO_SYS_CAP_TAG + E_BUSY, FILEIO_SYS_CAP_TAG + E_BUSY},
240     { FILEIO_SYS_CAP_TAG + E_EXIST, FILEIO_SYS_CAP_TAG + E_EXIST},
241     { FILEIO_SYS_CAP_TAG + E_XDEV, FILEIO_SYS_CAP_TAG + E_XDEV},
242     { FILEIO_SYS_CAP_TAG + E_NODEV, FILEIO_SYS_CAP_TAG + E_NODEV},
243     { FILEIO_SYS_CAP_TAG + E_NOTDIR, FILEIO_SYS_CAP_TAG + E_NOTDIR},
244     { FILEIO_SYS_CAP_TAG + E_ISDIR, FILEIO_SYS_CAP_TAG + E_ISDIR},
245     { FILEIO_SYS_CAP_TAG + E_INVAL, FILEIO_SYS_CAP_TAG + E_INVAL},
246     { FILEIO_SYS_CAP_TAG + E_NFILE, FILEIO_SYS_CAP_TAG + E_NFILE},
247     { FILEIO_SYS_CAP_TAG + E_MFILE, FILEIO_SYS_CAP_TAG + E_MFILE},
248     { FILEIO_SYS_CAP_TAG + E_TXTBSY, FILEIO_SYS_CAP_TAG + E_TXTBSY},
249     { FILEIO_SYS_CAP_TAG + E_FBIG, FILEIO_SYS_CAP_TAG + E_FBIG},
250     { FILEIO_SYS_CAP_TAG + E_NOSPC, FILEIO_SYS_CAP_TAG + E_NOSPC},
251     { FILEIO_SYS_CAP_TAG + E_SPIPE, FILEIO_SYS_CAP_TAG + E_SPIPE},
252     { FILEIO_SYS_CAP_TAG + E_ROFS, FILEIO_SYS_CAP_TAG + E_ROFS},
253     { FILEIO_SYS_CAP_TAG + E_MLINK, FILEIO_SYS_CAP_TAG + E_MLINK},
254     { FILEIO_SYS_CAP_TAG + E_DEADLK, FILEIO_SYS_CAP_TAG + E_DEADLK},
255     { FILEIO_SYS_CAP_TAG + E_NAMETOOLONG, FILEIO_SYS_CAP_TAG + E_NAMETOOLONG},
256     { FILEIO_SYS_CAP_TAG + E_NOSYS, FILEIO_SYS_CAP_TAG + E_NOSYS},
257     { FILEIO_SYS_CAP_TAG + E_NOTEMPTY, FILEIO_SYS_CAP_TAG + E_NOTEMPTY},
258     { FILEIO_SYS_CAP_TAG + E_LOOP, FILEIO_SYS_CAP_TAG + E_LOOP},
259     { FILEIO_SYS_CAP_TAG + E_WOULDBLOCK, FILEIO_SYS_CAP_TAG + E_WOULDBLOCK},
260     { FILEIO_SYS_CAP_TAG + E_BADR, FILEIO_SYS_CAP_TAG + E_BADR},
261     { FILEIO_SYS_CAP_TAG + E_NOSTR, FILEIO_SYS_CAP_TAG + E_NOSTR},
262     { FILEIO_SYS_CAP_TAG + E_NODATA, FILEIO_SYS_CAP_TAG + E_NODATA},
263     { FILEIO_SYS_CAP_TAG + E_OVERFLOW, FILEIO_SYS_CAP_TAG + E_OVERFLOW},
264     { FILEIO_SYS_CAP_TAG + E_BADFD, FILEIO_SYS_CAP_TAG + E_BADFD},
265     { FILEIO_SYS_CAP_TAG + E_RESTART, FILEIO_SYS_CAP_TAG + E_RESTART},
266     { FILEIO_SYS_CAP_TAG + E_DQUOT, FILEIO_SYS_CAP_TAG + E_DQUOT},
267     { FILEIO_SYS_CAP_TAG + E_UKERR, FILEIO_SYS_CAP_TAG + E_UKERR},
268     { FILEIO_SYS_CAP_TAG + E_NOLCK, FILEIO_SYS_CAP_TAG + E_NOLCK},
269     { USER_FILE_MANAGER_SYS_CAP_TAG + E_DISPLAYNAME, USER_FILE_MANAGER_SYS_CAP_TAG + E_DISPLAYNAME},
270     { USER_FILE_MANAGER_SYS_CAP_TAG + E_URIM, USER_FILE_MANAGER_SYS_CAP_TAG + E_URIM},
271     { USER_FILE_MANAGER_SYS_CAP_TAG + E_SUFFIX, USER_FILE_MANAGER_SYS_CAP_TAG + E_SUFFIX},
272     { USER_FILE_MANAGER_SYS_CAP_TAG + E_TRASH, USER_FILE_MANAGER_SYS_CAP_TAG + E_TRASH},
273     { USER_FILE_MANAGER_SYS_CAP_TAG + E_OPEN_MODE, USER_FILE_MANAGER_SYS_CAP_TAG + E_OPEN_MODE},
274     { USER_FILE_MANAGER_SYS_CAP_TAG + E_NOT_ALBUM, USER_FILE_MANAGER_SYS_CAP_TAG + E_NOT_ALBUM},
275     { USER_FILE_MANAGER_SYS_CAP_TAG + E_ROOT_DIR, USER_FILE_MANAGER_SYS_CAP_TAG + E_ROOT_DIR},
276     { USER_FILE_MANAGER_SYS_CAP_TAG + E_MOVE_DENIED, USER_FILE_MANAGER_SYS_CAP_TAG + E_MOVE_DENIED},
277     { USER_FILE_MANAGER_SYS_CAP_TAG + E_RENAME_DENIED, USER_FILE_MANAGER_SYS_CAP_TAG + E_RENAME_DENIED},
278     { USER_FILE_MANAGER_SYS_CAP_TAG + E_RELATIVEPATH, USER_FILE_MANAGER_SYS_CAP_TAG + E_RELATIVEPATH},
279     { USER_FILE_MANAGER_SYS_CAP_TAG + E_INNER_FAIL, USER_FILE_MANAGER_SYS_CAP_TAG + E_INNER_FAIL},
280     { USER_FILE_MANAGER_SYS_CAP_TAG + E_FILE_TYPE, USER_FILE_MANAGER_SYS_CAP_TAG + E_FILE_TYPE},
281     { USER_FILE_MANAGER_SYS_CAP_TAG + E_FILE_KEY, USER_FILE_MANAGER_SYS_CAP_TAG + E_FILE_KEY},
282     { USER_FILE_MANAGER_SYS_CAP_TAG + E_INPUT, USER_FILE_MANAGER_SYS_CAP_TAG + E_INPUT},
283     { STORAGE_SERVICE_SYS_CAP_TAG + E_IPCSS, STORAGE_SERVICE_SYS_CAP_TAG + E_IPCSS},
284     { STORAGE_SERVICE_SYS_CAP_TAG + E_NOTSUPPORTEDFS, STORAGE_SERVICE_SYS_CAP_TAG + E_NOTSUPPORTEDFS},
285     { STORAGE_SERVICE_SYS_CAP_TAG + E_MOUNT, STORAGE_SERVICE_SYS_CAP_TAG + E_MOUNT},
286     { STORAGE_SERVICE_SYS_CAP_TAG + E_UNMOUNT, STORAGE_SERVICE_SYS_CAP_TAG + E_UNMOUNT},
287     { STORAGE_SERVICE_SYS_CAP_TAG + E_VOLUMESTATE, STORAGE_SERVICE_SYS_CAP_TAG + E_VOLUMESTATE},
288     { STORAGE_SERVICE_SYS_CAP_TAG + E_PREPARE, STORAGE_SERVICE_SYS_CAP_TAG + E_PREPARE},
289     { STORAGE_SERVICE_SYS_CAP_TAG + E_DELETE, STORAGE_SERVICE_SYS_CAP_TAG + E_DELETE},
290     { STORAGE_SERVICE_SYS_CAP_TAG + E_NOOBJECT, STORAGE_SERVICE_SYS_CAP_TAG + E_NOOBJECT},
291     { STORAGE_SERVICE_SYS_CAP_TAG + E_OUTOFRANGE, STORAGE_SERVICE_SYS_CAP_TAG + E_OUTOFRANGE},
292     { STORAGE_SERVICE_SYS_CAP_TAG + E_NOOBJECT, STORAGE_SERVICE_SYS_CAP_TAG + E_NOOBJECT},
293     { USER_FILE_SERVICE_SYS_CAP_TAG + E_IPCS, USER_FILE_SERVICE_SYS_CAP_TAG + E_IPCS},
294     { USER_FILE_SERVICE_SYS_CAP_TAG + E_URIS, USER_FILE_SERVICE_SYS_CAP_TAG + E_URIS},
295     { USER_FILE_SERVICE_SYS_CAP_TAG + E_GETINFO, USER_FILE_SERVICE_SYS_CAP_TAG + E_GETINFO},
296     { USER_FILE_SERVICE_SYS_CAP_TAG + E_GETRESULT, USER_FILE_SERVICE_SYS_CAP_TAG + E_GETRESULT},
297     { USER_FILE_SERVICE_SYS_CAP_TAG + E_REGISTER, USER_FILE_SERVICE_SYS_CAP_TAG + E_REGISTER},
298     { USER_FILE_SERVICE_SYS_CAP_TAG + E_REMOVE, USER_FILE_SERVICE_SYS_CAP_TAG + E_REMOVE},
299     { USER_FILE_SERVICE_SYS_CAP_TAG + E_INIT, USER_FILE_SERVICE_SYS_CAP_TAG + E_INIT},
300     { USER_FILE_SERVICE_SYS_CAP_TAG + E_NOTIFY, USER_FILE_SERVICE_SYS_CAP_TAG + E_NOTIFY},
301     { USER_FILE_SERVICE_SYS_CAP_TAG + E_CONNECT, USER_FILE_SERVICE_SYS_CAP_TAG + E_CONNECT},
302     { E_PERMISSION, E_PERMISSION},
303     { E_PERMISSION_SYS, E_PERMISSION_SYS},
304     { E_PARAMS, E_PARAMS},
305     { E_DEVICENOTSUPPORT, E_DEVICENOTSUPPORT},
306     { E_OSNOTSUPPORT, E_OSNOTSUPPORT},
307     { DISTRIBUTEDFILE_SERVICE_SYS_CAP_TAG + E_CLOUD_NOT_READY, DISTRIBUTEDFILE_SERVICE_SYS_CAP_TAG + E_CLOUD_NOT_READY},
308     { DISTRIBUTEDFILE_SERVICE_SYS_CAP_TAG + E_NETWORK_ERR, DISTRIBUTEDFILE_SERVICE_SYS_CAP_TAG + E_NETWORK_ERR},
309     { DISTRIBUTEDFILE_SERVICE_SYS_CAP_TAG + E_BATTERY_WARNING, DISTRIBUTEDFILE_SERVICE_SYS_CAP_TAG + E_BATTERY_WARNING},
310 };
311 
312 int ConvertUVCode2ErrCode(int errCode);
313 
314 int GetErrorCode(int errCode);
315 
316 }
317 }
318 }
319 #endif // OHOS_FILE_FS_UNI_ERROR_H