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