diff options
author | Noel Grandin <noel.grandin@collabora.co.uk> | 2018-08-29 13:02:22 +0200 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2018-08-30 11:10:06 +0200 |
commit | fbb2d771681709e84444d40f844d16e9a487a813 (patch) | |
tree | 2b3d09002445fb49dc607b186bba4cf9a68d4dae /registry | |
parent | 5857555e129a5913352cd7e8c7e825dd6892d808 (diff) |
loplugin:useuniqueptr in registry
Change-Id: Ia2f9340183e76e6d46ea51ca62c7a731264f621c
Reviewed-on: https://gerrit.libreoffice.org/59773
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'registry')
-rw-r--r-- | registry/source/keyimpl.cxx | 217 |
1 files changed, 84 insertions, 133 deletions
diff --git a/registry/source/keyimpl.cxx b/registry/source/keyimpl.cxx index 7dcd088ceaa5..a717c5df6764 100644 --- a/registry/source/keyimpl.cxx +++ b/registry/source/keyimpl.cxx @@ -27,6 +27,7 @@ #include <rtl/ustrbuf.hxx> #include <osl/diagnose.h> #include <sal/log.hxx> +#include <memory> using namespace store; @@ -218,7 +219,7 @@ RegError ORegKey::deleteKey(const OUString& keyName) RegError ORegKey::getValueInfo(const OUString& valueName, RegValueType* pValueType, sal_uInt32* pValueSize) const { OStoreStream rValue; - sal_uInt8* pBuffer; + std::unique_ptr<sal_uInt8[]> pBuffer; storeAccessMode accessMode = storeAccessMode::ReadWrite; if (m_pRegistry->isReadOnly()) @@ -238,23 +239,21 @@ RegError ORegKey::getValueInfo(const OUString& valueName, RegValueType* pValueTy return RegError::VALUE_NOT_EXISTS; } - pBuffer = static_cast<sal_uInt8*>(std::malloc(VALUE_HEADERSIZE)); + pBuffer.reset(new sal_uInt8[VALUE_HEADERSIZE]); sal_uInt32 readBytes; - if ( rValue.readAt(0, pBuffer, VALUE_HEADERSIZE, readBytes) ) + if ( rValue.readAt(0, pBuffer.get(), VALUE_HEADERSIZE, readBytes) ) { - std::free(pBuffer); return RegError::INVALID_VALUE; } if (readBytes != VALUE_HEADERSIZE) { - std::free(pBuffer); return RegError::INVALID_VALUE; } sal_uInt32 size; - sal_uInt8 type = *pBuffer; - readUINT32(pBuffer+VALUE_TYPEOFFSET, size); + sal_uInt8 type = pBuffer[0]; + readUINT32(pBuffer.get()+VALUE_TYPEOFFSET, size); *pValueType = static_cast<RegValueType>(type); // if (*pValueType == RegValueType::UNICODE) @@ -264,17 +263,15 @@ RegError ORegKey::getValueInfo(const OUString& valueName, RegValueType* pValueTy // { if (*pValueType > RegValueType::BINARY) { - std::free(pBuffer); - pBuffer = static_cast<sal_uInt8*>(std::malloc(4)); - rValue.readAt(VALUE_HEADEROFFSET, pBuffer, 4, readBytes); + pBuffer.reset(new sal_uInt8[4]); + rValue.readAt(VALUE_HEADEROFFSET, pBuffer.get(), 4, readBytes); - readUINT32(pBuffer, size); + readUINT32(pBuffer.get(), size); } *pValueSize = size; // } - std::free(pBuffer); return RegError::NO_ERROR; } @@ -284,7 +281,7 @@ RegError ORegKey::getValueInfo(const OUString& valueName, RegValueType* pValueTy RegError ORegKey::setValue(const OUString& valueName, RegValueType vType, RegValue value, sal_uInt32 vSize) { OStoreStream rValue; - sal_uInt8* pBuffer; + std::unique_ptr<sal_uInt8[]> pBuffer; if (m_pRegistry->isReadOnly()) { @@ -309,27 +306,27 @@ RegError ORegKey::setValue(const OUString& valueName, RegValueType vType, RegVal sal_uInt32 size = vSize; sal_uInt8 type = static_cast<sal_uInt8>(vType); - pBuffer = static_cast<sal_uInt8*>(std::malloc(VALUE_HEADERSIZE + size)); - memcpy(pBuffer, &type, 1); + pBuffer.reset(new sal_uInt8[VALUE_HEADERSIZE + size]); + memcpy(pBuffer.get(), &type, 1); - writeUINT32(pBuffer+VALUE_TYPEOFFSET, size); + writeUINT32(pBuffer.get()+VALUE_TYPEOFFSET, size); switch (vType) { case RegValueType::NOT_DEFINED: - memcpy(pBuffer+VALUE_HEADEROFFSET, value, size); + memcpy(pBuffer.get()+VALUE_HEADEROFFSET, value, size); break; case RegValueType::LONG: - writeINT32(pBuffer+VALUE_HEADEROFFSET, *static_cast<sal_Int32*>(value)); + writeINT32(pBuffer.get()+VALUE_HEADEROFFSET, *static_cast<sal_Int32*>(value)); break; case RegValueType::STRING: - writeUtf8(pBuffer+VALUE_HEADEROFFSET, static_cast<const sal_Char*>(value)); + writeUtf8(pBuffer.get()+VALUE_HEADEROFFSET, static_cast<const sal_Char*>(value)); break; case RegValueType::UNICODE: - writeString(pBuffer+VALUE_HEADEROFFSET, static_cast<const sal_Unicode*>(value)); + writeString(pBuffer.get()+VALUE_HEADEROFFSET, static_cast<const sal_Unicode*>(value)); break; case RegValueType::BINARY: - memcpy(pBuffer+VALUE_HEADEROFFSET, value, size); + memcpy(pBuffer.get()+VALUE_HEADEROFFSET, value, size); break; default: OSL_ASSERT(false); @@ -337,19 +334,16 @@ RegError ORegKey::setValue(const OUString& valueName, RegValueType vType, RegVal } sal_uInt32 writenBytes; - if ( rValue.writeAt(0, pBuffer, VALUE_HEADERSIZE+size, writenBytes) ) + if ( rValue.writeAt(0, pBuffer.get(), VALUE_HEADERSIZE+size, writenBytes) ) { - std::free(pBuffer); return RegError::SET_VALUE_FAILED; } if (writenBytes != (VALUE_HEADERSIZE+size)) { - std::free(pBuffer); return RegError::SET_VALUE_FAILED; } setModified(); - std::free(pBuffer); return RegError::NO_ERROR; } @@ -359,7 +353,7 @@ RegError ORegKey::setValue(const OUString& valueName, RegValueType vType, RegVal RegError ORegKey::setLongListValue(const OUString& valueName, sal_Int32 const * pValueList, sal_uInt32 len) { OStoreStream rValue; - sal_uInt8* pBuffer; + std::unique_ptr<sal_uInt8[]> pBuffer; if (m_pRegistry->isReadOnly()) { @@ -381,34 +375,31 @@ RegError ORegKey::setLongListValue(const OUString& valueName, sal_Int32 const * size += len * 4; sal_uInt8 type = sal_uInt8(RegValueType::LONGLIST); - pBuffer = static_cast<sal_uInt8*>(std::malloc(VALUE_HEADERSIZE + size)); - memcpy(pBuffer, &type, 1); + pBuffer.reset(new sal_uInt8[VALUE_HEADERSIZE + size]); + memcpy(pBuffer.get(), &type, 1); - writeUINT32(pBuffer+VALUE_TYPEOFFSET, size); - writeUINT32(pBuffer+VALUE_HEADEROFFSET, len); + writeUINT32(pBuffer.get()+VALUE_TYPEOFFSET, size); + writeUINT32(pBuffer.get()+VALUE_HEADEROFFSET, len); sal_uInt32 offset = 4; // initial 4 bytes for the size of the array for (sal_uInt32 i=0; i < len; i++) { - writeINT32(pBuffer+VALUE_HEADEROFFSET+offset, pValueList[i]); + writeINT32(pBuffer.get()+VALUE_HEADEROFFSET+offset, pValueList[i]); offset += 4; } sal_uInt32 writenBytes; - if ( rValue.writeAt(0, pBuffer, VALUE_HEADERSIZE+size, writenBytes) ) + if ( rValue.writeAt(0, pBuffer.get(), VALUE_HEADERSIZE+size, writenBytes) ) { - std::free(pBuffer); return RegError::SET_VALUE_FAILED; } if (writenBytes != (VALUE_HEADEROFFSET+size)) { - std::free(pBuffer); return RegError::SET_VALUE_FAILED; } setModified(); - std::free(pBuffer); return RegError::NO_ERROR; } @@ -418,7 +409,7 @@ RegError ORegKey::setLongListValue(const OUString& valueName, sal_Int32 const * RegError ORegKey::setStringListValue(const OUString& valueName, sal_Char** pValueList, sal_uInt32 len) { OStoreStream rValue; - sal_uInt8* pBuffer; + std::unique_ptr<sal_uInt8[]> pBuffer; if (m_pRegistry->isReadOnly()) { @@ -444,11 +435,11 @@ RegError ORegKey::setStringListValue(const OUString& valueName, sal_Char** pValu } sal_uInt8 type = sal_uInt8(RegValueType::STRINGLIST); - pBuffer = static_cast<sal_uInt8*>(std::malloc(VALUE_HEADERSIZE + size)); - memcpy(pBuffer, &type, 1); + pBuffer.reset(new sal_uInt8[VALUE_HEADERSIZE + size]); + memcpy(pBuffer.get(), &type, 1); - writeUINT32(pBuffer+VALUE_TYPEOFFSET, size); - writeUINT32(pBuffer+VALUE_HEADEROFFSET, len); + writeUINT32(pBuffer.get()+VALUE_TYPEOFFSET, size); + writeUINT32(pBuffer.get()+VALUE_HEADEROFFSET, len); sal_uInt32 offset = 4; // initial 4 bytes for the size of the array; sal_uInt32 sLen = 0; @@ -456,27 +447,24 @@ RegError ORegKey::setStringListValue(const OUString& valueName, sal_Char** pValu for (i=0; i < len; i++) { sLen = strlen(pValueList[i]) + 1; - writeUINT32(pBuffer+VALUE_HEADEROFFSET+offset, sLen); + writeUINT32(pBuffer.get()+VALUE_HEADEROFFSET+offset, sLen); offset += 4; - writeUtf8(pBuffer+VALUE_HEADEROFFSET+offset, pValueList[i]); + writeUtf8(pBuffer.get()+VALUE_HEADEROFFSET+offset, pValueList[i]); offset += sLen; } sal_uInt32 writenBytes; - if ( rValue.writeAt(0, pBuffer, VALUE_HEADERSIZE+size, writenBytes) ) + if ( rValue.writeAt(0, pBuffer.get(), VALUE_HEADERSIZE+size, writenBytes) ) { - std::free(pBuffer); return RegError::SET_VALUE_FAILED; } if (writenBytes != (VALUE_HEADERSIZE+size)) { - std::free(pBuffer); return RegError::SET_VALUE_FAILED; } setModified(); - std::free(pBuffer); return RegError::NO_ERROR; } @@ -486,7 +474,7 @@ RegError ORegKey::setStringListValue(const OUString& valueName, sal_Char** pValu RegError ORegKey::setUnicodeListValue(const OUString& valueName, sal_Unicode** pValueList, sal_uInt32 len) { OStoreStream rValue; - sal_uInt8* pBuffer; + std::unique_ptr<sal_uInt8[]> pBuffer; if (m_pRegistry->isReadOnly()) { @@ -512,11 +500,11 @@ RegError ORegKey::setUnicodeListValue(const OUString& valueName, sal_Unicode** p } sal_uInt8 type = sal_uInt8(RegValueType::UNICODELIST); - pBuffer = static_cast<sal_uInt8*>(std::malloc(VALUE_HEADERSIZE + size)); - memcpy(pBuffer, &type, 1); + pBuffer.reset(new sal_uInt8[VALUE_HEADERSIZE + size]); + memcpy(pBuffer.get(), &type, 1); - writeUINT32(pBuffer+VALUE_TYPEOFFSET, size); - writeUINT32(pBuffer+VALUE_HEADEROFFSET, len); + writeUINT32(pBuffer.get()+VALUE_TYPEOFFSET, size); + writeUINT32(pBuffer.get()+VALUE_HEADEROFFSET, len); sal_uInt32 offset = 4; // initial 4 bytes for the size of the array; sal_uInt32 sLen = 0; @@ -524,27 +512,24 @@ RegError ORegKey::setUnicodeListValue(const OUString& valueName, sal_Unicode** p for (i=0; i < len; i++) { sLen = (rtl_ustr_getLength(pValueList[i]) + 1) * 2; - writeUINT32(pBuffer+VALUE_HEADEROFFSET+offset, sLen); + writeUINT32(pBuffer.get()+VALUE_HEADEROFFSET+offset, sLen); offset += 4; - writeString(pBuffer+VALUE_HEADEROFFSET+offset, pValueList[i]); + writeString(pBuffer.get()+VALUE_HEADEROFFSET+offset, pValueList[i]); offset += sLen; } sal_uInt32 writenBytes; - if ( rValue.writeAt(0, pBuffer, VALUE_HEADERSIZE+size, writenBytes) ) + if ( rValue.writeAt(0, pBuffer.get(), VALUE_HEADERSIZE+size, writenBytes) ) { - std::free(pBuffer); return RegError::SET_VALUE_FAILED; } if (writenBytes != (VALUE_HEADERSIZE+size)) { - std::free(pBuffer); return RegError::SET_VALUE_FAILED; } setModified(); - std::free(pBuffer); return RegError::NO_ERROR; } @@ -554,7 +539,7 @@ RegError ORegKey::setUnicodeListValue(const OUString& valueName, sal_Unicode** p RegError ORegKey::getValue(const OUString& valueName, RegValue value) const { OStoreStream rValue; - sal_uInt8* pBuffer; + std::unique_ptr<sal_uInt8[]> pBuffer; RegValueType valueType; sal_uInt32 valueSize; storeAccessMode accessMode = storeAccessMode::ReadWrite; @@ -574,71 +559,63 @@ RegError ORegKey::getValue(const OUString& valueName, RegValue value) const return RegError::VALUE_NOT_EXISTS; } - pBuffer = static_cast<sal_uInt8*>(std::malloc(VALUE_HEADERSIZE)); + pBuffer.reset(new sal_uInt8[VALUE_HEADERSIZE]); sal_uInt32 readBytes; - if ( rValue.readAt(0, pBuffer, VALUE_HEADERSIZE, readBytes) ) + if ( rValue.readAt(0, pBuffer.get(), VALUE_HEADERSIZE, readBytes) ) { - std::free(pBuffer); return RegError::INVALID_VALUE; } if (readBytes != VALUE_HEADERSIZE) { - std::free(pBuffer); return RegError::INVALID_VALUE; } - sal_uInt8 type = *pBuffer; + sal_uInt8 type = pBuffer[0]; valueType = static_cast<RegValueType>(type); - readUINT32(pBuffer+VALUE_TYPEOFFSET, valueSize); - - std::free(pBuffer); + readUINT32(pBuffer.get()+VALUE_TYPEOFFSET, valueSize); if (valueType > RegValueType::BINARY) { return RegError::INVALID_VALUE; } - pBuffer = static_cast<sal_uInt8*>(std::malloc(valueSize)); + pBuffer.reset(new sal_uInt8[valueSize]); - if ( rValue.readAt(VALUE_HEADEROFFSET, pBuffer, valueSize, readBytes) ) + if ( rValue.readAt(VALUE_HEADEROFFSET, pBuffer.get(), valueSize, readBytes) ) { - std::free(pBuffer); return RegError::INVALID_VALUE; } if (readBytes != valueSize) { - std::free(pBuffer); return RegError::INVALID_VALUE; } switch (valueType) { case RegValueType::NOT_DEFINED: - memcpy(value, pBuffer, valueSize); + memcpy(value, pBuffer.get(), valueSize); break; case RegValueType::LONG: - readINT32(pBuffer, *static_cast<sal_Int32*>(value)); + readINT32(pBuffer.get(), *static_cast<sal_Int32*>(value)); break; case RegValueType::STRING: - readUtf8(pBuffer, static_cast<sal_Char*>(value), valueSize); + readUtf8(pBuffer.get(), static_cast<sal_Char*>(value), valueSize); break; case RegValueType::UNICODE: - readString(pBuffer, static_cast<sal_Unicode*>(value), valueSize); + readString(pBuffer.get(), static_cast<sal_Unicode*>(value), valueSize); break; case RegValueType::BINARY: - memcpy(value, pBuffer, valueSize); + memcpy(value, pBuffer.get(), valueSize); break; // coverity[dead_error_begin] - following conditions exist to avoid compiler warning case RegValueType::LONGLIST: case RegValueType::STRINGLIST: case RegValueType::UNICODELIST: - memcpy(value, pBuffer, valueSize); + memcpy(value, pBuffer.get(), valueSize); break; } - - std::free(pBuffer); return RegError::NO_ERROR; } @@ -648,7 +625,7 @@ RegError ORegKey::getValue(const OUString& valueName, RegValue value) const RegError ORegKey::getLongListValue(const OUString& valueName, sal_Int32** pValueList, sal_uInt32* pLen) const { OStoreStream rValue; - sal_uInt8* pBuffer; + std::unique_ptr<sal_uInt8[]> pBuffer; RegValueType valueType; sal_uInt32 valueSize; storeAccessMode accessMode = storeAccessMode::ReadWrite; @@ -670,38 +647,33 @@ RegError ORegKey::getLongListValue(const OUString& valueName, sal_Int32** pValue return RegError::VALUE_NOT_EXISTS; } - pBuffer = static_cast<sal_uInt8*>(std::malloc(VALUE_HEADERSIZE)); + pBuffer.reset(new sal_uInt8[VALUE_HEADERSIZE]); sal_uInt32 readBytes; - if ( rValue.readAt(0, pBuffer, VALUE_HEADERSIZE, readBytes) ) + if ( rValue.readAt(0, pBuffer.get(), VALUE_HEADERSIZE, readBytes) ) { pValueList = nullptr; *pLen = 0; - std::free(pBuffer); return RegError::INVALID_VALUE; } if (readBytes != VALUE_HEADERSIZE) { pValueList = nullptr; *pLen = 0; - std::free(pBuffer); return RegError::INVALID_VALUE; } - sal_uInt8 type = *pBuffer; + sal_uInt8 type = pBuffer[0]; valueType = static_cast<RegValueType>(type); if (valueType != RegValueType::LONGLIST) { pValueList = nullptr; *pLen = 0; - std::free(pBuffer); return RegError::INVALID_VALUE; } - readUINT32(pBuffer+VALUE_TYPEOFFSET, valueSize); - - std::free(pBuffer); + readUINT32(pBuffer.get()+VALUE_TYPEOFFSET, valueSize); /* check for 'reasonable' value */ /* surely 10 millions entry in a registry list should be enough */ @@ -709,35 +681,31 @@ RegError ORegKey::getLongListValue(const OUString& valueName, sal_Int32** pValue { pValueList = nullptr; *pLen = 0; - std::free(pBuffer); return RegError::INVALID_VALUE; } - pBuffer = static_cast<sal_uInt8*>(std::malloc(valueSize)); + pBuffer.reset(new sal_uInt8[valueSize]); - if ( rValue.readAt(VALUE_HEADEROFFSET, pBuffer, valueSize, readBytes) ) + if ( rValue.readAt(VALUE_HEADEROFFSET, pBuffer.get(), valueSize, readBytes) ) { pValueList = nullptr; *pLen = 0; - std::free(pBuffer); return RegError::INVALID_VALUE; } if (readBytes != valueSize) { pValueList = nullptr; *pLen = 0; - std::free(pBuffer); return RegError::INVALID_VALUE; } sal_uInt32 len = 0; - readUINT32(pBuffer, len); + readUINT32(pBuffer.get(), len); /* make sure the declared size of the arry is consistent with the amount of data we have read */ if(len > (valueSize - 4) / 4) { pValueList = nullptr; *pLen = 0; - std::free(pBuffer); return RegError::INVALID_VALUE; } *pLen = len; @@ -747,12 +715,11 @@ RegError ORegKey::getLongListValue(const OUString& valueName, sal_Int32** pValue for (sal_uInt32 i = 0; i < len; i++) { - readINT32(pBuffer+offset, pVList[i]); + readINT32(pBuffer.get()+offset, pVList[i]); offset += 4; } *pValueList = pVList; - std::free(pBuffer); return RegError::NO_ERROR; } @@ -762,7 +729,7 @@ RegError ORegKey::getLongListValue(const OUString& valueName, sal_Int32** pValue RegError ORegKey::getStringListValue(const OUString& valueName, sal_Char*** pValueList, sal_uInt32* pLen) const { OStoreStream rValue; - sal_uInt8* pBuffer; + std::unique_ptr<sal_uInt8[]> pBuffer; RegValueType valueType; sal_uInt32 valueSize; storeAccessMode accessMode = storeAccessMode::ReadWrite; @@ -784,58 +751,51 @@ RegError ORegKey::getStringListValue(const OUString& valueName, sal_Char*** pVal return RegError::VALUE_NOT_EXISTS; } - pBuffer = static_cast<sal_uInt8*>(std::malloc(VALUE_HEADERSIZE)); + pBuffer.reset(new sal_uInt8[VALUE_HEADERSIZE]); sal_uInt32 readBytes; - if ( rValue.readAt(0, pBuffer, VALUE_HEADERSIZE, readBytes) ) + if ( rValue.readAt(0, pBuffer.get(), VALUE_HEADERSIZE, readBytes) ) { pValueList = nullptr; *pLen = 0; - std::free(pBuffer); return RegError::INVALID_VALUE; } if (readBytes != VALUE_HEADERSIZE) { pValueList = nullptr; *pLen = 0; - std::free(pBuffer); return RegError::INVALID_VALUE; } - sal_uInt8 type = *pBuffer; + sal_uInt8 type = pBuffer[0]; valueType = static_cast<RegValueType>(type); if (valueType != RegValueType::STRINGLIST) { pValueList = nullptr; *pLen = 0; - std::free(pBuffer); return RegError::INVALID_VALUE; } - readUINT32(pBuffer+VALUE_TYPEOFFSET, valueSize); + readUINT32(pBuffer.get()+VALUE_TYPEOFFSET, valueSize); - std::free(pBuffer); + pBuffer.reset(new sal_uInt8[valueSize]); - pBuffer = static_cast<sal_uInt8*>(std::malloc(valueSize)); - - if ( rValue.readAt(VALUE_HEADEROFFSET, pBuffer, valueSize, readBytes) ) + if ( rValue.readAt(VALUE_HEADEROFFSET, pBuffer.get(), valueSize, readBytes) ) { pValueList = nullptr; *pLen = 0; - std::free(pBuffer); return RegError::INVALID_VALUE; } if (readBytes != valueSize) { pValueList = nullptr; *pLen = 0; - std::free(pBuffer); return RegError::INVALID_VALUE; } sal_uInt32 len = 0; - readUINT32(pBuffer, len); + readUINT32(pBuffer.get(), len); *pLen = len; sal_Char** pVList = static_cast<sal_Char**>(rtl_allocateZeroMemory(len * sizeof(sal_Char*))); @@ -846,19 +806,18 @@ RegError ORegKey::getStringListValue(const OUString& valueName, sal_Char*** pVal sal_Char *pValue; for (sal_uInt32 i=0; i < len; i++) { - readUINT32(pBuffer+offset, sLen); + readUINT32(pBuffer.get()+offset, sLen); offset += 4; pValue = static_cast<sal_Char*>(std::malloc(sLen)); - readUtf8(pBuffer+offset, pValue, sLen); + readUtf8(pBuffer.get()+offset, pValue, sLen); pVList[i] = pValue; offset += sLen; } *pValueList = pVList; - std::free(pBuffer); return RegError::NO_ERROR; } @@ -868,7 +827,7 @@ RegError ORegKey::getStringListValue(const OUString& valueName, sal_Char*** pVal RegError ORegKey::getUnicodeListValue(const OUString& valueName, sal_Unicode*** pValueList, sal_uInt32* pLen) const { OStoreStream rValue; - sal_uInt8* pBuffer; + std::unique_ptr<sal_uInt8[]> pBuffer; RegValueType valueType; sal_uInt32 valueSize; storeAccessMode accessMode = storeAccessMode::ReadWrite; @@ -890,58 +849,51 @@ RegError ORegKey::getUnicodeListValue(const OUString& valueName, sal_Unicode*** return RegError::VALUE_NOT_EXISTS; } - pBuffer = static_cast<sal_uInt8*>(std::malloc(VALUE_HEADERSIZE)); + pBuffer.reset(new sal_uInt8[VALUE_HEADERSIZE]); sal_uInt32 readBytes; - if ( rValue.readAt(0, pBuffer, VALUE_HEADERSIZE, readBytes) ) + if ( rValue.readAt(0, pBuffer.get(), VALUE_HEADERSIZE, readBytes) ) { pValueList = nullptr; *pLen = 0; - std::free(pBuffer); return RegError::INVALID_VALUE; } if (readBytes != VALUE_HEADERSIZE) { pValueList = nullptr; *pLen = 0; - std::free(pBuffer); return RegError::INVALID_VALUE; } - sal_uInt8 type = *pBuffer; + sal_uInt8 type = pBuffer[0]; valueType = static_cast<RegValueType>(type); if (valueType != RegValueType::UNICODELIST) { pValueList = nullptr; *pLen = 0; - std::free(pBuffer); return RegError::INVALID_VALUE; } - readUINT32(pBuffer+VALUE_TYPEOFFSET, valueSize); - - std::free(pBuffer); + readUINT32(pBuffer.get()+VALUE_TYPEOFFSET, valueSize); - pBuffer = static_cast<sal_uInt8*>(std::malloc(valueSize)); + pBuffer.reset(new sal_uInt8[valueSize]); - if ( rValue.readAt(VALUE_HEADEROFFSET, pBuffer, valueSize, readBytes) ) + if ( rValue.readAt(VALUE_HEADEROFFSET, pBuffer.get(), valueSize, readBytes) ) { pValueList = nullptr; *pLen = 0; - std::free(pBuffer); return RegError::INVALID_VALUE; } if (readBytes != valueSize) { pValueList = nullptr; *pLen = 0; - std::free(pBuffer); return RegError::INVALID_VALUE; } sal_uInt32 len = 0; - readUINT32(pBuffer, len); + readUINT32(pBuffer.get(), len); *pLen = len; sal_Unicode** pVList = static_cast<sal_Unicode**>(rtl_allocateZeroMemory(len * sizeof(sal_Unicode*))); @@ -952,19 +904,18 @@ RegError ORegKey::getUnicodeListValue(const OUString& valueName, sal_Unicode*** sal_Unicode *pValue; for (sal_uInt32 i=0; i < len; i++) { - readUINT32(pBuffer+offset, sLen); + readUINT32(pBuffer.get()+offset, sLen); offset += 4; pValue = static_cast<sal_Unicode*>(std::malloc((sLen / 2) * sizeof(sal_Unicode))); - readString(pBuffer+offset, pValue, sLen); + readString(pBuffer.get()+offset, pValue, sLen); pVList[i] = pValue; offset += sLen; } *pValueList = pVList; - std::free(pBuffer); return RegError::NO_ERROR; } |