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