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