api: cleanup error codes

This commit is contained in:
nakst 2022-02-10 12:18:26 +00:00
parent 0d59a6dafd
commit 1795f8cca5
16 changed files with 132 additions and 141 deletions

View File

@ -250,7 +250,7 @@ EsError CommandPasteFile(String source, String destinationBase, void **copyBuffe
} else {
destination.allocated = destination.bytes;
StringDestroy(&destination);
return ES_ERROR_FILE_ALREADY_EXISTS;
return ES_ERROR_ALREADY_EXISTS;
}
}

View File

@ -1214,7 +1214,7 @@ void InstanceReportError(Instance *instance, int error, EsError code) {
const char *message = interfaceString_FileManagerGenericError;
if (code == ES_ERROR_FILE_ALREADY_EXISTS) {
if (code == ES_ERROR_ALREADY_EXISTS) {
message = interfaceString_FileManagerItemAlreadyExistsError;
} else if (code == ES_ERROR_FILE_DOES_NOT_EXIST) {
message = interfaceString_FileManagerItemDoesNotExistError;

View File

@ -214,7 +214,7 @@ int ExternalPathCreateDirectory(ExecutionContext *context, Value *returnValue) {
(void) returnValue;
STACK_POP_STRING(entryText, entryBytes);
EsError error = EsPathCreate(entryText, entryBytes, ES_NODE_DIRECTORY, false);
returnValue->i = error == ES_SUCCESS || error == ES_ERROR_FILE_ALREADY_EXISTS;
returnValue->i = error == ES_SUCCESS || error == ES_ERROR_ALREADY_EXISTS;
return 2;
}

View File

@ -669,7 +669,7 @@ EsError ArchApplyRelocation(uintptr_t type, uint8_t *buffer, uintptr_t offset, u
else if (type == 2 /* R_X86_64_PC32 */) *((uint32_t *) (buffer + offset)) = result - ((uint64_t) buffer + offset);
else if (type == 24 /* R_X86_64_PC64 */) *((uint64_t *) (buffer + offset)) = result - ((uint64_t) buffer + offset);
else if (type == 4 /* R_X86_64_PLT32 */) *((uint32_t *) (buffer + offset)) = result - ((uint64_t) buffer + offset);
else return ES_ERROR_UNSUPPORTED_FEATURE;
else return ES_ERROR_UNSUPPORTED;
return ES_SUCCESS;
}

View File

@ -1067,17 +1067,17 @@ EsMessage *EsMessageReceive() {
case ES_ERROR_INCORRECT_NODE_TYPE:
errorMessage = interfaceString_FileSaveErrorFileDeleted;
break;
case ES_ERROR_DRIVE_ERROR_FILE_DAMAGED:
case ES_ERROR_CORRUPT_DATA:
errorMessage = interfaceString_FileSaveErrorCorrupt;
break;
case ES_ERROR_DRIVE_CONTROLLER_REPORTED:
case ES_ERROR_HARDWARE_FAILURE:
errorMessage = interfaceString_FileSaveErrorDrive;
break;
case ES_ERROR_INSUFFICIENT_RESOURCES:
errorMessage = interfaceString_FileSaveErrorResourcesLow;
break;
case ES_ERROR_FILE_ALREADY_EXISTS: {
case ES_ERROR_ALREADY_EXISTS: {
errorMessage = buffer;
errorMessageBytes = EsStringFormat(buffer, sizeof(buffer), interfaceString_FileSaveErrorAlreadyExists,
apiInstance->newNameBytes, apiInstance->newName);
@ -1195,10 +1195,10 @@ void EsInstanceOpenComplete(EsInstance *instance, EsFileStore *file, bool succes
const char *errorMessage = interfaceString_FileLoadErrorUnknown;
switch (file->error) {
case ES_ERROR_DRIVE_ERROR_FILE_DAMAGED:
case ES_ERROR_CORRUPT_DATA:
errorMessage = interfaceString_FileLoadErrorCorrupt;
break;
case ES_ERROR_DRIVE_CONTROLLER_REPORTED:
case ES_ERROR_HARDWARE_FAILURE:
errorMessage = interfaceString_FileLoadErrorDrive;
break;
case ES_ERROR_INSUFFICIENT_RESOURCES:
@ -1274,19 +1274,17 @@ void EsInstanceSaveComplete(EsInstance *instance, EsFileStore *file, bool succes
case ES_ERROR_INCORRECT_NODE_TYPE:
errorMessage = interfaceString_FileSaveErrorFileDeleted;
break;
case ES_ERROR_DRIVE_ERROR_FILE_DAMAGED:
case ES_ERROR_CORRUPT_DATA:
errorMessage = interfaceString_FileSaveErrorCorrupt;
break;
case ES_ERROR_DRIVE_CONTROLLER_REPORTED:
case ES_ERROR_HARDWARE_FAILURE:
errorMessage = interfaceString_FileSaveErrorDrive;
break;
case ES_ERROR_COULD_NOT_RESIZE_FILE:
case ES_ERROR_FILE_TOO_FRAGMENTED:
case ES_ERROR_FILE_TOO_LARGE:
errorMessage = interfaceString_FileSaveErrorTooLarge;
break;
case ES_ERROR_FILE_IN_EXCLUSIVE_USE:
case ES_ERROR_FILE_CANNOT_GET_EXCLUSIVE_USE:
case ES_ERROR_FILE_HAS_WRITERS:
case ES_ERROR_OPERATION_BLOCKED:
errorMessage = interfaceString_FileSaveErrorConcurrentAccess;
break;
case ES_ERROR_DRIVE_FULL:
@ -1299,7 +1297,7 @@ void EsInstanceSaveComplete(EsInstance *instance, EsFileStore *file, bool succes
errorMessage = interfaceString_FileSaveErrorTooManyFiles;
break;
case ES_ERROR_FILE_ALREADY_EXISTS: {
case ES_ERROR_ALREADY_EXISTS: {
errorMessage = buffer;
errorMessageBytes = EsStringFormat(buffer, sizeof(buffer), interfaceString_FileSaveErrorAlreadyExists,
apiInstance->newNameBytes, apiInstance->newName);

View File

@ -630,8 +630,8 @@ bool OldTests2018() {
CHECK(!EsPathExists(EsLiteral("|Settings:/TestFolder/b.txt")));
CHECK(EsPathExists(EsLiteral("|Settings:/a.txt")));
CHECK(ES_ERROR_FILE_DOES_NOT_EXIST == EsPathMove(EsLiteral("|Settings:/TestFolder/a.txt"), EsLiteral("|Settings:/a.txt"), ES_FLAGS_DEFAULT));
CHECK(ES_ERROR_FILE_ALREADY_EXISTS == EsPathMove(EsLiteral("|Settings:/a.txt"), EsLiteral("|Settings:/b.txt"), ES_FLAGS_DEFAULT));
CHECK(ES_ERROR_FILE_ALREADY_EXISTS == EsPathMove(EsLiteral("|Settings:/a.txt"), EsLiteral("|Settings:/a.txt"), ES_FLAGS_DEFAULT));
CHECK(ES_ERROR_ALREADY_EXISTS == EsPathMove(EsLiteral("|Settings:/a.txt"), EsLiteral("|Settings:/b.txt"), ES_FLAGS_DEFAULT));
CHECK(ES_ERROR_ALREADY_EXISTS == EsPathMove(EsLiteral("|Settings:/a.txt"), EsLiteral("|Settings:/a.txt"), ES_FLAGS_DEFAULT));
CHECK(ES_ERROR_TARGET_WITHIN_SOURCE == EsPathMove(EsLiteral("|Settings:/"), EsLiteral("|Settings:/TestFolder/TargetWithinSource"), ES_FLAGS_DEFAULT));
CHECK(!EsPathExists(EsLiteral("|Settings:/TestFolder/a.txt")));
CHECK(EsPathExists(EsLiteral("|Settings:/b.txt")));

View File

@ -2252,7 +2252,7 @@ void ApplicationInstanceRequestSave(ApplicationInstance *instance, const char *n
if (!nameBytes || (failIfAlreadyExists && nameBytes != folderBytes + newNameBytes)) {
EsHeapFree(name);
m.tabOperation.error = nameBytes ? ES_ERROR_FILE_ALREADY_EXISTS : ES_ERROR_TOO_MANY_FILES_WITH_NAME;
m.tabOperation.error = nameBytes ? ES_ERROR_ALREADY_EXISTS : ES_ERROR_TOO_MANY_FILES_WITH_NAME;
EsMessagePostRemote(instance->process->handle, &m);
return;
}
@ -2296,7 +2296,7 @@ void ApplicationInstanceRequestSave(ApplicationInstance *instance, const char *n
}
if (document->currentWriter) {
m.tabOperation.error = ES_ERROR_FILE_CANNOT_GET_EXCLUSIVE_USE;
m.tabOperation.error = ES_ERROR_OPERATION_BLOCKED;
} else {
EsHeapFree(document->temporarySavePath);
document->temporarySavePath = nullptr;

View File

@ -282,7 +282,7 @@ EsError MountPointAdd(const char *prefix, size_t prefixBytes, EsHandle base, boo
EsError error = ES_SUCCESS;
if (duplicate) {
error = ES_ERROR_MOUNT_POINT_ALREADY_EXISTS;
error = ES_ERROR_ALREADY_EXISTS;
} else {
EsMountPoint mountPoint = {};
EsAssert(prefixBytes < sizeof(mountPoint.prefix));

View File

@ -284,62 +284,55 @@ private define ES_PROCESS_STATE_PAUSED_FROM_CRASH (1 << 4)
define ES_FLAGS_DEFAULT (0)
define ES_SUCCESS (-1)
// TODO Cleanup.
define ES_ERROR_BUFFER_TOO_SMALL (-2)
define ES_ERROR_UNKNOWN (-7)
define ES_ERROR_NO_MESSAGES_AVAILABLE (-9)
define ES_ERROR_MESSAGE_QUEUE_FULL (-10)
define ES_ERROR_PATH_NOT_WITHIN_MOUNTED_VOLUME (-14)
define ES_ERROR_PATH_NOT_TRAVERSABLE (-15)
define ES_ERROR_FILE_ALREADY_EXISTS (-19)
define ES_ERROR_FILE_DOES_NOT_EXIST (-20)
define ES_ERROR_DRIVE_ERROR_FILE_DAMAGED (-21)
define ES_ERROR_ACCESS_NOT_WITHIN_FILE_BOUNDS (-22)
define ES_ERROR_PERMISSION_NOT_GRANTED (-23)
define ES_ERROR_FILE_IN_EXCLUSIVE_USE (-24)
define ES_ERROR_FILE_CANNOT_GET_EXCLUSIVE_USE (-25)
define ES_ERROR_INCORRECT_NODE_TYPE (-26)
define ES_ERROR_EVENT_NOT_SET (-27)
define ES_ERROR_FILE_HAS_WRITERS (-28)
define ES_ERROR_TIMEOUT_REACHED (-29)
define ES_ERROR_FILE_ON_READ_ONLY_VOLUME (-32)
define ES_ERROR_INVALID_DIMENSIONS (-34)
define ES_ERROR_DRIVE_CONTROLLER_REPORTED (-35)
define ES_ERROR_COULD_NOT_ISSUE_PACKET (-36)
define ES_ERROR_HANDLE_TABLE_FULL (-37)
define ES_ERROR_COULD_NOT_RESIZE_FILE (-38)
define ES_ERROR_DIRECTORY_NOT_EMPTY (-39)
define ES_ERROR_NODE_DELETED (-41)
define ES_ERROR_VOLUME_MISMATCH (-43)
define ES_ERROR_TARGET_WITHIN_SOURCE (-44)
define ES_ERROR_TARGET_INVALID_TYPE (-45)
define ES_ERROR_MALFORMED_NODE_PATH (-47)
define ES_ERROR_TARGET_IS_SOURCE (-49)
define ES_ERROR_INVALID_NAME (-50)
define ES_ERROR_CORRUPT_DATA (-51)
define ES_ERROR_INSUFFICIENT_RESOURCES (-52)
define ES_ERROR_UNSUPPORTED_FEATURE (-53)
define ES_ERROR_FILE_TOO_FRAGMENTED (-54)
define ES_ERROR_DRIVE_FULL (-55)
define ES_ERROR_COULD_NOT_RESOLVE_SYMBOL (-56)
define ES_ERROR_ALREADY_EMBEDDED (-57)
define ES_ERROR_UNSUPPORTED_CONVERSION (-60)
define ES_ERROR_SOURCE_EMPTY (-61)
define ES_ERROR_UNSUPPORTED_EXECUTABLE (-62)
define ES_ERROR_NO_ADDRESS_FOR_DOMAIN_NAME (-63)
define ES_ERROR_NO_CONNECTED_NETWORK_INTERFACES (-64)
define ES_ERROR_BAD_DOMAIN_NAME (-65)
define ES_ERROR_LOST_IP_ADDRESS (-66)
define ES_ERROR_CONNECTION_RESET (-67)
define ES_ERROR_CONNECTION_REFUSED (-68)
define ES_ERROR_ILLEGAL_PATH (-69)
define ES_ERROR_NODE_NOT_LOADED (-71)
define ES_ERROR_DIRECTORY_ENTRY_BEING_REMOVED (-72)
define ES_ERROR_CANCELLED (-73)
define ES_ERROR_BLOCK_ACCESS_INVALID (-74)
define ES_ERROR_DEVICE_REMOVED (-75)
define ES_ERROR_TOO_MANY_FILES_WITH_NAME (-76)
define ES_ERROR_MOUNT_POINT_ALREADY_EXISTS (-77)
// Networking errors:
define ES_ERROR_NO_ADDRESS_FOR_DOMAIN_NAME (-1000)
define ES_ERROR_NO_CONNECTED_NETWORK_INTERFACES (-1001)
define ES_ERROR_BAD_DOMAIN_NAME (-1002)
define ES_ERROR_LOST_IP_ADDRESS (-1003)
define ES_ERROR_CONNECTION_RESET (-1004)
define ES_ERROR_CONNECTION_REFUSED (-1005)
define ES_ERROR_BUFFER_TOO_SMALL (-1006)
// File system errors:
define ES_ERROR_OPERATION_BLOCKED (-2000) // Somebody else has opened the node with flags blocking this operation.
define ES_ERROR_ACCESS_NOT_WITHIN_FILE_BOUNDS (-2001)
define ES_ERROR_DIRECTORY_NOT_EMPTY (-2004)
define ES_ERROR_NODE_DELETED (-2005)
define ES_ERROR_FILE_TOO_LARGE (-2006) // Errors caused by the file being too large. For example, the file system might impose a maximum size limit on files, or it might impose a limit on how fragmented a file may become.
define ES_ERROR_DRIVE_FULL (-2007)
define ES_ERROR_CORRUPT_DATA (-2008)
define ES_ERROR_INVALID_NAME (-2009)
define ES_ERROR_FILE_ON_READ_ONLY_VOLUME (-2011)
define ES_ERROR_PATH_NOT_WITHIN_MOUNTED_VOLUME (-2013)
define ES_ERROR_PATH_NOT_TRAVERSABLE (-2014)
define ES_ERROR_DEVICE_REMOVED (-2015)
define ES_ERROR_INCORRECT_NODE_TYPE (-2016)
define ES_ERROR_FILE_DOES_NOT_EXIST (-2017)
define ES_ERROR_COULD_NOT_RESIZE_FILE (-2018) // TODO Replace with ES_ERROR_HARDWARE_FAILURE/ES_ERROR_CORRUPT_DATA/ES_ERROR_DRIVE_FULL/ES_ERROR_FILE_TOO_LARGE.
define ES_ERROR_VOLUME_MISMATCH (-2019)
define ES_ERROR_TARGET_WITHIN_SOURCE (-2020)
// General errors:
define ES_ERROR_UNKNOWN (-3000)
define ES_ERROR_ALREADY_EXISTS (-3001)
define ES_ERROR_CANCELLED (-3002)
define ES_ERROR_INSUFFICIENT_RESOURCES (-3003)
define ES_ERROR_PERMISSION_NOT_GRANTED (-3004)
define ES_ERROR_UNSUPPORTED (-3005)
define ES_ERROR_HARDWARE_FAILURE (-3006)
// Internal errors (not be returned by any API function):
define ES_ERROR_NODE_NOT_LOADED (-4001)
define ES_ERROR_DIRECTORY_ENTRY_BEING_REMOVED (-4002)
define ES_ERROR_COULD_NOT_RESOLVE_SYMBOL (-4003)
define ES_ERROR_NO_MESSAGES_AVAILABLE (-4004)
define ES_ERROR_INVALID_DIMENSIONS (-4005)
define ES_ERROR_TOO_MANY_FILES_WITH_NAME (-4006)
// Errors specific to a single function:
define ES_ERROR_MESSAGE_QUEUE_FULL (-5000) // EsMessagePost.
define ES_ERROR_TIMEOUT_REACHED (-5001) // EsWait.
define ES_ERROR_BLOCK_ACCESS_INVALID (-5002) // ES_DEVICE_CONTROL_BLOCK_READ/ES_DEVICE_CONTROL_BLOCK_WRITE.
define ES_INVALID_HANDLE ((EsHandle) (0))
define ES_CURRENT_THREAD ((EsHandle) (0x10))

View File

@ -328,13 +328,13 @@ long EsPOSIXSystemCall(long n, long a1, long a2, long a3, long a4, long a5, long
EsHeapFree(path);
if (error == ES_ERROR_FILE_DOES_NOT_EXIST) returnValue = -ENOENT;
else if (error == ES_ERROR_PATH_NOT_TRAVERSABLE) returnValue = -ENOTDIR;
else if (error == ES_ERROR_FILE_IN_EXCLUSIVE_USE) returnValue = -EBUSY;
else if (error == ES_ERROR_DRIVE_CONTROLLER_REPORTED || error == ES_ERROR_CORRUPT_DATA) returnValue = -EIO;
else if (error == ES_ERROR_OPERATION_BLOCKED) returnValue = -EBUSY;
else if (error == ES_ERROR_HARDWARE_FAILURE || error == ES_ERROR_CORRUPT_DATA) returnValue = -EIO;
else if (error != ES_SUCCESS) returnValue = -EACCES;
else {
error = EsSyscall(ES_SYSCALL_NODE_DELETE, node.handle, 0, 0, 0);
EsHandleClose(node.handle);
if (error == ES_ERROR_DRIVE_CONTROLLER_REPORTED || error == ES_ERROR_CORRUPT_DATA) returnValue = -EIO;
if (error == ES_ERROR_HARDWARE_FAILURE || error == ES_ERROR_CORRUPT_DATA) returnValue = -EIO;
else if (error != ES_SUCCESS) returnValue = -EACCES;
}
} break;
@ -348,14 +348,14 @@ long EsPOSIXSystemCall(long n, long a1, long a2, long a3, long a4, long a5, long
EsHeapFree(path);
if (error == ES_ERROR_FILE_DOES_NOT_EXIST) returnValue = -ENOENT;
else if (error == ES_ERROR_PATH_NOT_TRAVERSABLE) returnValue = -ENOTDIR;
else if (error == ES_ERROR_FILE_IN_EXCLUSIVE_USE) returnValue = -EBUSY;
else if (error == ES_ERROR_DRIVE_CONTROLLER_REPORTED || error == ES_ERROR_CORRUPT_DATA) returnValue = -EIO;
else if (error == ES_ERROR_OPERATION_BLOCKED) returnValue = -EBUSY;
else if (error == ES_ERROR_HARDWARE_FAILURE || error == ES_ERROR_CORRUPT_DATA) returnValue = -EIO;
else if (error != ES_SUCCESS) returnValue = -EACCES;
else if (node.type == ES_NODE_DIRECTORY) { returnValue = -EISDIR; EsHandleClose(node.handle); }
else {
EsError error = EsFileResize(node.handle, a2);
EsHandleClose(node.handle);
if (error == ES_ERROR_DRIVE_CONTROLLER_REPORTED || error == ES_ERROR_CORRUPT_DATA) returnValue = -EIO;
if (error == ES_ERROR_HARDWARE_FAILURE || error == ES_ERROR_CORRUPT_DATA) returnValue = -EIO;
else if (error != ES_SUCCESS) returnValue = -EACCES;
}
} break;
@ -656,7 +656,7 @@ long EsPOSIXSystemCall(long n, long a1, long a2, long a3, long a4, long a5, long
char *path = EsPOSIXConvertPath((const char *) a1, &pathBytes, true);
EsError error = EsPathCreate(path, pathBytes, ES_NODE_DIRECTORY, false);
if (error == ES_ERROR_INSUFFICIENT_RESOURCES) returnValue = -ENOMEM;
else if (error == ES_ERROR_FILE_ALREADY_EXISTS) returnValue = -EEXIST;
else if (error == ES_ERROR_ALREADY_EXISTS) returnValue = -EEXIST;
else if (error == ES_ERROR_PATH_NOT_TRAVERSABLE) returnValue = -ENOENT;
else if (error == ES_ERROR_PATH_NOT_WITHIN_MOUNTED_VOLUME) returnValue = -ENOENT;
else if (error == ES_ERROR_FILE_ON_READ_ONLY_VOLUME) returnValue = -EPERM;
@ -698,8 +698,8 @@ long EsPOSIXSystemCall(long n, long a1, long a2, long a3, long a4, long a5, long
// TODO More return values.
if (error == ES_ERROR_FILE_DOES_NOT_EXIST) returnValue = -ENOENT;
else if (error == ES_ERROR_PATH_NOT_TRAVERSABLE) returnValue = -ENOTDIR;
else if (error == ES_ERROR_FILE_IN_EXCLUSIVE_USE) returnValue = -EBUSY;
else if (error == ES_ERROR_DRIVE_CONTROLLER_REPORTED || error == ES_ERROR_CORRUPT_DATA) returnValue = -EIO;
else if (error == ES_ERROR_OPERATION_BLOCKED) returnValue = -EBUSY;
else if (error == ES_ERROR_HARDWARE_FAILURE || error == ES_ERROR_CORRUPT_DATA) returnValue = -EIO;
else if (error != ES_SUCCESS) returnValue = -EACCES;
} break;

View File

@ -337,15 +337,15 @@ void ArchShutdown() {
}
EsError KACPIObjectSetDeviceNotificationHandler(KACPIObject *, KACPINotificationHandler, EsGeneric) {
return ES_ERROR_UNSUPPORTED_FEATURE;
return ES_ERROR_UNSUPPORTED;
}
EsError KACPIObjectEvaluateInteger(KACPIObject *, const char *, uint64_t *) {
return ES_ERROR_UNSUPPORTED_FEATURE;
return ES_ERROR_UNSUPPORTED;
}
EsError KACPIObjectEvaluateMethodWithInteger(KACPIObject *, const char *, uint64_t) {
return ES_ERROR_UNSUPPORTED_FEATURE;
return ES_ERROR_UNSUPPORTED;
}
#endif

View File

@ -73,7 +73,7 @@ static EsError FindDirectoryEntryReferenceFromIndex(Volume *volume, uint8_t *buf
IndexVertex *vertex = (IndexVertex *) buffer;
if (!AccessBlock(volume, rootBlock, 1, vertex, FS_BLOCK_ACCESS_CACHED, K_ACCESS_READ)) {
return ES_ERROR_DRIVE_CONTROLLER_REPORTED;
return ES_ERROR_HARDWARE_FAILURE;
}
int depth = 0;
@ -89,7 +89,7 @@ static EsError FindDirectoryEntryReferenceFromIndex(Volume *volume, uint8_t *buf
if (i == vertex->count || keys[i].value > nameHash) {
if (keys[i].child) {
// The directory is in the child.
if (!AccessBlock(volume, keys[i].child, 1, vertex, FS_BLOCK_ACCESS_CACHED, K_ACCESS_READ)) return ES_ERROR_DRIVE_CONTROLLER_REPORTED;
if (!AccessBlock(volume, keys[i].child, 1, vertex, FS_BLOCK_ACCESS_CACHED, K_ACCESS_READ)) return ES_ERROR_HARDWARE_FAILURE;
else goto nextVertex;
} else {
// We couldn't find the entry.
@ -708,7 +708,7 @@ static uint64_t ResizeInternal(FSNode *file, uint64_t newSize, EsError *error, u
if (entry->fileSize) {
if (!ReadWrite(file, 0, superblock->blockSize, blockBuffer, false, false)) {
return *error = ES_ERROR_DRIVE_ERROR_FILE_DAMAGED, entry->fileSize;
return *error = ES_ERROR_HARDWARE_FAILURE, entry->fileSize;
}
}
@ -729,7 +729,7 @@ static uint64_t ResizeInternal(FSNode *file, uint64_t newSize, EsError *error, u
if (!FreeExtent(volume, previousExtentStart, extentCount)) {
file->corrupt = true;
entry->fileSize = 0;
*error = ES_ERROR_DRIVE_ERROR_FILE_DAMAGED;
*error = ES_ERROR_HARDWARE_FAILURE;
return (entry->fileSize = 0);
}
}
@ -738,7 +738,7 @@ static uint64_t ResizeInternal(FSNode *file, uint64_t newSize, EsError *error, u
EsMemoryCopy(dataBuffer, blockBuffer, newSize);
} else {
*error = ES_ERROR_UNSUPPORTED_FEATURE;
*error = ES_ERROR_UNSUPPORTED;
return entry->fileSize; // Unrecognised indirection.
}
@ -754,7 +754,7 @@ static uint64_t ResizeInternal(FSNode *file, uint64_t newSize, EsError *error, u
if (data->indirection == ESFS_INDIRECTION_DIRECT) {
if (!ReadWrite(file, 0, entry->fileSize, blockBuffer, false, false)) {
*error = ES_ERROR_DRIVE_ERROR_FILE_DAMAGED;
*error = ES_ERROR_HARDWARE_FAILURE;
return entry->fileSize;
}
@ -763,7 +763,7 @@ static uint64_t ResizeInternal(FSNode *file, uint64_t newSize, EsError *error, u
oldBlocks = 0;
entry->fileSize = 0;
} else if (data->indirection != ESFS_INDIRECTION_L1) {
*error = ES_ERROR_UNSUPPORTED_FEATURE;
*error = ES_ERROR_UNSUPPORTED;
return entry->fileSize; // Unrecognised indirection.
}
@ -800,7 +800,7 @@ static uint64_t ResizeInternal(FSNode *file, uint64_t newSize, EsError *error, u
&allocatedStart, &allocatedCount, true /* Zero the blocks */);
if (!success) {
*error = ES_ERROR_DRIVE_ERROR_FILE_DAMAGED;
*error = ES_ERROR_HARDWARE_FAILURE;
return entry->fileSize;
}
@ -821,7 +821,7 @@ static uint64_t ResizeInternal(FSNode *file, uint64_t newSize, EsError *error, u
if (length + position > newDataBufferSize) {
// The data buffer is full.
*error = ES_ERROR_FILE_TOO_FRAGMENTED;
*error = ES_ERROR_FILE_TOO_LARGE;
return entry->fileSize;
} else {
EsMemoryCopy(dataBuffer + position, encode, length);
@ -839,7 +839,7 @@ static uint64_t ResizeInternal(FSNode *file, uint64_t newSize, EsError *error, u
file->corrupt = true;
entry->fileSize = 0;
*error = ES_ERROR_DRIVE_ERROR_FILE_DAMAGED;
*error = ES_ERROR_HARDWARE_FAILURE;
// Free the removed extents.
@ -907,7 +907,7 @@ static uint64_t ResizeInternal(FSNode *file, uint64_t newSize, EsError *error, u
data->indirection = ESFS_INDIRECTION_DIRECT;
data->count = entry->fileSize = oldSize;
EsMemoryCopy(dataBuffer, blockBuffer, data->count);
*error = ES_ERROR_DRIVE_ERROR_FILE_DAMAGED;
*error = ES_ERROR_HARDWARE_FAILURE;
return (entry->fileSize = oldSize);
}
}
@ -1426,17 +1426,17 @@ static EsError RemoveDirectoryEntry(FSNode *file, uint8_t *blockBuffers /* super
// EsPrint("\tpositionOfLastEntry = %d\n\tThis node Reference = %d/%d\n", positionOfLastEntry, file->reference.block, file->reference.offsetIntoBlock);
ESFS_CHECK_TO_ERROR(AccessBlock(volume, file->reference.block, 1, blockBuffers, FS_BLOCK_ACCESS_CACHED, K_ACCESS_READ),
"Remove - Could not load the container block.", ES_ERROR_DRIVE_CONTROLLER_REPORTED);
"Remove - Could not load the container block.", ES_ERROR_HARDWARE_FAILURE);
ESFS_CHECK_TO_ERROR(ReadWrite(directory, positionOfLastEntry & ~(superblock->blockSize - 1), superblock->blockSize,
blockBuffers + superblock->blockSize, false, false), "Remove - Could not load the last block.", ES_ERROR_DRIVE_CONTROLLER_REPORTED);
blockBuffers + superblock->blockSize, false, false), "Remove - Could not load the last block.", ES_ERROR_HARDWARE_FAILURE);
ESFS_CHECK_TO_ERROR(0 == EsMemoryCompare(blockBuffers + file->reference.offsetIntoBlock, &file->entry, sizeof(DirectoryEntry)),
"Remove - Inconsistent file entry.", ES_ERROR_DRIVE_CONTROLLER_REPORTED);
"Remove - Inconsistent file entry.", ES_ERROR_HARDWARE_FAILURE);
DirectoryEntry *movedEntry = (DirectoryEntry *) (blockBuffers + superblock->blockSize + (positionOfLastEntry & (superblock->blockSize - 1)));
DirectoryEntry *deletedEntry = (DirectoryEntry *) (blockBuffers + file->reference.offsetIntoBlock);
EsMemoryCopy(deletedEntry, movedEntry, sizeof(DirectoryEntry));
ESFS_CHECK_TO_ERROR(AccessBlock(volume, file->reference.block, 1, blockBuffers, FS_BLOCK_ACCESS_CACHED, K_ACCESS_WRITE),
"Remove - Could not save the container block.", ES_ERROR_DRIVE_CONTROLLER_REPORTED);
"Remove - Could not save the container block.", ES_ERROR_HARDWARE_FAILURE);
// Step 2: Update the node for the moved entry.
@ -1456,7 +1456,7 @@ static EsError RemoveDirectoryEntry(FSNode *file, uint8_t *blockBuffers /* super
uint64_t key = CalculateCRC64(filename->filename, filename->length, 0);
// EsPrint("\tModify index key for %s\n", filename->length, filename->filename);
ESFS_CHECK_TO_ERROR(IndexModifyKey(volume, key, file->reference, directoryAttribute->indexRootBlock, blockBuffers + superblock->blockSize),
"Remove - Could not update index (2).", ES_ERROR_DRIVE_CONTROLLER_REPORTED);
"Remove - Could not update index (2).", ES_ERROR_HARDWARE_FAILURE);
}
}
@ -1466,7 +1466,7 @@ static EsError RemoveDirectoryEntry(FSNode *file, uint8_t *blockBuffers /* super
if (!(directoryAttribute->childNodes % superblock->directoryEntriesPerBlock)) {
uint64_t newSize = directory->entry.fileSize - superblock->blockSize;
ESFS_CHECK_TO_ERROR(newSize == ResizeInternal(directory, newSize, &error), "Remove - Could not resize directory.", ES_ERROR_DRIVE_CONTROLLER_REPORTED);
ESFS_CHECK_TO_ERROR(newSize == ResizeInternal(directory, newSize, &error), "Remove - Could not resize directory.", ES_ERROR_HARDWARE_FAILURE);
}
// Step 4: Remove the entry from the index.
@ -1476,7 +1476,7 @@ static EsError RemoveDirectoryEntry(FSNode *file, uint8_t *blockBuffers /* super
if (filename) {
uint64_t removeKey = CalculateCRC64(filename->filename, filename->length, 0);
ESFS_CHECK_TO_ERROR(IndexRemoveKey(volume, removeKey, &directoryAttribute->indexRootBlock), "Remove - Could not update index.", ES_ERROR_DRIVE_CONTROLLER_REPORTED);
ESFS_CHECK_TO_ERROR(IndexRemoveKey(volume, removeKey, &directoryAttribute->indexRootBlock), "Remove - Could not update index.", ES_ERROR_HARDWARE_FAILURE);
}
return ES_SUCCESS;
@ -1504,7 +1504,7 @@ static EsError Remove(KNode *_directory, KNode *node) {
if (attribute->indexRootBlock) {
IndexVertex *vertex = (IndexVertex *) blockBuffers;
ESFS_CHECK_TO_ERROR(AccessBlock(volume, attribute->indexRootBlock, 1, vertex, FS_BLOCK_ACCESS_CACHED, K_ACCESS_READ),
"Remove - Could not access index root.", ES_ERROR_DRIVE_CONTROLLER_REPORTED);
"Remove - Could not access index root.", ES_ERROR_HARDWARE_FAILURE);
ESFS_CHECK_TO_ERROR(!vertex->count, "Remove - Index was not empty (although it should be as the directory is empty).", ES_ERROR_CORRUPT_DATA);
KWriterLockTake(&volume->blockBitmapLock, K_LOCK_EXCLUSIVE);
EsDefer(KWriterLockReturn(&volume->blockBitmapLock, K_LOCK_EXCLUSIVE));

View File

@ -318,7 +318,7 @@ static EsError Enumerate(KNode *node) {
uint32_t block = GetDataBlock(volume, &directory->inode, i, blockBuffer);
if (!block) {
return ES_ERROR_DRIVE_CONTROLLER_REPORTED;
return ES_ERROR_HARDWARE_FAILURE;
}
EsError error = volume->Access((uint64_t) block * volume->blockBytes, volume->blockBytes, K_ACCESS_READ, blockBuffer, ES_FLAGS_DEFAULT);
@ -387,7 +387,7 @@ static EsError Scan(const char *name, size_t nameBytes, KNode *_directory) {
uint32_t block = GetDataBlock(volume, &directory->inode, i, blockBuffer);
if (!block) {
return ES_ERROR_DRIVE_CONTROLLER_REPORTED;
return ES_ERROR_HARDWARE_FAILURE;
}
EsError error = volume->Access((uint64_t) block * volume->blockBytes, volume->blockBytes, K_ACCESS_READ, blockBuffer, ES_FLAGS_DEFAULT);
@ -428,7 +428,7 @@ static EsError Scan(const char *name, size_t nameBytes, KNode *_directory) {
} else if (entry->type == DIRENT_TYPE_REGULAR) {
metadata.type = ES_NODE_FILE;
} else {
SCAN_FAILURE("Unsupported file type.\n", ES_ERROR_UNSUPPORTED_FEATURE);
SCAN_FAILURE("Unsupported file type.\n", ES_ERROR_UNSUPPORTED);
}
return FSDirectoryEntryFound(_directory, &metadata, &inode, name, nameBytes, false);
@ -581,7 +581,7 @@ static size_t Read(KNode *node, void *_buffer, EsFileOffset offset, EsFileOffset
bool success = dispatchGroup.Read();
if (!success) {
READ_FAILURE("Could not read blocks from drive.\n", ES_ERROR_DRIVE_CONTROLLER_REPORTED);
READ_FAILURE("Could not read blocks from drive.\n", ES_ERROR_HARDWARE_FAILURE);
}
return count;

View File

@ -133,7 +133,7 @@ EsError KLoadELF(KNode *node, KLoadedExecutable *executable) {
if (bytesRead != sizeof(BundleHeader)) {
KernelLog(LOG_ERROR, "ELF", "executable load error", "Could not read the bundle header.\n");
return ES_ERROR_UNSUPPORTED_EXECUTABLE;
return ES_ERROR_UNSUPPORTED;
}
if (header.signature == BUNDLE_SIGNATURE
@ -149,12 +149,12 @@ EsError KLoadELF(KNode *node, KLoadedExecutable *executable) {
if (ArchCheckBundleHeader() || header.mapAddress & (K_PAGE_SIZE - 1)) {
KernelLog(LOG_ERROR, "ELF", "executable load error", "Invalid bundle mapping addresses.\n");
return ES_ERROR_UNSUPPORTED_EXECUTABLE;
return ES_ERROR_UNSUPPORTED;
}
if (header.version != 1) {
KernelLog(LOG_ERROR, "ELF", "executable load error", "Invalid bundle version.\n");
return ES_ERROR_UNSUPPORTED_EXECUTABLE;
return ES_ERROR_UNSUPPORTED;
}
// Map the bundle file.
@ -183,7 +183,7 @@ EsError KLoadELF(KNode *node, KLoadedExecutable *executable) {
if (executableOffset >= fileSize || !found) {
KernelLog(LOG_ERROR, "ELF", "executable load error", "Could not find the executable section for the current architecture.\n");
return ES_ERROR_UNSUPPORTED_EXECUTABLE;
return ES_ERROR_UNSUPPORTED;
}
executable->isBundle = true;
@ -197,39 +197,39 @@ EsError KLoadELF(KNode *node, KLoadedExecutable *executable) {
if (bytesRead != sizeof(ElfHeader)) {
KernelLog(LOG_ERROR, "ELF", "executable load error", "Could not read the ELF header.\n");
return ES_ERROR_UNSUPPORTED_EXECUTABLE;
return ES_ERROR_UNSUPPORTED;
}
size_t programHeaderEntrySize = header.programHeaderEntrySize;
if (header.magicNumber != 0x464C457F) {
KernelLog(LOG_ERROR, "ELF", "executable load error", "Incorrect executable magic number.\n");
return ES_ERROR_UNSUPPORTED_EXECUTABLE;
return ES_ERROR_UNSUPPORTED;
}
if (header.bits != 2) {
KernelLog(LOG_ERROR, "ELF", "executable load error", "Incorrect executable bits.\n");
return ES_ERROR_UNSUPPORTED_EXECUTABLE;
return ES_ERROR_UNSUPPORTED;
}
if (header.endianness != 1) {
KernelLog(LOG_ERROR, "ELF", "executable load error", "Incorrect executable endianness.\n");
return ES_ERROR_UNSUPPORTED_EXECUTABLE;
return ES_ERROR_UNSUPPORTED;
}
if (header.abi != 0) {
KernelLog(LOG_ERROR, "ELF", "executable load error", "Incorrect executable ABI.\n");
return ES_ERROR_UNSUPPORTED_EXECUTABLE;
return ES_ERROR_UNSUPPORTED;
}
if (header.type != 2) {
KernelLog(LOG_ERROR, "ELF", "executable load error", "Incorrect executable type.\n");
return ES_ERROR_UNSUPPORTED_EXECUTABLE;
return ES_ERROR_UNSUPPORTED;
}
if (header.instructionSet != 0x3E) {
KernelLog(LOG_ERROR, "ELF", "executable load error", "Incorrect executable instruction set.\n");
return ES_ERROR_UNSUPPORTED_EXECUTABLE;
return ES_ERROR_UNSUPPORTED;
}
ElfProgramHeader *programHeaders = (ElfProgramHeader *) EsHeapAllocate(programHeaderEntrySize * header.programHeaderEntries, false, K_PAGED);
@ -245,7 +245,7 @@ EsError KLoadELF(KNode *node, KLoadedExecutable *executable) {
if (bytesRead != programHeaderEntrySize * header.programHeaderEntries) {
KernelLog(LOG_ERROR, "ELF", "executable load error", "Could not read the program headers.\n");
return ES_ERROR_UNSUPPORTED_EXECUTABLE;
return ES_ERROR_UNSUPPORTED;
}
for (uintptr_t i = 0; i < header.programHeaderEntries; i++) {
@ -254,7 +254,7 @@ EsError KLoadELF(KNode *node, KLoadedExecutable *executable) {
if (header->type == 1 /* PT_LOAD */) {
if (ArchCheckELFHeader()) {
KernelLog(LOG_ERROR, "ELF", "executable load error", "Rejected ELF program header.\n");
return ES_ERROR_UNSUPPORTED_EXECUTABLE;
return ES_ERROR_UNSUPPORTED;
}
#if 0
@ -270,7 +270,7 @@ EsError KLoadELF(KNode *node, KLoadedExecutable *executable) {
if (success) {
bytesRead = FSFileReadSync(node, (void *) header->virtualAddress, executableOffset + header->fileOffset, header->dataInFile, 0);
if (bytesRead != header->dataInFile) return ES_ERROR_UNSUPPORTED_EXECUTABLE;
if (bytesRead != header->dataInFile) return ES_ERROR_UNSUPPORTED;
}
#else
uintptr_t fileStart = RoundDown(header->virtualAddress, K_PAGE_SIZE);
@ -451,13 +451,13 @@ EsError KLoadELFModule(KModule *module) {
if (!getVersion || getVersion() != KERNEL_VERSION) {
KernelLog(LOG_ERROR, "Modules", "invalid module kernel version",
"KLoadELFModule - Attempted to load module '%s' for invalid kernel version.\n", module->pathBytes, module->path);
return ES_ERROR_UNSUPPORTED_FEATURE;
return ES_ERROR_UNSUPPORTED;
}
return ES_SUCCESS;
#else
(void) module;
return ES_ERROR_UNSUPPORTED_FEATURE;
return ES_ERROR_UNSUPPORTED;
#endif
}

View File

@ -346,7 +346,7 @@ EsError FSFileResize(KNode *node, EsFileOffset newSize) {
KWriterLockTake(&file->resizeLock, K_LOCK_EXCLUSIVE);
if (file->blockResize) {
error = ES_ERROR_FILE_IN_EXCLUSIVE_USE;
error = ES_ERROR_OPERATION_BLOCKED;
} else if (!file->fileSystem->resize) {
error = ES_ERROR_FILE_ON_READ_ONLY_VOLUME;
} else {
@ -446,7 +446,7 @@ EsError FSNodeDelete(KNode *node) {
if (file->blockResize) {
KWriterLockReturn(&file->resizeLock, K_LOCK_EXCLUSIVE);
return ES_ERROR_FILE_IN_EXCLUSIVE_USE;
return ES_ERROR_OPERATION_BLOCKED;
}
_FSFileResize(file, 0);
@ -483,7 +483,7 @@ EsError FSNodeMove(KNode *node, KNode *_newParent, const char *newName, size_t n
if (fs.shutdown) KernelPanic("FSNodeMove - Attempting to move a file after FSShutdown called.\n");
if (!FSCheckPathForIllegalCharacters(newName, newNameBytes)) {
return ES_ERROR_ILLEGAL_PATH;
return ES_ERROR_INVALID_NAME;
}
FSDirectoryEntry *entry = node->directoryEntry;
@ -493,7 +493,7 @@ EsError FSNodeMove(KNode *node, KNode *_newParent, const char *newName, size_t n
// Check the move is valid.
if (newParent->directoryEntry->type != ES_NODE_DIRECTORY) {
return ES_ERROR_TARGET_INVALID_TYPE;
return ES_ERROR_INCORRECT_NODE_TYPE;
}
if (!oldParent || oldParent->fileSystem != newParent->fileSystem || oldParent->fileSystem != node->fileSystem) {
@ -561,7 +561,7 @@ EsError FSNodeMove(KNode *node, KNode *_newParent, const char *newName, size_t n
}
if (alreadyExists) {
error = ES_ERROR_FILE_ALREADY_EXISTS;
error = ES_ERROR_ALREADY_EXISTS;
goto fail;
}
@ -1093,7 +1093,7 @@ EsError FSNodeOpenHandle(KNode *node, uint32_t flags, uint8_t mode) {
FSFile *file = (FSFile *) node;
if (flags & ES_FILE_READ) {
if (file->countWrite > 0) return ES_ERROR_FILE_HAS_WRITERS;
if (file->countWrite > 0) return ES_ERROR_OPERATION_BLOCKED;
} else if (flags & ES_FILE_WRITE) {
if (flags & _ES_NODE_FROM_WRITE_EXCLUSIVE) {
if (!file->countWrite || (~file->flags & NODE_HAS_EXCLUSIVE_WRITER)) {
@ -1101,11 +1101,11 @@ EsError FSNodeOpenHandle(KNode *node, uint32_t flags, uint8_t mode) {
}
} else {
if (file->countWrite) {
return ES_ERROR_FILE_CANNOT_GET_EXCLUSIVE_USE;
return ES_ERROR_OPERATION_BLOCKED;
}
}
} else if (flags & ES_FILE_WRITE_SHARED) {
if ((file->flags & NODE_HAS_EXCLUSIVE_WRITER) || file->countWrite < 0) return ES_ERROR_FILE_IN_EXCLUSIVE_USE;
if ((file->flags & NODE_HAS_EXCLUSIVE_WRITER) || file->countWrite < 0) return ES_ERROR_OPERATION_BLOCKED;
}
if (flags & (ES_FILE_WRITE_SHARED | ES_FILE_WRITE)) {
@ -1389,7 +1389,7 @@ KNodeInformation FSNodeOpen(const char *path, size_t pathBytes, uint32_t flags,
if (pathBytes && path[pathBytes - 1] == '/') pathBytes--;
if (!FSCheckPathForIllegalCharacters(path, pathBytes)) {
return { ES_ERROR_ILLEGAL_PATH };
return { ES_ERROR_INVALID_NAME };
}
KFileSystem *fileSystem = nullptr;
@ -1430,7 +1430,7 @@ KNodeInformation FSNodeOpen(const char *path, size_t pathBytes, uint32_t flags,
}
if ((flags & ES_NODE_FAIL_IF_FOUND) && !createdNode) {
error = ES_ERROR_FILE_ALREADY_EXISTS;
error = ES_ERROR_ALREADY_EXISTS;
} else {
error = FSNodeOpenHandle(node, flags, FS_NODE_OPEN_HANDLE_STANDARD);
}
@ -1609,7 +1609,7 @@ EsError FSBlockDeviceAccess(KBlockDeviceAccessRequest request) {
}
if (request.dispatchGroup == &fakeDispatchGroup) {
return fakeDispatchGroup.Wait() ? ES_SUCCESS : ES_ERROR_DRIVE_CONTROLLER_REPORTED;
return fakeDispatchGroup.Wait() ? ES_SUCCESS : ES_ERROR_HARDWARE_FAILURE;
} else {
return ES_SUCCESS;
}

View File

@ -193,8 +193,8 @@ DEFINE_INTERFACE_STRING(FileRenameSuccess, "Renamed");
DEFINE_INTERFACE_STRING(FileSaveAnnouncement, "Saved to %s");
DEFINE_INTERFACE_STRING(FileSaveErrorFileDeleted, "Another application deleted the file.");
DEFINE_INTERFACE_STRING(FileSaveErrorCorrupt, "The file has been corrupted, and it cannot be modified.");
DEFINE_INTERFACE_STRING(FileSaveErrorDrive, "The drive containing the file was unable to modify it.");
DEFINE_INTERFACE_STRING(FileSaveErrorCorrupt, "The file has been corrupted, and it cannot be accessed.");
DEFINE_INTERFACE_STRING(FileSaveErrorDrive, "The drive containing the file was unable to access it.");
DEFINE_INTERFACE_STRING(FileSaveErrorTooLarge, "The drive does not support files large enough to store this document.");
DEFINE_INTERFACE_STRING(FileSaveErrorConcurrentAccess, "Another application is modifying the file.");
DEFINE_INTERFACE_STRING(FileSaveErrorDriveFull, "The drive is full. Try deleting some files to free up space.");