Bug 1690326: Add mappings for ERROR_DEVICE_HARDWARE_ERROR, ERROR_DEVICE_NOT_CONNECTED, ERROR_DISK_FULL and remove error NS_ERROR_FILE_DISK_FULL in favor of existing NS_ERROR_FILE_NO_DEVICE_SPACE r=xpcom-reviewers,necko-reviewers,nika,valentin

Win32 errors ERROR_DEVICE_HARDWARE_ERROR, ERROR_DEVICE_NOT_CONNECTED, ERROR_DISK_FULL need a mapping.
NS_ERROR_FILE_DISK_FULL is duplicate to NS_ERROR_FILE_NO_DEVICE_SPACE
Drive by: RejectJSPromise lacked some NS_ERROR_* mappings

Differential Revision: https://phabricator.services.mozilla.com/D113974
This commit is contained in:
Jens Stutte 2021-05-06 14:00:06 +00:00
parent 00fc8347ba
commit f2f68509d3
12 changed files with 61 additions and 16 deletions

View File

@ -156,10 +156,17 @@ static void RejectJSPromise(Promise* aPromise, const IOUtils::IOError& aError) {
const auto& errMsg = aError.Message();
switch (aError.Code()) {
case NS_ERROR_FILE_UNRESOLVABLE_SYMLINK:
[[fallthrough]]; // to NS_ERROR_FILE_INVALID_PATH
case NS_ERROR_FILE_TARGET_DOES_NOT_EXIST:
[[fallthrough]]; // to NS_ERROR_FILE_INVALID_PATH
case NS_ERROR_FILE_NOT_FOUND:
[[fallthrough]]; // to NS_ERROR_FILE_INVALID_PATH
case NS_ERROR_FILE_INVALID_PATH:
aPromise->MaybeRejectWithNotFoundError(errMsg.refOr("File not found"_ns));
break;
case NS_ERROR_FILE_IS_LOCKED:
[[fallthrough]]; // to NS_ERROR_FILE_ACCESS_DENIED
case NS_ERROR_FILE_ACCESS_DENIED:
aPromise->MaybeRejectWithNotAllowedError(
errMsg.refOr("Access was denied to the target file"_ns));
@ -168,6 +175,10 @@ static void RejectJSPromise(Promise* aPromise, const IOUtils::IOError& aError) {
aPromise->MaybeRejectWithNotReadableError(
errMsg.refOr("Target file is too big"_ns));
break;
case NS_ERROR_FILE_NO_DEVICE_SPACE:
aPromise->MaybeRejectWithNotReadableError(
errMsg.refOr("Target device is full"_ns));
break;
case NS_ERROR_FILE_ALREADY_EXISTS:
aPromise->MaybeRejectWithNoModificationAllowedError(
errMsg.refOr("Target file already exists"_ns));
@ -181,10 +192,23 @@ static void RejectJSPromise(Promise* aPromise, const IOUtils::IOError& aError) {
errMsg.refOr("Target file is read only"_ns));
break;
case NS_ERROR_FILE_NOT_DIRECTORY:
[[fallthrough]]; // to NS_ERROR_FILE_DESTINATION_NOT_DIR
case NS_ERROR_FILE_DESTINATION_NOT_DIR:
aPromise->MaybeRejectWithInvalidAccessError(
errMsg.refOr("Target file is not a directory"_ns));
break;
case NS_ERROR_FILE_IS_DIRECTORY:
aPromise->MaybeRejectWithInvalidAccessError(
errMsg.refOr("Target file is a directory"_ns));
break;
case NS_ERROR_FILE_UNKNOWN_TYPE:
aPromise->MaybeRejectWithInvalidAccessError(
errMsg.refOr("Target file is of unknown type"_ns));
break;
case NS_ERROR_FILE_NAME_TOO_LONG:
aPromise->MaybeRejectWithOperationError(
errMsg.refOr("Target file path is too long"_ns));
break;
case NS_ERROR_FILE_UNRECOGNIZED_PATH:
aPromise->MaybeRejectWithOperationError(
errMsg.refOr("Target file path is not recognized"_ns));
@ -193,11 +217,18 @@ static void RejectJSPromise(Promise* aPromise, const IOUtils::IOError& aError) {
aPromise->MaybeRejectWithOperationError(
errMsg.refOr("Target directory is not empty"_ns));
break;
case NS_ERROR_FILE_DEVICE_FAILURE:
[[fallthrough]]; // to NS_ERROR_FILE_FS_CORRUPTED
case NS_ERROR_FILE_FS_CORRUPTED:
aPromise->MaybeRejectWithNotReadableError(
errMsg.refOr("Target file system may be corrupt or unavailable"_ns));
break;
case NS_ERROR_FILE_CORRUPTED:
aPromise->MaybeRejectWithNotReadableError(
errMsg.refOr("Target file could not be read and may be corrupt"_ns));
break;
case NS_ERROR_ILLEGAL_INPUT:
[[fallthrough]]; // NS_ERROR_ILLEGAL_VALUE
case NS_ERROR_ILLEGAL_VALUE:
aPromise->MaybeRejectWithDataError(
errMsg.refOr("Argument is not allowed"_ns));

View File

@ -1217,7 +1217,6 @@ nsresult nsWebBrowserPersist::SendErrorStatusChange(bool aIsReadError,
// File exists with same name as directory.
msgId = "fileAlreadyExistsError";
break;
case NS_ERROR_FILE_DISK_FULL:
case NS_ERROR_FILE_NO_DEVICE_SPACE:
// Out of space on target volume.
msgId = "diskFull";

View File

@ -105,7 +105,6 @@ XPC_MSG_DEF(NS_ERROR_FILE_TARGET_DOES_NOT_EXIST , "File error: Target does n
XPC_MSG_DEF(NS_ERROR_FILE_COPY_OR_MOVE_FAILED , "File error: Copy or move failed")
XPC_MSG_DEF(NS_ERROR_FILE_ALREADY_EXISTS , "File error: Already exists")
XPC_MSG_DEF(NS_ERROR_FILE_INVALID_PATH , "File error: Invalid path")
XPC_MSG_DEF(NS_ERROR_FILE_DISK_FULL , "File error: Disk full")
XPC_MSG_DEF(NS_ERROR_FILE_CORRUPTED , "File error: Corrupted")
XPC_MSG_DEF(NS_ERROR_FILE_NOT_DIRECTORY , "File error: Not directory")
XPC_MSG_DEF(NS_ERROR_FILE_IS_DIRECTORY , "File error: Is directory")

View File

@ -533,7 +533,7 @@ nsresult nsZipArchive::ExtractFile(nsZipItem* item, nsIFile* outFile,
}
if (aFd && PR_Write(aFd, buf, count) < (READTYPE)count) {
rv = NS_ERROR_FILE_DISK_FULL;
rv = NS_ERROR_FILE_NO_DEVICE_SPACE;
break;
}
}

View File

@ -2053,7 +2053,7 @@ static uint32_t StatusToTelemetryEnum(nsresult aStatus) {
return 0; // Log this as a success
case NS_ERROR_OUT_OF_MEMORY:
return 2;
case NS_ERROR_FILE_DISK_FULL:
case NS_ERROR_FILE_NO_DEVICE_SPACE:
return 3;
case NS_ERROR_FILE_CORRUPTED:
return 4;

View File

@ -1989,7 +1989,7 @@ nsresult CacheFileIOManager::WriteInternal(CacheFileHandle* aHandle,
LOG(
("CacheFileIOManager::WriteInternal() - failing because cache size "
"reached hard limit!"));
return NS_ERROR_FILE_DISK_FULL;
return NS_ERROR_FILE_NO_DEVICE_SPACE;
}
int64_t freeSpace;
@ -2008,7 +2008,7 @@ nsresult CacheFileIOManager::WriteInternal(CacheFileHandle* aHandle,
("CacheFileIOManager::WriteInternal() - Low free space, refusing "
"to write! [freeSpace=%" PRId64 "kB, limit=%ukB]",
freeSpace, limit));
return NS_ERROR_FILE_DISK_FULL;
return NS_ERROR_FILE_NO_DEVICE_SPACE;
}
}
}
@ -2518,7 +2518,7 @@ nsresult CacheFileIOManager::TruncateSeekSetEOFInternal(
LOG(
("CacheFileIOManager::TruncateSeekSetEOFInternal() - failing because "
"cache size reached hard limit!"));
return NS_ERROR_FILE_DISK_FULL;
return NS_ERROR_FILE_NO_DEVICE_SPACE;
}
int64_t freeSpace;
@ -2537,7 +2537,7 @@ nsresult CacheFileIOManager::TruncateSeekSetEOFInternal(
("CacheFileIOManager::TruncateSeekSetEOFInternal() - Low free space"
", refusing to write! [freeSpace=%" PRId64 "kB, limit=%ukB]",
freeSpace, limit));
return NS_ERROR_FILE_DISK_FULL;
return NS_ERROR_FILE_NO_DEVICE_SPACE;
}
}
}

