ICNSTranslator: Minor fixes
* documentIndex not zero-based * more error handling * memory leak
This commit is contained in:
@@ -61,14 +61,20 @@ ICNSLoader::ICNSLoader(BPositionIO *stream)
|
|||||||
fStreamSize = stream->Position();
|
fStreamSize = stream->Position();
|
||||||
stream->Seek(0, SEEK_SET);
|
stream->Seek(0, SEEK_SET);
|
||||||
|
|
||||||
|
if (fStreamSize <= 0)
|
||||||
|
return;
|
||||||
|
|
||||||
uint8* icnsDataBuffer = new uint8[fStreamSize];
|
uint8* icnsDataBuffer = new uint8[fStreamSize];
|
||||||
size_t readedBytes = stream->Read(icnsDataBuffer,fStreamSize);
|
size_t readedBytes = stream->Read(icnsDataBuffer,fStreamSize);
|
||||||
|
|
||||||
fIconFamily = NULL;
|
fIconFamily = NULL;
|
||||||
int status = icns_import_family_data(readedBytes, icnsDataBuffer,
|
int status = icns_import_family_data(readedBytes, icnsDataBuffer,
|
||||||
&fIconFamily);
|
&fIconFamily);
|
||||||
if (status != 0)
|
|
||||||
|
if (status != 0) {
|
||||||
|
delete icnsDataBuffer;
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
icns_byte_t *dataPtr = (icns_byte_t*)fIconFamily;
|
icns_byte_t *dataPtr = (icns_byte_t*)fIconFamily;
|
||||||
off_t dataOffset = sizeof(icns_type_t) + sizeof(icns_size_t);
|
off_t dataOffset = sizeof(icns_type_t) + sizeof(icns_size_t);
|
||||||
@@ -297,10 +303,12 @@ ICNSSaver::SaveData(BPositionIO *target)
|
|||||||
icns_size_t dataSize;
|
icns_size_t dataSize;
|
||||||
icns_byte_t *dataPtrOut;
|
icns_byte_t *dataPtrOut;
|
||||||
icns_export_family_data(fIconFamily, &dataSize, &dataPtrOut);
|
icns_export_family_data(fIconFamily, &dataSize, &dataPtrOut);
|
||||||
target->Write(dataPtrOut, dataSize);
|
if (dataSize != 0 && dataPtrOut != NULL) {
|
||||||
|
if (target->Write(dataPtrOut, dataSize) == dataSize);
|
||||||
return B_OK;
|
return B_OK;
|
||||||
}
|
}
|
||||||
|
return B_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool
|
bool
|
||||||
|
|||||||
@@ -191,7 +191,7 @@ ICNSTranslator::DerivedTranslate(BPositionIO *source,
|
|||||||
if (!icnsFile.IsLoaded() || icnsFile.IconsCount() <= 0)
|
if (!icnsFile.IsLoaded() || icnsFile.IconsCount() <= 0)
|
||||||
return B_NO_TRANSLATOR;
|
return B_NO_TRANSLATOR;
|
||||||
|
|
||||||
int32 documentIndex = 0;
|
int32 documentIndex = 1;
|
||||||
|
|
||||||
if (ioExtension) {
|
if (ioExtension) {
|
||||||
if (ioExtension->FindInt32(DOCUMENT_INDEX, &documentIndex) != B_OK)
|
if (ioExtension->FindInt32(DOCUMENT_INDEX, &documentIndex) != B_OK)
|
||||||
|
|||||||
Reference in New Issue
Block a user