mirror of
https://github.com/wiiu-env/WiiUPluginLoaderBackend.git
synced 2024-12-23 03:21:48 +01:00
StorageAPI: Update GetItemSize to take an additional itemType parameter to avoid a accidential string to binary conversion (e.g. for hashes)
This commit is contained in:
parent
8cc78de58c
commit
c38ef605cc
@ -1,7 +1,7 @@
|
||||
FROM ghcr.io/wiiu-env/devkitppc:20230621
|
||||
|
||||
COPY --from=ghcr.io/wiiu-env/wiiumodulesystem:0.3.2-dev-20231203-2e5832b /artifacts $DEVKITPRO
|
||||
COPY --from=ghcr.io/wiiu-env/wiiupluginsystem:0.8.0-dev-20231221-ca17105 /artifacts $DEVKITPRO
|
||||
COPY --from=ghcr.io/wiiu-env/wiiupluginsystem:0.8.0-dev-20240223-46f4cf6 /artifacts $DEVKITPRO
|
||||
COPY --from=ghcr.io/wiiu-env/libfunctionpatcher:20230621 /artifacts $DEVKITPRO
|
||||
COPY --from=ghcr.io/wiiu-env/libmappedmemory:20230621 /artifacts $DEVKITPRO
|
||||
COPY --from=ghcr.io/wiiu-env/libwupsbackend:20230621 /artifacts $DEVKITPRO
|
||||
|
@ -148,11 +148,16 @@ bool StorageItem::getValue(int64_t &result) const {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool StorageItem::getItemSize(uint32_t &outSize) const {
|
||||
bool StorageItem::getItemSizeString(uint32_t &outSize) const {
|
||||
if (mType == StorageItemType::String) {
|
||||
outSize = (std::get<std::string>(mData).length() + 1);
|
||||
return true;
|
||||
} else if (mType == StorageItemType::Binary) {
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool StorageItem::getItemSizeBinary(uint32_t &outSize) const {
|
||||
if (mType == StorageItemType::Binary) {
|
||||
outSize = std::get<std::vector<uint8_t>>(mData).size();
|
||||
return true;
|
||||
}
|
||||
|
@ -73,7 +73,9 @@ public:
|
||||
return mKey;
|
||||
}
|
||||
|
||||
bool getItemSize(uint32_t &outSize) const;
|
||||
bool getItemSizeString(uint32_t &outSize) const;
|
||||
|
||||
bool getItemSizeBinary(uint32_t &outSize) const;
|
||||
|
||||
bool attemptBinaryConversion();
|
||||
|
||||
|
@ -400,7 +400,7 @@ namespace StorageUtils {
|
||||
}
|
||||
|
||||
WUPSStorageError err = Helper::LoadFromFile(plugin_id, *root);
|
||||
if(err == WUPS_STORAGE_ERROR_NOT_FOUND) {
|
||||
if (err == WUPS_STORAGE_ERROR_NOT_FOUND) {
|
||||
// Create new clean StorageItemRoot if no existing storage was found
|
||||
root = make_unique_nothrow<StorageItemRoot>(plugin_id);
|
||||
} else if (err != WUPS_STORAGE_ERROR_SUCCESS) {
|
||||
@ -512,10 +512,13 @@ namespace StorageUtils {
|
||||
return WUPS_STORAGE_ERROR_NOT_FOUND;
|
||||
}
|
||||
|
||||
WUPSStorageError GetItemSize(wups_storage_root_item root, wups_storage_item parent, const char *key, uint32_t *outSize) {
|
||||
WUPSStorageError GetItemSize(wups_storage_root_item root, wups_storage_item parent, const char *key, WUPSStorageItemType itemType, uint32_t *outSize) {
|
||||
if (!outSize) {
|
||||
return WUPS_STORAGE_ERROR_INVALID_ARGS;
|
||||
}
|
||||
if (itemType != WUPS_STORAGE_ITEM_STRING && itemType != WUPS_STORAGE_ITEM_BINARY) {
|
||||
return WUPS_STORAGE_ERROR_UNEXPECTED_DATA_TYPE;
|
||||
}
|
||||
std::lock_guard lock(gStorageMutex);
|
||||
auto subItem = StorageUtils::Helper::getSubItem(root, parent);
|
||||
if (!subItem) {
|
||||
@ -523,15 +526,24 @@ namespace StorageUtils {
|
||||
}
|
||||
auto item = subItem->getItem(key);
|
||||
if (item) {
|
||||
// Trigger potential string -> binary conversion.
|
||||
if (!item->attemptBinaryConversion()) {
|
||||
return WUPS_STORAGE_ERROR_MALLOC_FAILED;
|
||||
if (itemType == WUPS_STORAGE_ITEM_BINARY) {
|
||||
// Trigger potential string -> binary conversion.
|
||||
if (!item->attemptBinaryConversion()) {
|
||||
return WUPS_STORAGE_ERROR_MALLOC_FAILED;
|
||||
}
|
||||
}
|
||||
uint32_t tmp = 0;
|
||||
if (item->getItemSize(tmp)) {
|
||||
bool res = false;
|
||||
if (itemType == WUPS_STORAGE_ITEM_STRING) {
|
||||
res = item->getItemSizeString(tmp);
|
||||
} else if (itemType == WUPS_STORAGE_ITEM_BINARY) {
|
||||
res = item->getItemSizeBinary(tmp);
|
||||
}
|
||||
if (res) {
|
||||
*outSize = tmp;
|
||||
return WUPS_STORAGE_ERROR_SUCCESS;
|
||||
}
|
||||
DEBUG_FUNCTION_LINE_ERR("Failed to get size for item %s", key);
|
||||
return WUPS_STORAGE_ERROR_UNEXPECTED_DATA_TYPE;
|
||||
}
|
||||
return WUPS_STORAGE_ERROR_NOT_FOUND;
|
||||
|
@ -17,5 +17,5 @@ namespace StorageUtils::API {
|
||||
WUPSStorageError GetSubItem(wups_storage_root_item root, wups_storage_item parent, const char *key, wups_storage_item *outItem);
|
||||
WUPSStorageError StoreItem(wups_storage_root_item root, wups_storage_item parent, const char *key, WUPSStorageItemType itemType, void *data, uint32_t length);
|
||||
WUPSStorageError GetItem(wups_storage_root_item root, wups_storage_item parent, const char *key, WUPSStorageItemType itemType, void *data, uint32_t maxSize, uint32_t *outSize);
|
||||
WUPSStorageError GetItemSize(wups_storage_root_item root, wups_storage_item parent, const char *key, uint32_t *outSize);
|
||||
WUPSStorageError GetItemSize(wups_storage_root_item root, wups_storage_item parent, const char *key, WUPSStorageItemType itemType, uint32_t *outSize);
|
||||
} // namespace StorageUtils::API
|
||||
|
Loading…
Reference in New Issue
Block a user