View File

@ -101,7 +101,8 @@ void nsFileCopyEvent::DoCopy() {
rv = mSource->ReadSegments(NS_CopySegmentToStream, mDest, num, &result);
if (NS_FAILED(rv)) break;
if (result != (uint32_t)num) {
rv = NS_ERROR_FILE_DISK_FULL; // stopped prematurely (out of disk space)
// stopped prematurely (out of disk space)
rv = NS_ERROR_FILE_NO_DEVICE_SPACE;
break;
}

View File

@ -1931,7 +1931,6 @@ void nsExternalAppHandler::SendStatusChange(ErrorType type, nsresult rv,
msgId = "noMemory";
break;
case NS_ERROR_FILE_DISK_FULL:
case NS_ERROR_FILE_NO_DEVICE_SPACE:
// Out of space on target volume.
msgId = "diskFull";

View File

@ -636,7 +636,6 @@ with modules["FILES"]:
errors["NS_ERROR_FILE_COPY_OR_MOVE_FAILED"] = FAILURE(7)
errors["NS_ERROR_FILE_ALREADY_EXISTS"] = FAILURE(8)
errors["NS_ERROR_FILE_INVALID_PATH"] = FAILURE(9)
errors["NS_ERROR_FILE_DISK_FULL"] = FAILURE(10)
errors["NS_ERROR_FILE_CORRUPTED"] = FAILURE(11)
errors["NS_ERROR_FILE_NOT_DIRECTORY"] = FAILURE(12)
errors["NS_ERROR_FILE_IS_DIRECTORY"] = FAILURE(13)

View File

@ -53,11 +53,11 @@ inline nsresult nsresultForErrno(int aErr) {
case 0:
return NS_OK;
#ifdef EDQUOT
case EDQUOT: /* Quota exceeded */
// FALLTHROUGH to return NS_ERROR_FILE_DISK_FULL
case EDQUOT: /* Quota exceeded */
[[fallthrough]]; // to NS_ERROR_FILE_NO_DEVICE_SPACE
#endif
case ENOSPC:
return NS_ERROR_FILE_DISK_FULL;
return NS_ERROR_FILE_NO_DEVICE_SPACE;
#ifdef EISDIR
case EISDIR: /* Is a directory. */
return NS_ERROR_FILE_IS_DIRECTORY;

View File

@ -2248,7 +2248,7 @@ static nsresult MacErrorMapper(OSErr inErr) {
case dskFulErr:
case afpDiskFull:
outErr = NS_ERROR_FILE_DISK_FULL;
outErr = NS_ERROR_FILE_NO_DEVICE_SPACE;
break;
case fLckdErr:

View File

@ -248,26 +248,35 @@ static nsresult ConvertWinError(DWORD aWinErr) {
switch (aWinErr) {
case ERROR_FILE_NOT_FOUND:
[[fallthrough]]; // to NS_ERROR_FILE_NOT_FOUND
case ERROR_PATH_NOT_FOUND:
[[fallthrough]]; // to NS_ERROR_FILE_NOT_FOUND
case ERROR_INVALID_DRIVE:
[[fallthrough]]; // to NS_ERROR_FILE_NOT_FOUND
case ERROR_NOT_READY:
rv = NS_ERROR_FILE_NOT_FOUND;
break;
case ERROR_ACCESS_DENIED:
[[fallthrough]]; // to NS_ERROR_FILE_ACCESS_DENIED
case ERROR_NOT_SAME_DEVICE:
rv = NS_ERROR_FILE_ACCESS_DENIED;
break;
case ERROR_SHARING_VIOLATION: // CreateFile without sharing flags
[[fallthrough]]; // to NS_ERROR_FILE_IS_LOCKED
case ERROR_LOCK_VIOLATION: // LockFile, LockFileEx
rv = NS_ERROR_FILE_IS_LOCKED;
break;
case ERROR_NOT_ENOUGH_MEMORY:
[[fallthrough]]; // to NS_ERROR_OUT_OF_MEMORY
case ERROR_INVALID_BLOCK:
[[fallthrough]]; // to NS_ERROR_OUT_OF_MEMORY
case ERROR_INVALID_HANDLE:
[[fallthrough]]; // to NS_ERROR_OUT_OF_MEMORY
case ERROR_ARENA_TRASHED:
rv = NS_ERROR_OUT_OF_MEMORY;
break;
case ERROR_DIR_NOT_EMPTY:
[[fallthrough]]; // to NS_ERROR_FILE_DIR_NOT_EMPTY
case ERROR_CURRENT_DIRECTORY:
rv = NS_ERROR_FILE_DIR_NOT_EMPTY;
break;
@ -275,10 +284,14 @@ static nsresult ConvertWinError(DWORD aWinErr) {
rv = NS_ERROR_FILE_READ_ONLY;
break;
case ERROR_HANDLE_DISK_FULL:
rv = NS_ERROR_FILE_TOO_BIG;
[[fallthrough]]; // to NS_ERROR_FILE_NO_DEVICE_SPACE
case ERROR_DISK_FULL:
rv = NS_ERROR_FILE_NO_DEVICE_SPACE;
break;
case ERROR_FILE_EXISTS:
[[fallthrough]]; // to NS_ERROR_FILE_ALREADY_EXISTS
case ERROR_ALREADY_EXISTS:
[[fallthrough]]; // to NS_ERROR_FILE_ALREADY_EXISTS
case ERROR_CANNOT_MAKE:
rv = NS_ERROR_FILE_ALREADY_EXISTS;
break;
@ -291,6 +304,10 @@ static nsresult ConvertWinError(DWORD aWinErr) {
case ERROR_FILE_CORRUPT:
rv = NS_ERROR_FILE_FS_CORRUPTED;
break;
case ERROR_DEVICE_HARDWARE_ERROR:
[[fallthrough]]; // to NS_ERROR_FILE_DEVICE_FAILURE
case ERROR_DEVICE_NOT_CONNECTED:
[[fallthrough]]; // to NS_ERROR_FILE_DEVICE_FAILURE
case ERROR_IO_DEVICE:
rv = NS_ERROR_FILE_DEVICE_FAILURE;
break;