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_DATABASE_FAILED 164 }; 165 166 enum CommonErrCode { 167 E_PERMISSION = 201, 168 E_PERMISSION_SYS = 202, 169 E_PARAMS = 401, 170 E_DEVICENOTSUPPORT = 801, 171 E_OSNOTSUPPORT = 901, 172 E_UNKNOWN_ERROR = 13900042 173 }; 174 175 static inline std::unordered_map<int, int> softbusErr2ErrCodeTable { 176 {SOFTBUS_TRANS_FILE_PERMISSION_DENIED, EPERM}, 177 {SOFTBUS_TRANS_FILE_DISK_QUOTA_EXCEEDED, EIO}, 178 {SOFTBUS_TRANS_FILE_NO_MEMORY, ENOMEM}, 179 {SOFTBUS_TRANS_FILE_NETWORK_ERROR, ENETUNREACH}, 180 {SOFTBUS_TRANS_FILE_NOT_FOUND, ENOENT}, 181 {SOFTBUS_TRANS_FILE_EXISTED, EEXIST}, 182 {DFS_CANCEL_SUCCESS, ECANCELED}, 183 }; 184 185 static inline std::unordered_map<std::string_view, int> uvCode2ErrCodeTable { 186 { "EPERM", EPERM }, 187 { "ENOENT", ENOENT }, 188 { "ESRCH", ESRCH }, 189 { "EINTR", EINTR }, 190 { "EIO", EIO }, 191 { "ENXIO", ENXIO }, 192 { "E2BIG", E2BIG }, 193 { "EBADF", EBADF }, 194 { "ECHILD", ECHILD }, 195 { "EAGAIN", EAGAIN }, 196 { "ENOMEM", ENOMEM }, 197 { "EACCES", EACCES }, 198 { "EFAULT", EFAULT }, 199 { "EBUSY", EBUSY }, 200 { "EEXIST", EEXIST }, 201 { "EXDEV", EXDEV }, 202 { "ENODEV", ENODEV }, 203 { "ENOTDIR", ENOTDIR }, 204 { "EISDIR", EISDIR }, 205 { "EINVAL", EINVAL }, 206 { "ENFILE", ENFILE }, 207 { "EMFILE", EMFILE }, 208 { "ETXTBSY", ETXTBSY }, 209 { "EFBIG", EFBIG }, 210 { "ENOSPC", ENOSPC }, 211 { "ESPIPE", ESPIPE }, 212 { "EROFS", EROFS }, 213 { "EMLINK", EMLINK }, 214 { "EDEADLK", EDEADLK }, 215 { "ENAMETOOLONG", ENAMETOOLONG }, 216 { "ENOSYS", ENOSYS }, 217 { "ENOTEMPTY", ENOTEMPTY }, 218 { "ELOOP", ELOOP }, 219 { "EWOULDBLOCK", EWOULDBLOCK }, 220 { "EBADR", EBADR }, 221 { "ENOSTR", ENOSTR }, 222 { "ENODATA", ENODATA }, 223 { "EOVERFLOW", EOVERFLOW }, 224 { "EBADFD", EBADFD }, 225 { "ERESTART", ERESTART }, 226 { "EDQUOT", EDQUOT }, 227 { "ENETUNREACH", ENETUNREACH }, 228 { "ECONNECTIONFAIL", ECONNECTIONFAIL }, 229 { "ECONNECTIONABORT", ECONNECTIONABORT }, 230 { "ECANCELED", ECANCELED }, 231 }; 232 233 static inline std::unordered_map<int, std::pair<int32_t, std::string>> errCodeTable { 234 { ERRNO_NOERR, { ERRNO_NOERR, "No error imformation" } }, 235 { EPERM, { FILEIO_SYS_CAP_TAG + E_PERM, "Operation not permitted" } }, 236 { ENOENT, { FILEIO_SYS_CAP_TAG + E_NOENT, "No such file or directory" } }, 237 { ESRCH, { FILEIO_SYS_CAP_TAG + E_SRCH, "No such process" } }, 238 { EINTR, { FILEIO_SYS_CAP_TAG + E_INTR, "Interrupted system call" } }, 239 { EIO, { FILEIO_SYS_CAP_TAG + E_IO, "I/O error" } }, 240 { ENXIO, { FILEIO_SYS_CAP_TAG + E_NXIO, "No such device or address" } }, 241 { E2BIG, { FILEIO_SYS_CAP_TAG + E_2BIG, "Arg list too long" } }, 242 { EBADF, { FILEIO_SYS_CAP_TAG + E_BADF, "Bad file descriptor" } }, 243 { ECHILD, { FILEIO_SYS_CAP_TAG + E_CHILD, "No child processes" } }, 244 { EAGAIN, { FILEIO_SYS_CAP_TAG + E_AGAIN, "Try again" } }, 245 { ENOMEM, { FILEIO_SYS_CAP_TAG + E_NOMEM, "Out of memory" } }, 246 { EACCES, { FILEIO_SYS_CAP_TAG + E_ACCES, "Permission denied" } }, 247 { EFAULT, { FILEIO_SYS_CAP_TAG + E_FAULT, "Bad address" } }, 248 { EBUSY, { FILEIO_SYS_CAP_TAG + E_BUSY, "Device or resource busy" } }, 249 { EEXIST, { FILEIO_SYS_CAP_TAG + E_EXIST, "File exists" } }, 250 { EXDEV, { FILEIO_SYS_CAP_TAG + E_XDEV, "Cross-device link" } }, 251 { ENODEV, { FILEIO_SYS_CAP_TAG + E_NODEV, "No such device" } }, 252 { ENOTDIR, { FILEIO_SYS_CAP_TAG + E_NOTDIR, "Not a directory" } }, 253 { EISDIR, { FILEIO_SYS_CAP_TAG + E_ISDIR, "Is a directory" } }, 254 { EINVAL, { FILEIO_SYS_CAP_TAG + E_INVAL, "Invalid argument" } }, 255 { ENFILE, { FILEIO_SYS_CAP_TAG + E_NFILE, "File table overflow" } }, 256 { EMFILE, { FILEIO_SYS_CAP_TAG + E_MFILE, "Too many open files" } }, 257 { ETXTBSY, { FILEIO_SYS_CAP_TAG + E_TXTBSY, "Text file busy" } }, 258 { EFBIG, { FILEIO_SYS_CAP_TAG + E_FBIG, "File too large" } }, 259 { ENOSPC, { FILEIO_SYS_CAP_TAG + E_NOSPC, "No space left on device" } }, 260 { ESPIPE, { FILEIO_SYS_CAP_TAG + E_SPIPE, "Illegal seek" } }, 261 { EROFS, { FILEIO_SYS_CAP_TAG + E_ROFS, "Read-only file system" } }, 262 { EMLINK, { FILEIO_SYS_CAP_TAG + E_MLINK, "Too many links" } }, 263 { EDEADLK, { FILEIO_SYS_CAP_TAG + E_DEADLK, "Resource deadlock would occur" } }, 264 { ENAMETOOLONG, { FILEIO_SYS_CAP_TAG + E_NAMETOOLONG, "File name too long" } }, 265 { ENOSYS, { FILEIO_SYS_CAP_TAG + E_NOSYS, "Function not implemented" } }, 266 { ENOTEMPTY, { FILEIO_SYS_CAP_TAG + E_NOTEMPTY, "Directory not empty" } }, 267 { ELOOP, { FILEIO_SYS_CAP_TAG + E_LOOP, "Too many symbolic links encountered" } }, 268 { EWOULDBLOCK, { FILEIO_SYS_CAP_TAG + E_WOULDBLOCK, "Operation would block" } }, 269 { EBADR, { FILEIO_SYS_CAP_TAG + E_BADR, "Invalid request descriptor" } }, 270 { ENOSTR, { FILEIO_SYS_CAP_TAG + E_NOSTR, "Device not a stream" } }, 271 { ENODATA, { FILEIO_SYS_CAP_TAG + E_NODATA, "No data available" } }, 272 { EOVERFLOW, { FILEIO_SYS_CAP_TAG + E_OVERFLOW, "Value too large for defined data type" } }, 273 { EBADFD, { FILEIO_SYS_CAP_TAG + E_BADFD, "File descriptor in bad state" } }, 274 { ERESTART, { FILEIO_SYS_CAP_TAG + E_RESTART, "Interrupted system call should be restarted" } }, 275 { EDQUOT, { FILEIO_SYS_CAP_TAG + E_DQUOT, "Quota exceeded" } }, 276 { UNKROWN_ERR, { FILEIO_SYS_CAP_TAG + E_UKERR, "Unknown error" } }, 277 { ENOLCK, { FILEIO_SYS_CAP_TAG + E_NOLCK, "No record locks available" } }, 278 { ENETUNREACH, { FILEIO_SYS_CAP_TAG + E_NETUNREACH, "Network is unreachable" } }, 279 { ECONNECTIONFAIL, { FILEIO_SYS_CAP_TAG + E_CONNECTION_FAIL, "Connection failed" } }, 280 { ECONNECTIONABORT, { FILEIO_SYS_CAP_TAG + E_CONNECTION_ABORT, 281 "Software caused connection abort" } }, 282 { NO_TASK_ERR, { FILEIO_SYS_CAP_TAG + E_NOTASK, "No task can be canceled" } }, 283 { CANCEL_ERR, { FILEIO_SYS_CAP_TAG + E_UNCANCELED, "Failed to cancel" } }, 284 { ECANCELED, { FILEIO_SYS_CAP_TAG + E_CANCELED, "Operation canceled" } }, 285 { FILEIO_SYS_CAP_TAG + E_PERM, { FILEIO_SYS_CAP_TAG + E_PERM, "Operation not permitted" } }, 286 { FILEIO_SYS_CAP_TAG + E_NOENT, { FILEIO_SYS_CAP_TAG + E_NOENT, "No such file or directory" } }, 287 { FILEIO_SYS_CAP_TAG + E_SRCH, { FILEIO_SYS_CAP_TAG + E_SRCH, "No such process" } }, 288 { FILEIO_SYS_CAP_TAG + E_INTR, { FILEIO_SYS_CAP_TAG + E_INTR, "Interrupted system call" } }, 289 { FILEIO_SYS_CAP_TAG + E_IO, { FILEIO_SYS_CAP_TAG + E_IO, "I/O error" } }, 290 { FILEIO_SYS_CAP_TAG + E_NXIO, { FILEIO_SYS_CAP_TAG + E_NXIO, "No such device or address" } }, 291 { FILEIO_SYS_CAP_TAG + E_2BIG, { FILEIO_SYS_CAP_TAG + E_2BIG, "Arg list too long" } }, 292 { FILEIO_SYS_CAP_TAG + E_BADF, { FILEIO_SYS_CAP_TAG + E_BADF, "Bad file descriptor" } }, 293 { FILEIO_SYS_CAP_TAG + E_CHILD, { FILEIO_SYS_CAP_TAG + E_CHILD, "No child processes" } }, 294 { FILEIO_SYS_CAP_TAG + E_AGAIN, { FILEIO_SYS_CAP_TAG + E_AGAIN, "Try again" } }, 295 { FILEIO_SYS_CAP_TAG + E_NOMEM, { FILEIO_SYS_CAP_TAG + E_NOMEM, "Out of memory" } }, 296 { FILEIO_SYS_CAP_TAG + E_ACCES, { FILEIO_SYS_CAP_TAG + E_ACCES, "Permission denied" } }, 297 { FILEIO_SYS_CAP_TAG + E_FAULT, { FILEIO_SYS_CAP_TAG + E_FAULT, "Bad address" } }, 298 { FILEIO_SYS_CAP_TAG + E_BUSY, { FILEIO_SYS_CAP_TAG + E_BUSY, "Device or resource busy" } }, 299 { FILEIO_SYS_CAP_TAG + E_EXIST, { FILEIO_SYS_CAP_TAG + E_EXIST, "File exists" } }, 300 { FILEIO_SYS_CAP_TAG + E_XDEV, { FILEIO_SYS_CAP_TAG + E_XDEV, "Cross-device link" } }, 301 { FILEIO_SYS_CAP_TAG + E_NODEV, { FILEIO_SYS_CAP_TAG + E_NODEV, "No such device" } }, 302 { FILEIO_SYS_CAP_TAG + E_NOTDIR, { FILEIO_SYS_CAP_TAG + E_NOTDIR, "Not a directory" } }, 303 { FILEIO_SYS_CAP_TAG + E_ISDIR, { FILEIO_SYS_CAP_TAG + E_ISDIR, "Is a directory" } }, 304 { FILEIO_SYS_CAP_TAG + E_INVAL, { FILEIO_SYS_CAP_TAG + E_INVAL, "Invalid argument" } }, 305 { FILEIO_SYS_CAP_TAG + E_NFILE, { FILEIO_SYS_CAP_TAG + E_NFILE, "File table overflow" } }, 306 { FILEIO_SYS_CAP_TAG + E_MFILE, { FILEIO_SYS_CAP_TAG + E_MFILE, "Too many open files" } }, 307 { FILEIO_SYS_CAP_TAG + E_TXTBSY, { FILEIO_SYS_CAP_TAG + E_TXTBSY, "Text file busy" } }, 308 { FILEIO_SYS_CAP_TAG + E_FBIG, { FILEIO_SYS_CAP_TAG + E_FBIG, "File too large" } }, 309 { FILEIO_SYS_CAP_TAG + E_NOSPC, { FILEIO_SYS_CAP_TAG + E_NOSPC, "No space left on device" } }, 310 { FILEIO_SYS_CAP_TAG + E_SPIPE, { FILEIO_SYS_CAP_TAG + E_SPIPE, "Illegal seek" } }, 311 { FILEIO_SYS_CAP_TAG + E_ROFS, { FILEIO_SYS_CAP_TAG + E_ROFS, "Read-only file system" } }, 312 { FILEIO_SYS_CAP_TAG + E_MLINK, { FILEIO_SYS_CAP_TAG + E_MLINK, "Too many links" } }, 313 { FILEIO_SYS_CAP_TAG + E_DEADLK, { FILEIO_SYS_CAP_TAG + E_DEADLK, "Resource deadlock would occur" } }, 314 { FILEIO_SYS_CAP_TAG + E_NAMETOOLONG, { FILEIO_SYS_CAP_TAG + E_NAMETOOLONG, "File name too long" } }, 315 { FILEIO_SYS_CAP_TAG + E_NOSYS, { FILEIO_SYS_CAP_TAG + E_NOSYS, "Function not implemented" } }, 316 { FILEIO_SYS_CAP_TAG + E_NOTEMPTY, { FILEIO_SYS_CAP_TAG + E_NOTEMPTY, "Directory not empty" } }, 317 { FILEIO_SYS_CAP_TAG + E_LOOP, { FILEIO_SYS_CAP_TAG + E_LOOP, "Too many symbolic links encountered" } }, 318 { FILEIO_SYS_CAP_TAG + E_WOULDBLOCK, { FILEIO_SYS_CAP_TAG + E_WOULDBLOCK, "Operation would block" } }, 319 { FILEIO_SYS_CAP_TAG + E_BADR, { FILEIO_SYS_CAP_TAG + E_BADR, "Invalid request descriptor" } }, 320 { FILEIO_SYS_CAP_TAG + E_NOSTR, { FILEIO_SYS_CAP_TAG + E_NOSTR, "Device not a stream" } }, 321 { FILEIO_SYS_CAP_TAG + E_NODATA, { FILEIO_SYS_CAP_TAG + E_NODATA, "No data available" } }, 322 { FILEIO_SYS_CAP_TAG + E_OVERFLOW, { FILEIO_SYS_CAP_TAG + E_OVERFLOW, "Value too large for defined data type" } }, 323 { FILEIO_SYS_CAP_TAG + E_BADFD, { FILEIO_SYS_CAP_TAG + E_BADFD, "File descriptor in bad state" } }, 324 { FILEIO_SYS_CAP_TAG + E_RESTART, { FILEIO_SYS_CAP_TAG + E_RESTART, 325 "Interrupted system call should be restarted" } }, 326 { FILEIO_SYS_CAP_TAG + E_DQUOT, { FILEIO_SYS_CAP_TAG + E_DQUOT, "Quota exceeded" } }, 327 { FILEIO_SYS_CAP_TAG + E_UKERR, { FILEIO_SYS_CAP_TAG + E_UKERR, "Unknown error" } }, 328 { FILEIO_SYS_CAP_TAG + E_NOLCK, { FILEIO_SYS_CAP_TAG + E_NOLCK, "No record locks available" } }, 329 { FILEIO_SYS_CAP_TAG + E_NETUNREACH, { FILEIO_SYS_CAP_TAG + E_NETUNREACH, "Network is unreachable" } }, 330 { FILEIO_SYS_CAP_TAG + E_CONNECTION_FAIL, { FILEIO_SYS_CAP_TAG + E_CONNECTION_FAIL, "Connection failed" } }, 331 { FILEIO_SYS_CAP_TAG + E_CONNECTION_ABORT, { FILEIO_SYS_CAP_TAG + E_CONNECTION_ABORT, 332 "Software caused connection abort" } }, 333 { USER_FILE_MANAGER_SYS_CAP_TAG + E_DISPLAYNAME, { USER_FILE_MANAGER_SYS_CAP_TAG + E_DISPLAYNAME, 334 "Invalid display name" } }, 335 { USER_FILE_MANAGER_SYS_CAP_TAG + E_URIM, { USER_FILE_MANAGER_SYS_CAP_TAG + E_URIM, "Invalid uri" } }, 336 { USER_FILE_MANAGER_SYS_CAP_TAG + E_SUFFIX, { USER_FILE_MANAGER_SYS_CAP_TAG + E_SUFFIX, 337 "Invalid file extension" } }, 338 { USER_FILE_MANAGER_SYS_CAP_TAG + E_TRASH, { USER_FILE_MANAGER_SYS_CAP_TAG + E_TRASH, 339 "File has been put into trash bin" } }, 340 { USER_FILE_MANAGER_SYS_CAP_TAG + E_OPEN_MODE, { USER_FILE_MANAGER_SYS_CAP_TAG + E_OPEN_MODE, 341 "Invalid open mode" } }, 342 { USER_FILE_MANAGER_SYS_CAP_TAG + E_NOT_ALBUM, { USER_FILE_MANAGER_SYS_CAP_TAG + E_NOT_ALBUM, 343 "The uri is not album" } }, 344 { USER_FILE_MANAGER_SYS_CAP_TAG + E_ROOT_DIR, { USER_FILE_MANAGER_SYS_CAP_TAG + E_ROOT_DIR, 345 "Invalid root dir" } }, 346 { USER_FILE_MANAGER_SYS_CAP_TAG + E_MOVE_DENIED, { USER_FILE_MANAGER_SYS_CAP_TAG + E_MOVE_DENIED, 347 "Failed to move as dir check failed" } }, 348 { USER_FILE_MANAGER_SYS_CAP_TAG + E_RENAME_DENIED, { USER_FILE_MANAGER_SYS_CAP_TAG + E_RENAME_DENIED, 349 "Failed to rename as dir check failed" } }, 350 { USER_FILE_MANAGER_SYS_CAP_TAG + E_RELATIVEPATH, { USER_FILE_MANAGER_SYS_CAP_TAG + E_RELATIVEPATH, 351 "Relative path not exist or invalid" } }, 352 { USER_FILE_MANAGER_SYS_CAP_TAG + E_INNER_FAIL, { USER_FILE_MANAGER_SYS_CAP_TAG + E_INNER_FAIL, 353 "MediaLibrary inner fail" } }, 354 { USER_FILE_MANAGER_SYS_CAP_TAG + E_FILE_TYPE, { USER_FILE_MANAGER_SYS_CAP_TAG + E_FILE_TYPE, 355 "File type is not allow in the directory" } }, 356 { USER_FILE_MANAGER_SYS_CAP_TAG + E_FILE_KEY, { USER_FILE_MANAGER_SYS_CAP_TAG + E_FILE_KEY, 357 "Member not exist" } }, 358 { USER_FILE_MANAGER_SYS_CAP_TAG + E_INPUT, { USER_FILE_MANAGER_SYS_CAP_TAG + E_INPUT, 359 "Wrong input parameter" } }, 360 { STORAGE_SERVICE_SYS_CAP_TAG + E_IPCSS, { STORAGE_SERVICE_SYS_CAP_TAG + E_IPCSS, "IPC error" } }, 361 { STORAGE_SERVICE_SYS_CAP_TAG + E_NOTSUPPORTEDFS, { STORAGE_SERVICE_SYS_CAP_TAG + E_NOTSUPPORTEDFS, 362 "Not supported filesystem" } }, 363 { STORAGE_SERVICE_SYS_CAP_TAG + E_MOUNT, { STORAGE_SERVICE_SYS_CAP_TAG + E_MOUNT, "Failed to mount" } }, 364 { STORAGE_SERVICE_SYS_CAP_TAG + E_UNMOUNT, { STORAGE_SERVICE_SYS_CAP_TAG + E_UNMOUNT, "Failed to unmount" } }, 365 { STORAGE_SERVICE_SYS_CAP_TAG + E_VOLUMESTATE, { STORAGE_SERVICE_SYS_CAP_TAG + E_VOLUMESTATE, 366 "Incorrect volume state" } }, 367 { STORAGE_SERVICE_SYS_CAP_TAG + E_PREPARE, { STORAGE_SERVICE_SYS_CAP_TAG + E_PREPARE, 368 "Prepare directory or node error" } }, 369 { STORAGE_SERVICE_SYS_CAP_TAG + E_DELETE, { STORAGE_SERVICE_SYS_CAP_TAG + E_DELETE, 370 "Delete directory or node error" } }, 371 { STORAGE_SERVICE_SYS_CAP_TAG + E_NOOBJECT, { STORAGE_SERVICE_SYS_CAP_TAG + E_NOOBJECT, "No such object" } }, 372 { STORAGE_SERVICE_SYS_CAP_TAG + E_OUTOFRANGE, { STORAGE_SERVICE_SYS_CAP_TAG + E_OUTOFRANGE, 373 "User id out of range" } }, 374 { STORAGE_SERVICE_SYS_CAP_TAG + E_NOOBJECT, { STORAGE_SERVICE_SYS_CAP_TAG + E_NOOBJECT, "No such object" } }, 375 { USER_FILE_SERVICE_SYS_CAP_TAG + E_IPCS, { USER_FILE_SERVICE_SYS_CAP_TAG + E_IPCS, "IPC error" } }, 376 { USER_FILE_SERVICE_SYS_CAP_TAG + E_URIS, { USER_FILE_SERVICE_SYS_CAP_TAG + E_URIS, "Invalid uri" } }, 377 { USER_FILE_SERVICE_SYS_CAP_TAG + E_GETINFO, { USER_FILE_SERVICE_SYS_CAP_TAG + E_GETINFO, 378 "Fail to get fileextension info" } }, 379 { USER_FILE_SERVICE_SYS_CAP_TAG + E_GETRESULT, { USER_FILE_SERVICE_SYS_CAP_TAG + E_GETRESULT, 380 "Get wrong result" } }, 381 { USER_FILE_SERVICE_SYS_CAP_TAG + E_REGISTER, { USER_FILE_SERVICE_SYS_CAP_TAG + E_REGISTER, 382 "Fail to register notification" } }, 383 { USER_FILE_SERVICE_SYS_CAP_TAG + E_REMOVE, { USER_FILE_SERVICE_SYS_CAP_TAG + E_REMOVE, 384 "Fail to remove notification" } }, 385 { USER_FILE_SERVICE_SYS_CAP_TAG + E_INIT, { USER_FILE_SERVICE_SYS_CAP_TAG + E_INIT, 386 "Fail to init notification agent" } }, 387 { USER_FILE_SERVICE_SYS_CAP_TAG + E_NOTIFY, { USER_FILE_SERVICE_SYS_CAP_TAG + E_NOTIFY, "Fail to notify agent" } }, 388 { USER_FILE_SERVICE_SYS_CAP_TAG + E_CONNECT, { USER_FILE_SERVICE_SYS_CAP_TAG + E_CONNECT, 389 "Fail to connect file access extension ability" } }, 390 { USER_FILE_SERVICE_SYS_CAP_TAG + E_CALLBACK_AND_URI_HAS_NOT_RELATIONS, { USER_FILE_SERVICE_SYS_CAP_TAG + 391 E_CALLBACK_AND_URI_HAS_NOT_RELATIONS, 392 "The uri has no relationship with the callback and cannot be unregistered" } }, 393 { USER_FILE_SERVICE_SYS_CAP_TAG + E_CALLBACK_IS_NOT_REGISTER, { USER_FILE_SERVICE_SYS_CAP_TAG + 394 E_CALLBACK_IS_NOT_REGISTER, "Cannot unregister the callback that has not been registered" } }, 395 { USER_FILE_SERVICE_SYS_CAP_TAG + E_CAN_NOT_FIND_URI, { USER_FILE_SERVICE_SYS_CAP_TAG + E_CAN_NOT_FIND_URI, 396 "Can not find registered uri" } }, 397 { USER_FILE_SERVICE_SYS_CAP_TAG + E_DO_NOT_HAVE_PARENT, { USER_FILE_SERVICE_SYS_CAP_TAG + E_DO_NOT_HAVE_PARENT, 398 "Do not have parent uri" } }, 399 { USER_FILE_SERVICE_SYS_CAP_TAG + E_LOAD_SA, { USER_FILE_SERVICE_SYS_CAP_TAG + E_LOAD_SA, 400 "Fail to load system ability" } }, 401 { USER_FILE_SERVICE_SYS_CAP_TAG + E_COUNT, { USER_FILE_SERVICE_SYS_CAP_TAG + E_COUNT, "Too many records" } }, 402 { E_PERMISSION, { E_PERMISSION, "Permission verification failed" } }, 403 { E_PERMISSION_SYS, { E_PERMISSION_SYS, "The caller is not a system application" } }, 404 { E_PARAMS, { E_PARAMS, "The input parameter is invalid" } }, 405 { E_DEVICENOTSUPPORT, { E_DEVICENOTSUPPORT, "The device doesn't support this api" } }, 406 { E_OSNOTSUPPORT, { E_OSNOTSUPPORT, "The os doesn't support this api" } }, 407 { DISTRIBUTEDFILE_SERVICE_SYS_CAP_TAG + E_CLOUD_NOT_READY, { DISTRIBUTEDFILE_SERVICE_SYS_CAP_TAG + 408 E_CLOUD_NOT_READY, "Cloud status not ready" } }, 409 { DISTRIBUTEDFILE_SERVICE_SYS_CAP_TAG + E_NETWORK_ERR, { DISTRIBUTEDFILE_SERVICE_SYS_CAP_TAG + 410 E_NETWORK_ERR, "Network unavailable" } }, 411 { DISTRIBUTEDFILE_SERVICE_SYS_CAP_TAG + E_BATTERY_WARNING, { DISTRIBUTEDFILE_SERVICE_SYS_CAP_TAG + 412 E_BATTERY_WARNING, "Battery level warning" } }, 413 { DISTRIBUTEDFILE_SERVICE_SYS_CAP_TAG + E_EXCEED_MAX_LIMIT, { DISTRIBUTEDFILE_SERVICE_SYS_CAP_TAG + 414 E_EXCEED_MAX_LIMIT, "Exceed the maximum limit" } }, 415 { DISTRIBUTEDFILE_SERVICE_SYS_CAP_TAG + E_DATABASE_FAILED, { DISTRIBUTEDFILE_SERVICE_SYS_CAP_TAG + 416 E_DATABASE_FAILED, "Database operation failed" } }, 417 }; 418 419 class NError { 420 public: 421 NError(); 422 NError(int ePosix); 423 NError(std::function<std::tuple<uint32_t, std::string>()> errGen); 424 ~NError() = default; 425 explicit operator bool() const; 426 napi_value GetNapiErr(napi_env env); 427 napi_value GetNapiErr(napi_env env, int errCode); 428 napi_value GetNapiErrAddData(napi_env env, int errCode, napi_value data); 429 void ThrowErr(napi_env env); 430 void ThrowErr(napi_env env, int errCode); 431 void ThrowErr(napi_env env, std::string errMsg); 432 void ThrowErrAddData(napi_env env, int errCode, napi_value data); 433 434 private: 435 int errno_ = ERRNO_NOERR; 436 std::string errMsg_; 437 }; 438 } // namespace LibN 439 } // namespace FileManagement 440 } // namespace OHOS 441 442 #endif // FILEMGMT_LIBN_N_ERROR_H 443