ICNSTranslator: Minor fixes

* documentIndex not zero-based
* more error handling
* memory leak
This commit is contained in:
threedeyes 2012-11-09 04:15:30 +00:00
parent 0810cfe451
commit 70f32936e9
2 changed files with 16 additions and 8 deletions

View File

@ -60,6 +60,9 @@ ICNSLoader::ICNSLoader(BPositionIO *stream)
stream->Seek(0, SEEK_END);
fStreamSize = stream->Position();
stream->Seek(0, SEEK_SET);
if (fStreamSize <= 0)
return;
uint8* icnsDataBuffer = new uint8[fStreamSize];
size_t readedBytes = stream->Read(icnsDataBuffer,fStreamSize);
@ -67,8 +70,11 @@ ICNSLoader::ICNSLoader(BPositionIO *stream)
fIconFamily = NULL;
int status = icns_import_family_data(readedBytes, icnsDataBuffer,
&fIconFamily);
if (status != 0)
if (status != 0) {
delete icnsDataBuffer;
return;
}
icns_byte_t *dataPtr = (icns_byte_t*)fIconFamily;
off_t dataOffset = sizeof(icns_type_t) + sizeof(icns_size_t);
@ -89,10 +95,10 @@ ICNSLoader::ICNSLoader(BPositionIO *stream)
}
dataOffset += iconElement.elementSize;
}
fFormatList.SortItems(compareTypes);
delete icnsDataBuffer;
delete icnsDataBuffer;
fLoaded = true;
}
@ -275,7 +281,7 @@ ICNSSaver::ICNSSaver(BPositionIO *stream, uint32 rowBytes, icns_type_t type)
icns_free_image(&icnsMask);
}
if(!fCreated) {
if (!fCreated) {
free(fIconFamily);
fIconFamily = NULL;
}
@ -297,9 +303,11 @@ ICNSSaver::SaveData(BPositionIO *target)
icns_size_t dataSize;
icns_byte_t *dataPtrOut;
icns_export_family_data(fIconFamily, &dataSize, &dataPtrOut);
target->Write(dataPtrOut, dataSize);
return B_OK;
if (dataSize != 0 && dataPtrOut != NULL) {
if (target->Write(dataPtrOut, dataSize) == dataSize);
return B_OK;
}
return B_ERROR;
}

View File

@ -191,7 +191,7 @@ ICNSTranslator::DerivedTranslate(BPositionIO *source,
if (!icnsFile.IsLoaded() || icnsFile.IconsCount() <= 0)
return B_NO_TRANSLATOR;
int32 documentIndex = 0;
int32 documentIndex = 1;
if (ioExtension) {
if (ioExtension->FindInt32(DOCUMENT_INDEX, &documentIndex) != B_OK)