mirror of
https://github.com/CloverHackyColor/CloverBootloader.git
synced 2024-11-27 12:15:19 +01:00
release compilation should never panic on bad user input, use DEBUG for testing
Signed-off-by: SergeySlice <sergey.slice@gmail.com>
This commit is contained in:
parent
f17e66cf8b
commit
76bf6321a6
@ -641,7 +641,7 @@ void PreCleanupRSDT()
|
|||||||
// trim the RSDT tail before the XSDT starts
|
// trim the RSDT tail before the XSDT starts
|
||||||
if ((UINTN)Rsdt < (UINTN)Xsdt && (UINTN)Rsdt + Rsdt->Header.Length > (UINTN)Xsdt) {
|
if ((UINTN)Rsdt < (UINTN)Xsdt && (UINTN)Rsdt + Rsdt->Header.Length > (UINTN)Xsdt) {
|
||||||
UINTN v = ((UINTN)Xsdt - (UINTN)Rsdt) & ~3;
|
UINTN v = ((UINTN)Xsdt - (UINTN)Rsdt) & ~3;
|
||||||
if ( v > MAX_UINT32 ) panic("((UINTN)Xsdt - (UINTN)Rsdt) & ~3 > MAX_UINT32");
|
// if ( v > MAX_UINT32 ) panic("((UINTN)Xsdt - (UINTN)Rsdt) & ~3 > MAX_UINT32");
|
||||||
Rsdt->Header.Length = (UINT32)v;
|
Rsdt->Header.Length = (UINT32)v;
|
||||||
DBG("Cropped Rsdt->Header.Length=%d\n", (UINT32)Rsdt->Header.Length);
|
DBG("Cropped Rsdt->Header.Length=%d\n", (UINT32)Rsdt->Header.Length);
|
||||||
}
|
}
|
||||||
|
@ -145,7 +145,11 @@ LogDataHubXString8(IN EFI_GUID *TypeGuid,
|
|||||||
IN CONST CHAR16 *Name,
|
IN CONST CHAR16 *Name,
|
||||||
const XString8& s)
|
const XString8& s)
|
||||||
{
|
{
|
||||||
|
#ifdef DEBUG
|
||||||
if ( s.sizeInBytesIncludingTerminator() > MAX_UINT32 ) panic("LogDataHub s.length > MAX_UINT32");
|
if ( s.sizeInBytesIncludingTerminator() > MAX_UINT32 ) panic("LogDataHub s.length > MAX_UINT32");
|
||||||
|
#else
|
||||||
|
if ( s.sizeInBytesIncludingTerminator() > MAX_UINT32 ) return EFI_OUT_OF_RESOURCES;
|
||||||
|
#endif
|
||||||
return LogDataHub(TypeGuid, Name, (void*)s.c_str(), (UINT32)s.sizeInBytesIncludingTerminator());
|
return LogDataHub(TypeGuid, Name, (void*)s.c_str(), (UINT32)s.sizeInBytesIncludingTerminator());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -154,7 +158,11 @@ LogDataHubXStringW(IN EFI_GUID *TypeGuid,
|
|||||||
IN CONST CHAR16 *Name,
|
IN CONST CHAR16 *Name,
|
||||||
const XStringW& s)
|
const XStringW& s)
|
||||||
{
|
{
|
||||||
|
#ifdef DEBUG
|
||||||
if ( s.sizeInBytesIncludingTerminator() > MAX_UINT32 ) panic("LogDataHub s.length > MAX_UINT32");
|
if ( s.sizeInBytesIncludingTerminator() > MAX_UINT32 ) panic("LogDataHub s.length > MAX_UINT32");
|
||||||
|
#else
|
||||||
|
if ( s.sizeInBytesIncludingTerminator() > MAX_UINT32 ) return EFI_OUT_OF_RESOURCES;
|
||||||
|
#endif
|
||||||
return LogDataHub(TypeGuid, Name, (void*)s.wc_str(), (UINT32)s.sizeInBytesIncludingTerminator());
|
return LogDataHub(TypeGuid, Name, (void*)s.wc_str(), (UINT32)s.sizeInBytesIncludingTerminator());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1349,8 +1349,14 @@ INT32 FindBin (UINT8 *dsdt, UINT32 len, const UINT8* bin, UINT32 N)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
INT32 FindBin (UINT8 *dsdt, size_t len, const XBuffer<UINT8>& bin) {
|
INT32 FindBin (UINT8 *dsdt, size_t len, const XBuffer<UINT8>& bin) {
|
||||||
|
#ifdef DEBUG
|
||||||
if ( len > MAX_INT32 ) panic("FindBin : len > MAX_INT32"); // check against INT32, even though parameter of FindBin is UINT32. Because return value is INT32, parameter should not be > MAX_INT32
|
if ( len > MAX_INT32 ) panic("FindBin : len > MAX_INT32"); // check against INT32, even though parameter of FindBin is UINT32. Because return value is INT32, parameter should not be > MAX_INT32
|
||||||
if ( bin.size() > MAX_INT32 ) panic("FindBin : bin.size() > MAX_INT32");
|
if ( bin.size() > MAX_INT32 ) panic("FindBin : bin.size() > MAX_INT32");
|
||||||
|
#else
|
||||||
|
if ( len > MAX_INT32 ) return 0;
|
||||||
|
if ( bin.size() > MAX_INT32 ) return 0;
|
||||||
|
|
||||||
|
#endif
|
||||||
return FindBin(dsdt, (UINT32)len, bin.data(), (UINT32)bin.size());
|
return FindBin(dsdt, (UINT32)len, bin.data(), (UINT32)bin.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -45,20 +45,31 @@ EFI_STATUS Self::_initialize()
|
|||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
|
|
||||||
Status = gBS->HandleProtocol(m_SelfImageHandle, &gEfiLoadedImageProtocolGuid, (void **)&m_SelfLoadedImage);
|
Status = gBS->HandleProtocol(m_SelfImageHandle, &gEfiLoadedImageProtocolGuid, (void **)&m_SelfLoadedImage);
|
||||||
|
#ifdef DEBUG
|
||||||
if ( EFI_ERROR(Status) ) panic("Cannot get SelfLoadedImage");
|
if ( EFI_ERROR(Status) ) panic("Cannot get SelfLoadedImage");
|
||||||
if ( m_SelfLoadedImage->DeviceHandle == NULL ) panic("m_SelfLoadedImage->DeviceHandle == NULL");
|
if ( m_SelfLoadedImage->DeviceHandle == NULL ) panic("m_SelfLoadedImage->DeviceHandle == NULL");
|
||||||
|
|
||||||
m_SelfDevicePath = DuplicateDevicePath(DevicePathFromHandle(m_SelfLoadedImage->DeviceHandle));
|
m_SelfDevicePath = DuplicateDevicePath(DevicePathFromHandle(m_SelfLoadedImage->DeviceHandle));
|
||||||
if ( m_SelfDevicePath == NULL ) panic("m_SelfDevicePath == NULL");
|
if ( m_SelfDevicePath == NULL ) panic("m_SelfDevicePath == NULL");
|
||||||
|
#else
|
||||||
|
if ( EFI_ERROR(Status) ) return Status;
|
||||||
|
if ( m_SelfLoadedImage->DeviceHandle == NULL ) return EFI_NOT_FOUND;
|
||||||
|
m_SelfDevicePath = DuplicateDevicePath(DevicePathFromHandle(m_SelfLoadedImage->DeviceHandle));
|
||||||
|
if ( m_SelfDevicePath == NULL ) return EFI_NOT_FOUND;
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef JIEF_DEBUG
|
#ifdef JIEF_DEBUG
|
||||||
DBG("Self DevicePath()=%ls @%llX\n", FileDevicePathToXStringW(m_SelfDevicePath).wc_str(), (uintptr_t)m_SelfLoadedImage->DeviceHandle);
|
DBG("Self DevicePath()=%ls @%llX\n", FileDevicePathToXStringW(m_SelfDevicePath).wc_str(), (uintptr_t)m_SelfLoadedImage->DeviceHandle);
|
||||||
#endif
|
#endif
|
||||||
Status = gBS->HandleProtocol(m_SelfLoadedImage->DeviceHandle, &gEfiSimpleFileSystemProtocolGuid, (void**)&m_SelfSimpleVolume);
|
Status = gBS->HandleProtocol(m_SelfLoadedImage->DeviceHandle, &gEfiSimpleFileSystemProtocolGuid, (void**)&m_SelfSimpleVolume);
|
||||||
|
#ifdef DEBUG
|
||||||
if ( EFI_ERROR(Status) ) panic("Cannot get m_SelfSimpleVolume");
|
if ( EFI_ERROR(Status) ) panic("Cannot get m_SelfSimpleVolume");
|
||||||
Status = m_SelfSimpleVolume->OpenVolume(m_SelfSimpleVolume, &m_SelfVolumeRootDir);
|
Status = m_SelfSimpleVolume->OpenVolume(m_SelfSimpleVolume, &m_SelfVolumeRootDir);
|
||||||
if ( EFI_ERROR(Status) ) panic("Cannot get m_SelfRootDir");
|
if ( EFI_ERROR(Status) ) panic("Cannot get m_SelfRootDir");
|
||||||
|
#else
|
||||||
|
if ( EFI_ERROR(Status) ) return Status;
|
||||||
|
Status = m_SelfSimpleVolume->OpenVolume(m_SelfSimpleVolume, &m_SelfVolumeRootDir);
|
||||||
|
if ( EFI_ERROR(Status) ) return Status;
|
||||||
|
#endif
|
||||||
// find the current directory
|
// find the current directory
|
||||||
m_CloverDirFullPath = FileDevicePathToXStringW(m_SelfLoadedImage->FilePath);
|
m_CloverDirFullPath = FileDevicePathToXStringW(m_SelfLoadedImage->FilePath);
|
||||||
|
|
||||||
@ -77,13 +88,21 @@ EFI_STATUS Self::_initialize()
|
|||||||
if ( m_CloverDirFullPath.equalIC("\\EFI\\Boot\\BootX64.efi") ) {
|
if ( m_CloverDirFullPath.equalIC("\\EFI\\Boot\\BootX64.efi") ) {
|
||||||
m_CloverDirFullPath.takeValueFrom("\\EFI\\CLOVER\\CloverX64.efi");
|
m_CloverDirFullPath.takeValueFrom("\\EFI\\CLOVER\\CloverX64.efi");
|
||||||
}
|
}
|
||||||
|
#ifdef DEBUG
|
||||||
if ( m_CloverDirFullPath.isEmpty() ) panic("m_CloverDirFullPath.isEmpty()");
|
if ( m_CloverDirFullPath.isEmpty() ) panic("m_CloverDirFullPath.isEmpty()");
|
||||||
|
#else
|
||||||
|
if ( m_CloverDirFullPath.isEmpty() ) return EFI_NOT_FOUND;
|
||||||
|
#endif
|
||||||
m_SelfDevicePath = FileDevicePath(m_SelfLoadedImage->DeviceHandle, m_CloverDirFullPath);
|
m_SelfDevicePath = FileDevicePath(m_SelfLoadedImage->DeviceHandle, m_CloverDirFullPath);
|
||||||
m_SelfDevicePathAsXStringW = FileDevicePathToXStringW(m_SelfDevicePath);
|
m_SelfDevicePathAsXStringW = FileDevicePathToXStringW(m_SelfDevicePath);
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
if ( m_CloverDirFullPath.lastChar() == U'\\' ) panic("m_CloverDirFullPath.lastChar() == U'\\'");
|
if ( m_CloverDirFullPath.lastChar() == U'\\' ) panic("m_CloverDirFullPath.lastChar() == U'\\'");
|
||||||
//if ( m_CloverDirFullPath.endsWith('\\') ) panic("m_CloverDirFullPath.endsWith('\\')");
|
//if ( m_CloverDirFullPath.endsWith('\\') ) panic("m_CloverDirFullPath.endsWith('\\')");
|
||||||
|
#else
|
||||||
|
if ( m_CloverDirFullPath.lastChar() == U'\\' ) return EFI_NOT_FOUND;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
size_t i = m_CloverDirFullPath.rindexOf(U'\\', SIZE_T_MAX-1);
|
size_t i = m_CloverDirFullPath.rindexOf(U'\\', SIZE_T_MAX-1);
|
||||||
if ( i != SIZE_T_MAX && i > 0 ) m_CloverDirFullPath.deleteCharsAtPos(i, SIZE_T_MAX);
|
if ( i != SIZE_T_MAX && i > 0 ) m_CloverDirFullPath.deleteCharsAtPos(i, SIZE_T_MAX);
|
||||||
|
@ -58,9 +58,11 @@ public:
|
|||||||
bool isInitialized() const { return m_CloverDir != NULL; }
|
bool isInitialized() const { return m_CloverDir != NULL; }
|
||||||
void checkInitialized() const
|
void checkInitialized() const
|
||||||
{
|
{
|
||||||
|
#ifdef DEBUG
|
||||||
if ( !isInitialized() ) {
|
if ( !isInitialized() ) {
|
||||||
panic("Self in not initialized");
|
panic("Self in not initialized");
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
EFI_HANDLE getSelfImageHandle() { checkInitialized(); return m_SelfImageHandle; }
|
EFI_HANDLE getSelfImageHandle() { checkInitialized(); return m_SelfImageHandle; }
|
||||||
|
@ -134,9 +134,11 @@ EFI_STATUS SelfOem::_initialize()
|
|||||||
assert( m_OemFulPath.notEmpty() );
|
assert( m_OemFulPath.notEmpty() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
|
|
||||||
if ( m_KextsDir != NULL ) panic("%s : Kexts dir != NULL.", __FUNCTION__);
|
if ( m_KextsDir != NULL ) panic("%s : Kexts dir != NULL.", __FUNCTION__);
|
||||||
|
#else
|
||||||
|
if ( m_KextsDir != NULL ) return EFI_SUCCESS;
|
||||||
|
#endif
|
||||||
if ( oemDirExists() ) {
|
if ( oemDirExists() ) {
|
||||||
Status = m_OemDir->Open(m_OemDir, &m_KextsDir, KEXTS_DIRNAME.wc_str(), EFI_FILE_MODE_READ, 0);
|
Status = m_OemDir->Open(m_OemDir, &m_KextsDir, KEXTS_DIRNAME.wc_str(), EFI_FILE_MODE_READ, 0);
|
||||||
if ( !EFI_ERROR(Status) ) {
|
if ( !EFI_ERROR(Status) ) {
|
||||||
@ -200,8 +202,9 @@ EFI_STATUS SelfOem::initialize(const XString8& confName, bool isFirmwareClover,
|
|||||||
void SelfOem::unInitialize()
|
void SelfOem::unInitialize()
|
||||||
{
|
{
|
||||||
//DBG("%s : enter.\n", __FUNCTION__);
|
//DBG("%s : enter.\n", __FUNCTION__);
|
||||||
|
#ifdef DEBUG
|
||||||
if ( m_ConfName.isEmpty() ) panic("%s : Already uninitiialized.", __FUNCTION__);
|
if ( m_ConfName.isEmpty() ) panic("%s : Already uninitiialized.", __FUNCTION__);
|
||||||
|
#endif
|
||||||
closeHandle();
|
closeHandle();
|
||||||
m_ConfName.setEmpty();
|
m_ConfName.setEmpty();
|
||||||
//DBG("%s : leave.\n", __FUNCTION__);
|
//DBG("%s : leave.\n", __FUNCTION__);
|
||||||
@ -210,15 +213,20 @@ void SelfOem::unInitialize()
|
|||||||
EFI_STATUS SelfOem::reInitialize()
|
EFI_STATUS SelfOem::reInitialize()
|
||||||
{
|
{
|
||||||
//DBG("%s : enter.\n", __FUNCTION__);
|
//DBG("%s : enter.\n", __FUNCTION__);
|
||||||
|
#ifdef DEBUG
|
||||||
if ( m_ConfName.isEmpty() ) panic("%s : initialize() must called once first", __FUNCTION__);
|
if ( m_ConfName.isEmpty() ) panic("%s : initialize() must called once first", __FUNCTION__);
|
||||||
|
#endif
|
||||||
closeHandle();
|
closeHandle();
|
||||||
|
|
||||||
// No need to call _setOemPathRelToSelfDir again, but need to open m_OemDir, if it exists
|
// No need to call _setOemPathRelToSelfDir again, but need to open m_OemDir, if it exists
|
||||||
if ( oemDirExists() ) {
|
if ( oemDirExists() ) {
|
||||||
EFI_STATUS Status = self.getCloverDir().Open(&self.getCloverDir(), &m_OemDir, m_OemPathRelToSelfDir.wc_str(), EFI_FILE_MODE_READ, 0);
|
EFI_STATUS Status = self.getCloverDir().Open(&self.getCloverDir(), &m_OemDir, m_OemPathRelToSelfDir.wc_str(), EFI_FILE_MODE_READ, 0);
|
||||||
if ( EFI_ERROR(Status) ) {
|
if ( EFI_ERROR(Status) ) {
|
||||||
|
#ifdef DEBUG
|
||||||
panic("Impossible to reopen dir '%ls\\%ls', although it was opened the first time : %s", self.getCloverDirFullPath().wc_str(), m_OemPathRelToSelfDir.wc_str(), efiStrError(Status));
|
panic("Impossible to reopen dir '%ls\\%ls', although it was opened the first time : %s", self.getCloverDirFullPath().wc_str(), m_OemPathRelToSelfDir.wc_str(), efiStrError(Status));
|
||||||
|
#else
|
||||||
|
return Status;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
EFI_STATUS Status = _initialize();
|
EFI_STATUS Status = _initialize();
|
||||||
|
@ -7801,11 +7801,26 @@ const XString8& SETTINGS_DATA::getUUID(EFI_GUID *uuid)
|
|||||||
{
|
{
|
||||||
if ( CustomUuid.notEmpty() ) {
|
if ( CustomUuid.notEmpty() ) {
|
||||||
EFI_STATUS Status = StrToGuidLE(CustomUuid, uuid);
|
EFI_STATUS Status = StrToGuidLE(CustomUuid, uuid);
|
||||||
|
#ifdef DEBUG
|
||||||
if ( EFI_ERROR(Status) ) panic("CustomUuid(%s) is not valid", CustomUuid.c_str()); // we panic, because it's a bug. Validity is checked when imported from settings
|
if ( EFI_ERROR(Status) ) panic("CustomUuid(%s) is not valid", CustomUuid.c_str()); // we panic, because it's a bug. Validity is checked when imported from settings
|
||||||
|
#else
|
||||||
|
if ( EFI_ERROR(Status) ) {
|
||||||
|
DBG("CustomUuid(%s) is not valid\n", CustomUuid.c_str());
|
||||||
|
return nullUUID;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
return CustomUuid;
|
return CustomUuid;
|
||||||
}
|
}
|
||||||
EFI_STATUS Status = StrToGuidLE(SmUUID, uuid);
|
EFI_STATUS Status = StrToGuidLE(SmUUID, uuid);
|
||||||
if ( EFI_ERROR(Status) ) panic("CustomUuid(%s) is not valid", CustomUuid.c_str()); // same as before
|
#ifdef DEBUG
|
||||||
|
if ( EFI_ERROR(Status) ) panic("SmUUID(%s) is not valid", SmUUID.c_str()); // same as before
|
||||||
|
#else
|
||||||
|
if ( EFI_ERROR(Status) ) {
|
||||||
|
DBG("SmUUID(%s) is not valid\n", SmUUID.c_str());
|
||||||
|
return nullUUID;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
return SmUUID;
|
return SmUUID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -109,13 +109,13 @@ UINT8 *Base64DecodeClover(IN CONST CHAR8 *EncodedData, UINTN EncodedSize, OUT UI
|
|||||||
base64_init_decodestate(&state_in);
|
base64_init_decodestate(&state_in);
|
||||||
DecodedSizeInternal = base64_decode_block(EncodedData, (const int)EncodedSize, (char*) DecodedData, &state_in);
|
DecodedSizeInternal = base64_decode_block(EncodedData, (const int)EncodedSize, (char*) DecodedData, &state_in);
|
||||||
|
|
||||||
if ( DecodedSizeInternal == 0 ) {
|
if ( DecodedSizeInternal <= 0 ) {
|
||||||
FreePool(DecodedData);
|
FreePool(DecodedData);
|
||||||
DecodedData = NULL;
|
DecodedData = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (DecodedSize != NULL) {
|
if (DecodedSize != NULL) {
|
||||||
if ( DecodedSizeInternal < 0 ) panic("Base64DecodeClover : DecodedSizeInternal < 0");
|
// if ( DecodedSizeInternal < 0 ) panic("Base64DecodeClover : DecodedSizeInternal < 0");
|
||||||
*DecodedSize = (UINTN)DecodedSizeInternal;
|
*DecodedSize = (UINTN)DecodedSizeInternal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -116,7 +116,11 @@ void TagArray::FreeTag()
|
|||||||
const TagStruct* TagArray::elementAt(size_t idx) const
|
const TagStruct* TagArray::elementAt(size_t idx) const
|
||||||
{
|
{
|
||||||
if ( idx >= _arrayContent.size() ) {
|
if ( idx >= _arrayContent.size() ) {
|
||||||
|
#ifdef DEBUG
|
||||||
panic("TagArray::elementAt(%zu) -> trying to access element at %zu, but array has only %zu element(s)\n", idx, idx, _arrayContent.size());
|
panic("TagArray::elementAt(%zu) -> trying to access element at %zu, but array has only %zu element(s)\n", idx, idx, _arrayContent.size());
|
||||||
|
#else
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
return &_arrayContent[idx];
|
return &_arrayContent[idx];
|
||||||
}
|
}
|
||||||
@ -126,7 +130,11 @@ const TagDict* TagArray::dictElementAt(size_t idx, const XString8& currentTag) c
|
|||||||
{
|
{
|
||||||
const TagStruct* tag = elementAt(idx);
|
const TagStruct* tag = elementAt(idx);
|
||||||
if ( !tag->isDict() ) {
|
if ( !tag->isDict() ) {
|
||||||
|
#ifdef DEBUG
|
||||||
panic("MALFORMED PLIST in '%s' : TagArray::dictElementAt(%zu) -> trying to get a dict element at %zu, but element is %s\n", currentTag.c_str(), idx, idx, tag->getTypeAsXString8().c_str());
|
panic("MALFORMED PLIST in '%s' : TagArray::dictElementAt(%zu) -> trying to get a dict element at %zu, but element is %s\n", currentTag.c_str(), idx, idx, tag->getTypeAsXString8().c_str());
|
||||||
|
#else
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
return _arrayContent[idx].getDict();
|
return _arrayContent[idx].getDict();
|
||||||
}
|
}
|
||||||
@ -135,7 +143,11 @@ const TagArray* TagArray::arrayElementAt(size_t idx, const XString8& currentTag)
|
|||||||
{
|
{
|
||||||
const TagStruct* tag = elementAt(idx);
|
const TagStruct* tag = elementAt(idx);
|
||||||
if ( !tag->isArray() ) {
|
if ( !tag->isArray() ) {
|
||||||
|
#ifdef DEBUG
|
||||||
panic("MALFORMED PLIST in '%s' : TagArray::dictElementAt(%zu) -> trying to get a array element at %zu, but element is %s\n", currentTag.c_str(), idx, idx, tag->getTypeAsXString8().c_str());
|
panic("MALFORMED PLIST in '%s' : TagArray::dictElementAt(%zu) -> trying to get a array element at %zu, but element is %s\n", currentTag.c_str(), idx, idx, tag->getTypeAsXString8().c_str());
|
||||||
|
#else
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
return _arrayContent[idx].getArray();
|
return _arrayContent[idx].getArray();
|
||||||
}
|
}
|
||||||
@ -144,7 +156,11 @@ const TagDict* TagArray::dictElementAt(size_t idx) const
|
|||||||
{
|
{
|
||||||
const TagStruct* tag = elementAt(idx);
|
const TagStruct* tag = elementAt(idx);
|
||||||
if ( !tag->isDict() ) {
|
if ( !tag->isDict() ) {
|
||||||
|
#ifdef DEBUG
|
||||||
panic("MALFORMED PLIST : TagArray::dictElementAt(%zu) -> trying to get a dict element at %zu, but element is %s\n", idx, idx, tag->getTypeAsXString8().c_str());
|
panic("MALFORMED PLIST : TagArray::dictElementAt(%zu) -> trying to get a dict element at %zu, but element is %s\n", idx, idx, tag->getTypeAsXString8().c_str());
|
||||||
|
#else
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
return _arrayContent[idx].getDict();
|
return _arrayContent[idx].getDict();
|
||||||
}
|
}
|
||||||
@ -153,7 +169,11 @@ const TagArray* TagArray::arrayElementAt(size_t idx) const
|
|||||||
{
|
{
|
||||||
const TagStruct* tag = elementAt(idx);
|
const TagStruct* tag = elementAt(idx);
|
||||||
if ( !tag->isArray() ) {
|
if ( !tag->isArray() ) {
|
||||||
|
#ifdef DEBUG
|
||||||
panic("MALFORMED PLIST : TagArray::dictElementAt(%zu) -> trying to get a array element at %zu, but element is %s\n", idx, idx, tag->getTypeAsXString8().c_str());
|
panic("MALFORMED PLIST : TagArray::dictElementAt(%zu) -> trying to get a array element at %zu, but element is %s\n", idx, idx, tag->getTypeAsXString8().c_str());
|
||||||
|
#else
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
return _arrayContent[idx].getArray();
|
return _arrayContent[idx].getArray();
|
||||||
}
|
}
|
||||||
|
@ -55,8 +55,13 @@ public:
|
|||||||
}
|
}
|
||||||
void setDataValue(UINT8* data, UINTN dataLen)
|
void setDataValue(UINT8* data, UINTN dataLen)
|
||||||
{
|
{
|
||||||
|
#ifdef DEBUG
|
||||||
if ( data == NULL && dataLen != 0 ) panic("TagData::setDataValue() : data == NULL && dataLen != 0 ");
|
if ( data == NULL && dataLen != 0 ) panic("TagData::setDataValue() : data == NULL && dataLen != 0 ");
|
||||||
if ( data != NULL && dataLen == 0 ) panic("TagData::setDataValue() : data != NULL && dataLen == 0 ");
|
if ( data != NULL && dataLen == 0 ) panic("TagData::setDataValue() : data != NULL && dataLen == 0 ");
|
||||||
|
#else
|
||||||
|
if ( data == NULL && dataLen != 0 ) return;
|
||||||
|
if ( data != NULL && dataLen == 0 ) return;
|
||||||
|
#endif
|
||||||
dataBuffer.stealValueFrom(data, dataLen);
|
dataBuffer.stealValueFrom(data, dataLen);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -44,7 +44,8 @@ public:
|
|||||||
}
|
}
|
||||||
void setDateValue(const XString8& xstring)
|
void setDateValue(const XString8& xstring)
|
||||||
{
|
{
|
||||||
if ( xstring.isEmpty() ) panic("TagDate::setDateValue() : xstring.isEmpty() ");
|
// if ( xstring.isEmpty() ) panic("TagDate::setDateValue() : xstring.isEmpty() ");
|
||||||
|
if ( xstring.isEmpty() ) return; //do nothing rather then assign empty date
|
||||||
string = xstring;
|
string = xstring;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -114,7 +114,11 @@ bool TagDict::debugIsEqual(const TagStruct& other, const XString8& label) const
|
|||||||
|
|
||||||
INTN TagDict::dictKeyCount() const
|
INTN TagDict::dictKeyCount() const
|
||||||
{
|
{
|
||||||
|
#ifdef DEBUG
|
||||||
if ( !isDict() ) panic("TagStruct::dictKeyCount() : !isDict() ");
|
if ( !isDict() ) panic("TagStruct::dictKeyCount() : !isDict() ");
|
||||||
|
#else
|
||||||
|
if ( !isDict() ) return 0;
|
||||||
|
#endif
|
||||||
INTN count = 0;
|
INTN count = 0;
|
||||||
for (size_t tagIdx = 0 ; tagIdx + 1 < _dictContent.size() ; tagIdx++ ) { // tagIdx + 1 because a key as a last element cannot have value and is ignored. Can't do size()-1, because it's unsigned.
|
for (size_t tagIdx = 0 ; tagIdx + 1 < _dictContent.size() ; tagIdx++ ) { // tagIdx + 1 because a key as a last element cannot have value and is ignored. Can't do size()-1, because it's unsigned.
|
||||||
if ( _dictContent[tagIdx].isKey() && !_dictContent[tagIdx+1].isKey() ) { // if this key is followed by another key, it'll be ignored
|
if ( _dictContent[tagIdx].isKey() && !_dictContent[tagIdx+1].isKey() ) { // if this key is followed by another key, it'll be ignored
|
||||||
@ -168,6 +172,7 @@ const TagDict* TagDict::dictPropertyForKey(const CHAR8* key) const
|
|||||||
if ( tag == NULL ) return NULL;
|
if ( tag == NULL ) return NULL;
|
||||||
if ( !tag->isDict() ) {
|
if ( !tag->isDict() ) {
|
||||||
// panic("MALFORMED PLIST : Property value for key %s must be a dict\n", key);
|
// panic("MALFORMED PLIST : Property value for key %s must be a dict\n", key);
|
||||||
|
// no, we will test if this is dict or something else
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
return tag->getDict();
|
return tag->getDict();
|
||||||
@ -179,6 +184,7 @@ const TagArray* TagDict::arrayPropertyForKey(const CHAR8* key) const
|
|||||||
if ( tag == NULL ) return NULL;
|
if ( tag == NULL ) return NULL;
|
||||||
if ( !tag->isArray() ) {
|
if ( !tag->isArray() ) {
|
||||||
// panic("MALFORMED PLIST : Property value for key %s must be an array\n", key);
|
// panic("MALFORMED PLIST : Property value for key %s must be an array\n", key);
|
||||||
|
// no, we will test if this is array or something else
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
return tag->getArray();
|
return tag->getArray();
|
||||||
|
@ -40,12 +40,16 @@ public:
|
|||||||
*/
|
*/
|
||||||
const XObjArray<TagStruct>& dictContent() const
|
const XObjArray<TagStruct>& dictContent() const
|
||||||
{
|
{
|
||||||
|
#ifdef DEBUG
|
||||||
if ( !isDict() ) panic("TagDict::dictContent() : !isDict() ");
|
if ( !isDict() ) panic("TagDict::dictContent() : !isDict() ");
|
||||||
|
#endif
|
||||||
return _dictContent;
|
return _dictContent;
|
||||||
}
|
}
|
||||||
XObjArray<TagStruct>& dictContent()
|
XObjArray<TagStruct>& dictContent()
|
||||||
{
|
{
|
||||||
|
#ifdef DEBUG
|
||||||
if ( !isDict() ) panic("TagDict::dictContent() : !isDict() ");
|
if ( !isDict() ) panic("TagDict::dictContent() : !isDict() ");
|
||||||
|
#endif
|
||||||
return _dictContent;
|
return _dictContent;
|
||||||
}
|
}
|
||||||
INTN dictKeyCount() const;
|
INTN dictKeyCount() const;
|
||||||
|
@ -49,7 +49,11 @@ public:
|
|||||||
}
|
}
|
||||||
void setKeyValue(const XString8& xstring)
|
void setKeyValue(const XString8& xstring)
|
||||||
{
|
{
|
||||||
|
#ifdef DEBUG
|
||||||
if ( xstring.isEmpty() ) panic("TagKey::setKeyValue() : xstring.isEmpty() ");
|
if ( xstring.isEmpty() ) panic("TagKey::setKeyValue() : xstring.isEmpty() ");
|
||||||
|
#else
|
||||||
|
if ( xstring.isEmpty() ) return; //don't change
|
||||||
|
#endif
|
||||||
_string = xstring;
|
_string = xstring;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -70,7 +70,7 @@ public:
|
|||||||
virtual void sprintf(unsigned int ident, XString8* s) const = 0;
|
virtual void sprintf(unsigned int ident, XString8* s) const = 0;
|
||||||
void printf(unsigned int ident) const;
|
void printf(unsigned int ident) const;
|
||||||
virtual void printf() const { printf(0); }
|
virtual void printf() const { printf(0); }
|
||||||
|
#ifdef DEBUG
|
||||||
virtual const TagDict* getDict() const { panic("getDict() called on a tag of type %s.", this->getTypeAsXString8().c_str()); }
|
virtual const TagDict* getDict() const { panic("getDict() called on a tag of type %s.", this->getTypeAsXString8().c_str()); }
|
||||||
virtual const TagKey* getKey() const { panic("getKey() called on a tag of type %s.", this->getTypeAsXString8().c_str()); }
|
virtual const TagKey* getKey() const { panic("getKey() called on a tag of type %s.", this->getTypeAsXString8().c_str()); }
|
||||||
virtual const TagString* getString() const { panic("getString() called on a tag of type %s.", this->getTypeAsXString8().c_str()); }
|
virtual const TagString* getString() const { panic("getString() called on a tag of type %s.", this->getTypeAsXString8().c_str()); }
|
||||||
@ -90,6 +90,28 @@ public:
|
|||||||
virtual TagData* getData() { panic("getData() called on a tag of type %s.", this->getTypeAsXString8().c_str()); }
|
virtual TagData* getData() { panic("getData() called on a tag of type %s.", this->getTypeAsXString8().c_str()); }
|
||||||
virtual TagDate* getDate() { panic("getDate() called on a tag of type %s.", this->getTypeAsXString8().c_str()); }
|
virtual TagDate* getDate() { panic("getDate() called on a tag of type %s.", this->getTypeAsXString8().c_str()); }
|
||||||
virtual TagArray* getArray() { panic("getArray() called on a tag of type %s.", this->getTypeAsXString8().c_str()); }
|
virtual TagArray* getArray() { panic("getArray() called on a tag of type %s.", this->getTypeAsXString8().c_str()); }
|
||||||
|
#else
|
||||||
|
virtual const TagDict* getDict() const { return NULL; }
|
||||||
|
virtual const TagKey* getKey() const { return NULL;}
|
||||||
|
virtual const TagString* getString() const { return NULL; }
|
||||||
|
virtual const TagInt64* getInt64() const { return NULL; }
|
||||||
|
virtual const TagFloat* getFloat() const { return NULL; }
|
||||||
|
virtual const TagBool* getBool() const { return NULL; }
|
||||||
|
virtual const TagData* getData() const { return NULL; }
|
||||||
|
virtual const TagDate* getDate() const { return NULL; }
|
||||||
|
virtual const TagArray* getArray() const { return NULL; }
|
||||||
|
|
||||||
|
virtual TagDict* getDict() { return NULL; }
|
||||||
|
virtual TagKey* getKey() { return NULL; }
|
||||||
|
virtual TagString* getString() { return NULL; }
|
||||||
|
virtual TagInt64* getInt64() { return NULL; }
|
||||||
|
virtual TagFloat* getFloat() { return NULL; }
|
||||||
|
virtual TagBool* getBool() { return NULL; }
|
||||||
|
virtual TagData* getData() { return NULL; }
|
||||||
|
virtual TagDate* getDate() { return NULL; }
|
||||||
|
virtual TagArray* getArray() { return NULL; }
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
virtual bool isDict() const { return false; }
|
virtual bool isDict() const { return false; }
|
||||||
virtual bool isKey() const { return false; }
|
virtual bool isKey() const { return false; }
|
||||||
|
@ -184,7 +184,9 @@ void XArray<TYPE>::CheckSize(size_t nNewSize, size_t nGrowBy)
|
|||||||
nNewSize += nGrowBy;
|
nNewSize += nGrowBy;
|
||||||
m_data = (TYPE *)Xrealloc((void *)m_data, nNewSize * sizeof(TYPE), m_allocatedSize * sizeof(TYPE) );
|
m_data = (TYPE *)Xrealloc((void *)m_data, nNewSize * sizeof(TYPE), m_allocatedSize * sizeof(TYPE) );
|
||||||
if ( !m_data ) {
|
if ( !m_data ) {
|
||||||
|
#ifdef DEBUG
|
||||||
panic("XArray<TYPE>::CheckSize(nNewSize=%zu, nGrowBy=%zu) : Xrealloc(%zu, %lu, %" PRIuPTR ") returned NULL. System halted\n", nNewSize, nGrowBy, m_allocatedSize, nNewSize*sizeof(TYPE), (uintptr_t)m_data);
|
panic("XArray<TYPE>::CheckSize(nNewSize=%zu, nGrowBy=%zu) : Xrealloc(%zu, %lu, %" PRIuPTR ") returned NULL. System halted\n", nNewSize, nGrowBy, m_allocatedSize, nNewSize*sizeof(TYPE), (uintptr_t)m_data);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
// memset(&_Data[_Size], 0, (nNewSize-_Size) * sizeof(TYPE)); // Could help for debugging, but zeroing in not needed.
|
// memset(&_Data[_Size], 0, (nNewSize-_Size) * sizeof(TYPE)); // Could help for debugging, but zeroing in not needed.
|
||||||
m_allocatedSize = nNewSize;
|
m_allocatedSize = nNewSize;
|
||||||
@ -216,11 +218,11 @@ void XArray<TYPE>::setSize(size_t l)
|
|||||||
template<class TYPE>
|
template<class TYPE>
|
||||||
TYPE &XArray<TYPE>::ElementAt(size_t index)
|
TYPE &XArray<TYPE>::ElementAt(size_t index)
|
||||||
{
|
{
|
||||||
// #ifdef _DEBUG
|
#ifdef DEBUG
|
||||||
if ( index >= m_len ) {
|
if ( index >= m_len ) {
|
||||||
panic("XArray::ElementAt(size_t) -> Operator [] : index > m_len");
|
panic("XArray::ElementAt(size_t) -> Operator [] : index > m_len");
|
||||||
}
|
}
|
||||||
// #endif
|
#endif
|
||||||
return m_data[index];
|
return m_data[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -228,11 +230,11 @@ TYPE &XArray<TYPE>::ElementAt(size_t index)
|
|||||||
template<class TYPE>
|
template<class TYPE>
|
||||||
const TYPE& XArray<TYPE>::ElementAt(size_t index) const
|
const TYPE& XArray<TYPE>::ElementAt(size_t index) const
|
||||||
{
|
{
|
||||||
// #ifdef _DEBUG
|
#ifdef DEBUG
|
||||||
if ( index >= m_len ) {
|
if ( index >= m_len ) {
|
||||||
panic("XArray::ElementAt(size_t) const -> Operator [] : index > m_len");
|
panic("XArray::ElementAt(size_t) const -> Operator [] : index > m_len");
|
||||||
}
|
}
|
||||||
// #endif
|
#endif
|
||||||
return m_data[index];
|
return m_data[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -240,14 +242,14 @@ const TYPE& XArray<TYPE>::ElementAt(size_t index) const
|
|||||||
template<class TYPE>
|
template<class TYPE>
|
||||||
TYPE &XArray<TYPE>::ElementAt(int index)
|
TYPE &XArray<TYPE>::ElementAt(int index)
|
||||||
{
|
{
|
||||||
// #ifdef _DEBUG
|
#ifdef DEBUG
|
||||||
if ( index < 0 ) {
|
if ( index < 0 ) {
|
||||||
panic("XArray::ElementAt(int) -> Operator [] : index < 0");
|
panic("XArray::ElementAt(int) -> Operator [] : index < 0");
|
||||||
}
|
}
|
||||||
if ( (unsigned int)index >= m_len ) { // cast safe, index > 0
|
if ( (unsigned int)index >= m_len ) { // cast safe, index > 0
|
||||||
panic("XArray::ElementAt(int) -> Operator [] : index > m_len");
|
panic("XArray::ElementAt(int) -> Operator [] : index > m_len");
|
||||||
}
|
}
|
||||||
// #endif
|
#endif
|
||||||
return m_data[index];
|
return m_data[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -255,14 +257,14 @@ TYPE &XArray<TYPE>::ElementAt(int index)
|
|||||||
template<class TYPE>
|
template<class TYPE>
|
||||||
const TYPE& XArray<TYPE>::ElementAt(int index) const
|
const TYPE& XArray<TYPE>::ElementAt(int index) const
|
||||||
{
|
{
|
||||||
// #ifdef _DEBUG
|
#ifdef DEBUG
|
||||||
if ( index < 0 ) {
|
if ( index < 0 ) {
|
||||||
panic("XArray::ElementAt(int) const -> Operator [] : index < 0");
|
panic("XArray::ElementAt(int) const -> Operator [] : index < 0");
|
||||||
}
|
}
|
||||||
if ( (unsigned int)index >= m_len ) { // cast ok as index > 0. Ideally cast would be like '(unsigned __typeof__(index))'
|
if ( (unsigned int)index >= m_len ) { // cast ok as index > 0. Ideally cast would be like '(unsigned __typeof__(index))'
|
||||||
panic("XArray::ElementAt(int) const -> Operator [] : index > m_len");
|
panic("XArray::ElementAt(int) const -> Operator [] : index > m_len");
|
||||||
}
|
}
|
||||||
// #endif
|
#endif
|
||||||
return m_data[index];
|
return m_data[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -37,7 +37,11 @@ class XBuffer : public XBuffer_Super
|
|||||||
template<typename IntegralType, enable_if(is_integral(IntegralType))>
|
template<typename IntegralType, enable_if(is_integral(IntegralType))>
|
||||||
void stealValueFrom(T* p, IntegralType count) {
|
void stealValueFrom(T* p, IntegralType count) {
|
||||||
if ( count < 0 ) {
|
if ( count < 0 ) {
|
||||||
|
#ifdef DEBUG
|
||||||
panic("XBuffer::stealValueFrom : count < 0. System halted\n");
|
panic("XBuffer::stealValueFrom : count < 0. System halted\n");
|
||||||
|
#else
|
||||||
|
return;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
if( _WData ) free(_WData);
|
if( _WData ) free(_WData);
|
||||||
Initialize(p, count, 0);
|
Initialize(p, count, 0);
|
||||||
@ -61,7 +65,11 @@ class XBuffer : public XBuffer_Super
|
|||||||
template<typename IntegralType, enable_if(is_integral(IntegralType))>
|
template<typename IntegralType, enable_if(is_integral(IntegralType))>
|
||||||
T* dataSized(IntegralType size) {
|
T* dataSized(IntegralType size) {
|
||||||
if ( size < 0 ) {
|
if ( size < 0 ) {
|
||||||
|
#ifdef DEBUG
|
||||||
panic("XBuffer::dataSized : size < 0. System halted\n");
|
panic("XBuffer::dataSized : size < 0. System halted\n");
|
||||||
|
#else
|
||||||
|
return NULL;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
CheckSize(size, 0);
|
CheckSize(size, 0);
|
||||||
return data();
|
return data();
|
||||||
@ -80,8 +88,13 @@ class XBuffer : public XBuffer_Super
|
|||||||
|
|
||||||
template<typename IntegralType, enable_if(is_integral(IntegralType))>
|
template<typename IntegralType, enable_if(is_integral(IntegralType))>
|
||||||
void setSize(IntegralType size) {
|
void setSize(IntegralType size) {
|
||||||
|
#ifdef DEBUG
|
||||||
if ( size<0 ) panic("XBuffer::setSize() -> i < 0");
|
if ( size<0 ) panic("XBuffer::setSize() -> i < 0");
|
||||||
if ( (unsigned_type(IntegralType))size > MAX_XSIZE ) panic("XBuffer::setSize() -> i > MAX_XSIZE");
|
if ( (unsigned_type(IntegralType))size > MAX_XSIZE ) panic("XBuffer::setSize() -> i > MAX_XSIZE");
|
||||||
|
#else
|
||||||
|
if ( size<0 ) return;
|
||||||
|
if ( (unsigned_type(IntegralType))size > MAX_XSIZE ) return;
|
||||||
|
#endif
|
||||||
CheckSize((unsigned_type(IntegralType))size);
|
CheckSize((unsigned_type(IntegralType))size);
|
||||||
XBuffer_Super::m_size = (unsigned_type(IntegralType))size;
|
XBuffer_Super::m_size = (unsigned_type(IntegralType))size;
|
||||||
};
|
};
|
||||||
@ -100,15 +113,26 @@ class XBuffer : public XBuffer_Super
|
|||||||
template<typename IntegralType, enable_if(is_integral(IntegralType))>
|
template<typename IntegralType, enable_if(is_integral(IntegralType))>
|
||||||
T& operator [](IntegralType i)
|
T& operator [](IntegralType i)
|
||||||
{
|
{
|
||||||
|
#ifdef DEBUG
|
||||||
if (i < 0) panic("XBuffer::[] : i < 0. System halted\n");
|
if (i < 0) panic("XBuffer::[] : i < 0. System halted\n");
|
||||||
if ( (unsigned_type(IntegralType))i >= size() ) panic("XBuffer::[] : i > _Len. System halted\n");
|
if ( (unsigned_type(IntegralType))i >= size() ) panic("XBuffer::[] : i > _Len. System halted\n");
|
||||||
|
#else
|
||||||
|
if (i < 0) return 0;
|
||||||
|
if ( (unsigned_type(IntegralType))i >= size() ) return 0;
|
||||||
|
|
||||||
|
#endif
|
||||||
return _WData[(unsigned_type(IntegralType))i];
|
return _WData[(unsigned_type(IntegralType))i];
|
||||||
}
|
}
|
||||||
template<typename IntegralType, enable_if(is_integral(IntegralType))>
|
template<typename IntegralType, enable_if(is_integral(IntegralType))>
|
||||||
const T& operator [](IntegralType i) const
|
const T& operator [](IntegralType i) const
|
||||||
{
|
{
|
||||||
|
#ifdef DEBUG
|
||||||
if (i < 0) panic("XBuffer::[] : i < 0. System halted\n");
|
if (i < 0) panic("XBuffer::[] : i < 0. System halted\n");
|
||||||
if ( (unsigned_type(IntegralType))i >= size() ) panic("XBuffer::[] : i > _Len. System halted\n");
|
if ( (unsigned_type(IntegralType))i >= size() ) panic("XBuffer::[] : i > _Len. System halted\n");
|
||||||
|
#else
|
||||||
|
if (i < 0) return 0;
|
||||||
|
if ( (unsigned_type(IntegralType))i >= size() ) return 0;
|
||||||
|
#endif
|
||||||
return _WData[(unsigned_type(IntegralType))i];
|
return _WData[(unsigned_type(IntegralType))i];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -121,16 +145,26 @@ class XBuffer : public XBuffer_Super
|
|||||||
|
|
||||||
template<typename IntegralType, enable_if(is_integral(IntegralType))>
|
template<typename IntegralType, enable_if(is_integral(IntegralType))>
|
||||||
void memset(unsigned char c, IntegralType count) {
|
void memset(unsigned char c, IntegralType count) {
|
||||||
|
#ifdef DEBUG
|
||||||
if (count < 0) panic("XBuffer::memset : count < 0. System halted\n");
|
if (count < 0) panic("XBuffer::memset : count < 0. System halted\n");
|
||||||
|
#else
|
||||||
|
if (count < 0) return;
|
||||||
|
#endif
|
||||||
if ( (unsigned_type(IntegralType))count >= size() ) setSize(count);
|
if ( (unsigned_type(IntegralType))count >= size() ) setSize(count);
|
||||||
::memset(_WData, c, count);
|
::memset(_WData, c, count);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename IntegralType1, typename IntegralType2, enable_if( is_integral(IntegralType1) && is_integral(IntegralType2) )>
|
template<typename IntegralType1, typename IntegralType2, enable_if( is_integral(IntegralType1) && is_integral(IntegralType2) )>
|
||||||
void memsetAtPos(IntegralType1 pos, unsigned char c, IntegralType2 count) {
|
void memsetAtPos(IntegralType1 pos, unsigned char c, IntegralType2 count) {
|
||||||
|
#ifdef DEBUG
|
||||||
if (pos < 0) panic("XBuffer::memset : pos < 0. System halted\n");
|
if (pos < 0) panic("XBuffer::memset : pos < 0. System halted\n");
|
||||||
if (count < 0) panic("XBuffer::memset : count < 0. System halted\n");
|
if (count < 0) panic("XBuffer::memset : count < 0. System halted\n");
|
||||||
|
#else
|
||||||
|
if (pos < 0) return;
|
||||||
|
if (count < 0) return;
|
||||||
|
#endif
|
||||||
if ( (size_t)pos + (unsigned_type(IntegralType2))count >= size() ) setSize((size_t)pos + (unsigned_type(IntegralType2))count);
|
if ( (size_t)pos + (unsigned_type(IntegralType2))count >= size() ) setSize((size_t)pos + (unsigned_type(IntegralType2))count);
|
||||||
|
|
||||||
::memset(_WData, c, count);
|
::memset(_WData, c, count);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -181,7 +215,11 @@ void XBuffer<T>::Initialize(const T* p, size_t count, size_t index)
|
|||||||
m_allocatedSize = count;
|
m_allocatedSize = count;
|
||||||
_WData = (unsigned char*)malloc(m_allocatedSize);
|
_WData = (unsigned char*)malloc(m_allocatedSize);
|
||||||
if ( !_WData ) {
|
if ( !_WData ) {
|
||||||
|
#ifdef DEBUG
|
||||||
panic("XBuffer<T>::Initialize(%zu) : malloc returned NULL. System halted\n", count);
|
panic("XBuffer<T>::Initialize(%zu) : malloc returned NULL. System halted\n", count);
|
||||||
|
#else
|
||||||
|
return;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
memcpy(_WData, p, count);
|
memcpy(_WData, p, count);
|
||||||
XRBuffer<T>::_RData = _WData;
|
XRBuffer<T>::_RData = _WData;
|
||||||
@ -208,7 +246,12 @@ void XBuffer<T>::CheckSize(size_t nNewSize, size_t nGrowBy)
|
|||||||
nNewSize += nGrowBy;
|
nNewSize += nGrowBy;
|
||||||
_WData = (unsigned char*)Xrealloc(_WData, nNewSize, m_allocatedSize);
|
_WData = (unsigned char*)Xrealloc(_WData, nNewSize, m_allocatedSize);
|
||||||
if ( !_WData ) {
|
if ( !_WData ) {
|
||||||
|
#ifdef DEBUG
|
||||||
panic("XBuffer<T>::CheckSize(%zu, %zu) : Xrealloc(%" PRIuPTR " %zu, %zu) returned NULL. System halted\n", nNewSize, nGrowBy, uintptr_t(_WData), nNewSize, m_allocatedSize);
|
panic("XBuffer<T>::CheckSize(%zu, %zu) : Xrealloc(%" PRIuPTR " %zu, %zu) returned NULL. System halted\n", nNewSize, nGrowBy, uintptr_t(_WData), nNewSize, m_allocatedSize);
|
||||||
|
#else
|
||||||
|
m_allocatedSize = 0;
|
||||||
|
return;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
XRBuffer<T>::_RData = _WData;
|
XRBuffer<T>::_RData = _WData;
|
||||||
m_allocatedSize = nNewSize;
|
m_allocatedSize = nNewSize;
|
||||||
|
@ -63,10 +63,18 @@ class XObjArrayNC
|
|||||||
const TYPE &ElementAt(IntegralType nIndex) const
|
const TYPE &ElementAt(IntegralType nIndex) const
|
||||||
{
|
{
|
||||||
if (nIndex < 0) {
|
if (nIndex < 0) {
|
||||||
|
#ifdef DEBUG
|
||||||
panic("XObjArrayNC::ElementAt() : i < 0. System halted\n");
|
panic("XObjArrayNC::ElementAt() : i < 0. System halted\n");
|
||||||
|
#else
|
||||||
|
nIndex = 0;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
if ( (unsigned_type(IntegralType))nIndex >= _Len ) {
|
if ( (unsigned_type(IntegralType))nIndex >= _Len ) {
|
||||||
|
#ifdef DEBUG
|
||||||
panic("XObjArrayNC::ElementAt() -> operator [] - index (%zu) greater than length (%zu)\n", (size_t)nIndex, _Len);
|
panic("XObjArrayNC::ElementAt() -> operator [] - index (%zu) greater than length (%zu)\n", (size_t)nIndex, _Len);
|
||||||
|
#else
|
||||||
|
nIndex = 0;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
return *((TYPE *)(_Data[nIndex].Object));
|
return *((TYPE *)(_Data[nIndex].Object));
|
||||||
}
|
}
|
||||||
@ -75,10 +83,19 @@ class XObjArrayNC
|
|||||||
TYPE &ElementAt(IntegralType nIndex)
|
TYPE &ElementAt(IntegralType nIndex)
|
||||||
{
|
{
|
||||||
if (nIndex < 0) {
|
if (nIndex < 0) {
|
||||||
|
#ifdef DEBUG
|
||||||
panic("XObjArrayNC::ElementAt() : i < 0. System halted\n");
|
panic("XObjArrayNC::ElementAt() : i < 0. System halted\n");
|
||||||
|
#else
|
||||||
|
nIndex = 0;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
if ( (unsigned_type(IntegralType))nIndex >= _Len ) {
|
|
||||||
|
if ( (unsigned_type(IntegralType))nIndex >= _Len ) {
|
||||||
|
#ifdef DEBUG
|
||||||
panic("XObjArrayNC::ElementAt() const -> operator [] - index (%zu) greater than length (%zu)\n", (size_t)nIndex, _Len);
|
panic("XObjArrayNC::ElementAt() const -> operator [] - index (%zu) greater than length (%zu)\n", (size_t)nIndex, _Len);
|
||||||
|
#else
|
||||||
|
nIndex = 0;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
return *((TYPE *)(_Data[nIndex].Object));
|
return *((TYPE *)(_Data[nIndex].Object));
|
||||||
}
|
}
|
||||||
@ -449,7 +466,12 @@ void XObjArrayNC<TYPE>::CheckSize(size_t nNewSize, size_t nGrowBy)
|
|||||||
nNewSize += nGrowBy + 1;
|
nNewSize += nGrowBy + 1;
|
||||||
_Data = (XObjArrayEntry<TYPE> *)Xrealloc((void *)_Data, sizeof(XObjArrayEntry<TYPE>) * nNewSize, sizeof(XObjArrayEntry<TYPE>) * m_allocatedSize);
|
_Data = (XObjArrayEntry<TYPE> *)Xrealloc((void *)_Data, sizeof(XObjArrayEntry<TYPE>) * nNewSize, sizeof(XObjArrayEntry<TYPE>) * m_allocatedSize);
|
||||||
if ( !_Data ) {
|
if ( !_Data ) {
|
||||||
|
#ifdef DEBUG
|
||||||
panic("XObjArrayNC<TYPE>::CheckSize(nNewSize=%zu, nGrowBy=%zu) : Xrealloc(%zu, %zu, %" PRIuPTR ") returned NULL. System halted\n", nNewSize, nGrowBy, m_allocatedSize, sizeof(XObjArrayEntry<TYPE>) * nNewSize, (uintptr_t)_Data);
|
panic("XObjArrayNC<TYPE>::CheckSize(nNewSize=%zu, nGrowBy=%zu) : Xrealloc(%zu, %zu, %" PRIuPTR ") returned NULL. System halted\n", nNewSize, nGrowBy, m_allocatedSize, sizeof(XObjArrayEntry<TYPE>) * nNewSize, (uintptr_t)_Data);
|
||||||
|
#else
|
||||||
|
m_allocatedSize = 0;
|
||||||
|
return;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
// memset(&_Data[m_allocatedSize], 0, (nNewSize-m_allocatedSize) * sizeof(XObjArrayEntry<TYPE>));
|
// memset(&_Data[m_allocatedSize], 0, (nNewSize-m_allocatedSize) * sizeof(XObjArrayEntry<TYPE>));
|
||||||
m_allocatedSize = nNewSize;
|
m_allocatedSize = nNewSize;
|
||||||
@ -668,7 +690,11 @@ template<class TYPE>
|
|||||||
void XObjArrayNC<TYPE>::RemoveAtIndex(size_t nIndex)
|
void XObjArrayNC<TYPE>::RemoveAtIndex(size_t nIndex)
|
||||||
{
|
{
|
||||||
if ( nIndex >= XObjArrayNC<TYPE>::_Len ) {
|
if ( nIndex >= XObjArrayNC<TYPE>::_Len ) {
|
||||||
|
#if defined(_DEBUG)
|
||||||
panic("void XObjArrayNC<TYPE>::RemoveAtIndex(size_t nIndex) : BUG nIndex (%zu) is > length(). System halted\n", nIndex);
|
panic("void XObjArrayNC<TYPE>::RemoveAtIndex(size_t nIndex) : BUG nIndex (%zu) is > length(). System halted\n", nIndex);
|
||||||
|
#else
|
||||||
|
return;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
if ( _Data[nIndex].FreeIt )
|
if ( _Data[nIndex].FreeIt )
|
||||||
{
|
{
|
||||||
|
@ -65,7 +65,11 @@ class XRBuffer
|
|||||||
void setIndex(IntegralType Idx)
|
void setIndex(IntegralType Idx)
|
||||||
{
|
{
|
||||||
if (Idx < 0) {
|
if (Idx < 0) {
|
||||||
panic("XBuffer::setIndex : Idx >= m_size. System halted\n");
|
#ifdef DEBUG
|
||||||
|
panic("XBuffer::setIndex : Idx < 0. System halted\n");
|
||||||
|
#else
|
||||||
|
return;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
_Index = Idx;
|
_Index = Idx;
|
||||||
}
|
}
|
||||||
@ -82,10 +86,18 @@ class XRBuffer
|
|||||||
T& operator [](IntegralType i)
|
T& operator [](IntegralType i)
|
||||||
{
|
{
|
||||||
if (i < 0) {
|
if (i < 0) {
|
||||||
|
#ifdef DEBUG
|
||||||
panic("XRBuffer::operator [] : i < 0. System halted\n");
|
panic("XRBuffer::operator [] : i < 0. System halted\n");
|
||||||
|
#else
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
if ( (unsigned_type(IntegralType))i >= m_size ) {
|
if ( (unsigned_type(IntegralType))i >= m_size ) {
|
||||||
panic("XRBuffer::operator [] : index > len. System halted\n");
|
#ifdef DEBUG
|
||||||
|
panic("XRBuffer::operator [] : index >= m_size. System halted\n");
|
||||||
|
#else
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
return _RData[i];
|
return _RData[i];
|
||||||
} // underflow ? overflow ?
|
} // underflow ? overflow ?
|
||||||
@ -93,10 +105,18 @@ class XRBuffer
|
|||||||
const T& operator [](IntegralType i) const
|
const T& operator [](IntegralType i) const
|
||||||
{
|
{
|
||||||
if (i < 0) {
|
if (i < 0) {
|
||||||
|
#ifdef DEBUG
|
||||||
panic("XRBuffer::operator [] : i < 0. System halted\n");
|
panic("XRBuffer::operator [] : i < 0. System halted\n");
|
||||||
}
|
#else
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
if ( (unsigned_type(IntegralType))i >= m_size ) {
|
if ( (unsigned_type(IntegralType))i >= m_size ) {
|
||||||
|
#ifdef DEBUG
|
||||||
panic("XRBuffer::operator [] : index > len. System halted\n");
|
panic("XRBuffer::operator [] : index > len. System halted\n");
|
||||||
|
#else
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
return _RData[i];
|
return _RData[i];
|
||||||
} // underflow ? overflow ?
|
} // underflow ? overflow ?
|
||||||
|
@ -244,7 +244,12 @@ protected:
|
|||||||
template<typename IntegralType, enable_if(is_integral(IntegralType))>
|
template<typename IntegralType, enable_if(is_integral(IntegralType))>
|
||||||
T* _data(IntegralType pos) const
|
T* _data(IntegralType pos) const
|
||||||
{
|
{
|
||||||
|
#ifdef DEBUG
|
||||||
if ( pos<0 ) panic("T* data(int i) -> i < 0");
|
if ( pos<0 ) panic("T* data(int i) -> i < 0");
|
||||||
|
#else
|
||||||
|
if ( pos<0 ) return 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
size_t offset = size_of_utf_string_len(m_data, (unsigned_type(IntegralType))pos); // If pos is too big, size_of_utf_string_len returns the end of the string
|
size_t offset = size_of_utf_string_len(m_data, (unsigned_type(IntegralType))pos); // If pos is too big, size_of_utf_string_len returns the end of the string
|
||||||
return m_data + offset;
|
return m_data + offset;
|
||||||
}
|
}
|
||||||
@ -293,7 +298,11 @@ public:
|
|||||||
char32_t char32At(IntegralType i) const
|
char32_t char32At(IntegralType i) const
|
||||||
{
|
{
|
||||||
if (i < 0) {
|
if (i < 0) {
|
||||||
panic("__String<T>::char32At(size_t i) : i < 0. System halted\n");
|
#ifdef DEBUG
|
||||||
|
panic("__String<T>::char32At(size_t i) : i < 0. System halted\n");
|
||||||
|
#else
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
size_t nb = 0;
|
size_t nb = 0;
|
||||||
const T *p = m_data;
|
const T *p = m_data;
|
||||||
@ -301,8 +310,12 @@ public:
|
|||||||
do {
|
do {
|
||||||
p = get_char32_from_string(p, &char32);
|
p = get_char32_from_string(p, &char32);
|
||||||
if (!char32) {
|
if (!char32) {
|
||||||
if ( (unsigned_type(IntegralType))i == nb ) return 0; // no panic if we want to access the null terminator
|
#ifdef DEBUG
|
||||||
|
if ( (unsigned_type(IntegralType))i == nb ) return 0; // no panic if we want to access the null terminator
|
||||||
panic("__String::char32At(size_t i) : i >= length(). System halted\n");
|
panic("__String::char32At(size_t i) : i >= length(). System halted\n");
|
||||||
|
#else
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
nb += 1;
|
nb += 1;
|
||||||
} while (nb <= (unsigned_type(IntegralType))i);
|
} while (nb <= (unsigned_type(IntegralType))i);
|
||||||
@ -516,7 +529,13 @@ public:
|
|||||||
template<typename IntegralType, typename O, class OtherXStringClass>
|
template<typename IntegralType, typename O, class OtherXStringClass>
|
||||||
bool equalAtIC(IntegralType pos, const __String<O, OtherXStringClass>& S) const
|
bool equalAtIC(IntegralType pos, const __String<O, OtherXStringClass>& S) const
|
||||||
{
|
{
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
if ( pos < 0 ) panic("XString::equalAtIC -> i < 0");
|
if ( pos < 0 ) panic("XString::equalAtIC -> i < 0");
|
||||||
|
#else
|
||||||
|
if ( pos < 0 ) return false;
|
||||||
|
#endif
|
||||||
|
|
||||||
if ( (unsigned_type(IntegralType))pos > length() - S.length() ) return false;
|
if ( (unsigned_type(IntegralType))pos > length() - S.length() ) return false;
|
||||||
return XStringAbstract__ncompare(m_data + (unsigned_type(IntegralType))pos, S.s(), S.length(), true) == 0;
|
return XStringAbstract__ncompare(m_data + (unsigned_type(IntegralType))pos, S.s(), S.length(), true) == 0;
|
||||||
}
|
}
|
||||||
@ -728,7 +747,13 @@ class XStringAbstract : public __String<T, ThisXStringClass>
|
|||||||
m_data = (T*)Xrealloc(m_data, nNewSize*sizeof(T), m_allocatedSize*sizeof(T));
|
m_data = (T*)Xrealloc(m_data, nNewSize*sizeof(T), m_allocatedSize*sizeof(T));
|
||||||
}
|
}
|
||||||
if ( !m_data ) {
|
if ( !m_data ) {
|
||||||
panic("XStringAbstract::Alloc(%zu) : Xrealloc(%" PRIuPTR ", %lu, %zd) returned NULL. System halted\n", nNewSize, uintptr_t(m_data), nNewSize*sizeof(T), m_allocatedSize*sizeof(T));
|
|
||||||
|
#ifdef DEBUG
|
||||||
|
panic("XStringAbstract::Alloc(%zu) : Xrealloc(%" PRIuPTR ", %lu, %zd) returned NULL. System halted\n", nNewSize, uintptr_t(m_data), nNewSize*sizeof(T), m_allocatedSize*sizeof(T));
|
||||||
|
#else
|
||||||
|
m_allocatedSize = 0;
|
||||||
|
return;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
m_allocatedSize = nNewSize;
|
m_allocatedSize = nNewSize;
|
||||||
}
|
}
|
||||||
@ -822,7 +847,12 @@ public:
|
|||||||
protected:
|
protected:
|
||||||
ThisXStringClass& takeValueFromLiteral(const T* s)
|
ThisXStringClass& takeValueFromLiteral(const T* s)
|
||||||
{
|
{
|
||||||
|
#ifdef DEBUG
|
||||||
if ( m_allocatedSize > 0 ) panic("XStringAbstract::takeValueFromLiteral -> m_allocatedSize > 0");
|
if ( m_allocatedSize > 0 ) panic("XStringAbstract::takeValueFromLiteral -> m_allocatedSize > 0");
|
||||||
|
#else
|
||||||
|
if ( m_allocatedSize < 0 ) return 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
m_data = (T*)s;
|
m_data = (T*)s;
|
||||||
return *((ThisXStringClass*)this);
|
return *((ThisXStringClass*)this);
|
||||||
}
|
}
|
||||||
@ -848,8 +878,14 @@ public:
|
|||||||
template<typename IntegralType, enable_if(is_integral(IntegralType))>
|
template<typename IntegralType, enable_if(is_integral(IntegralType))>
|
||||||
T* dataSized(IntegralType size)
|
T* dataSized(IntegralType size)
|
||||||
{
|
{
|
||||||
|
#ifdef DEBUG
|
||||||
if ( size<0 ) panic("T* dataSized() -> i < 0");
|
if ( size<0 ) panic("T* dataSized() -> i < 0");
|
||||||
if ( (unsigned_type(IntegralType))size > MAX_XSIZE ) panic("T* dataSized() -> i > MAX_XSIZE");
|
if ( (unsigned_type(IntegralType))size > MAX_XSIZE ) panic("T* dataSized() -> i > MAX_XSIZE");
|
||||||
|
#else
|
||||||
|
if ( size<0 ) return 0;
|
||||||
|
if ( (unsigned_type(IntegralType))size > MAX_XSIZE ) return 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
CheckSize((unsigned_type(IntegralType))size);
|
CheckSize((unsigned_type(IntegralType))size);
|
||||||
return __String<T, ThisXStringClass>::_data(0);
|
return __String<T, ThisXStringClass>::_data(0);
|
||||||
}
|
}
|
||||||
|
@ -73,7 +73,7 @@ void AddSecureBootTool(void)
|
|||||||
if (!gSettings.Boot.SecureBoot && !gSettings.Boot.SecureBootSetupMode) {
|
if (!gSettings.Boot.SecureBoot && !gSettings.Boot.SecureBootSetupMode) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
panic("not done yet");
|
//panic("not done yet");
|
||||||
// if (gSettings.Boot.SecureBoot) {
|
// if (gSettings.Boot.SecureBoot) {
|
||||||
// Entry = new REFIT_MENU_ENTRY_SECURE_BOOT();
|
// Entry = new REFIT_MENU_ENTRY_SECURE_BOOT();
|
||||||
// Entry->Title.SWPrintf("Clover Secure Boot Configuration");
|
// Entry->Title.SWPrintf("Clover Secure Boot Configuration");
|
||||||
@ -86,12 +86,14 @@ panic("not done yet");
|
|||||||
//// Entry->Tag = TAG_SECURE_BOOT;
|
//// Entry->Tag = TAG_SECURE_BOOT;
|
||||||
// Entry->Image = ThemeX.GetIcon(BUILTIN_ICON_FUNC_SECURE_BOOT);
|
// Entry->Image = ThemeX.GetIcon(BUILTIN_ICON_FUNC_SECURE_BOOT);
|
||||||
// }
|
// }
|
||||||
Entry->Row = 1;
|
|
||||||
|
//----- not done yet ----------
|
||||||
|
// Entry->Row = 1;
|
||||||
//actions
|
//actions
|
||||||
Entry->AtClick = ActionSelect;
|
// Entry->AtClick = ActionSelect;
|
||||||
Entry->AtDoubleClick = ActionEnter;
|
// Entry->AtDoubleClick = ActionEnter;
|
||||||
Entry->AtRightClick = ActionHelp;
|
// Entry->AtRightClick = ActionHelp;
|
||||||
MainMenu.AddMenuEntry(Entry);
|
// MainMenu.AddMenuEntry(Entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -95,7 +95,11 @@ public:
|
|||||||
{
|
{
|
||||||
if ( includeHidden ) return XObjArray<REFIT_ABSTRACT_MENU_ENTRY>::operator [] (nIndex);
|
if ( includeHidden ) return XObjArray<REFIT_ABSTRACT_MENU_ENTRY>::operator [] (nIndex);
|
||||||
if (nIndex < 0) {
|
if (nIndex < 0) {
|
||||||
|
#ifdef DEBUG
|
||||||
panic("EntryArray::operator[] : i < 0. System halted\n");
|
panic("EntryArray::operator[] : i < 0. System halted\n");
|
||||||
|
#else
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
size_t size = 0;
|
size_t size = 0;
|
||||||
for ( size_t i=0 ; i < XObjArray<REFIT_ABSTRACT_MENU_ENTRY>::size() ; i++ ) {
|
for ( size_t i=0 ; i < XObjArray<REFIT_ABSTRACT_MENU_ENTRY>::size() ; i++ ) {
|
||||||
@ -104,7 +108,13 @@ public:
|
|||||||
size++;
|
size++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
panic("EntryArray::operator[] nIndex > size()");
|
panic("EntryArray::operator[] nIndex > size()");
|
||||||
|
#else
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename IntegralType, enable_if(is_integral(IntegralType))>
|
template<typename IntegralType, enable_if(is_integral(IntegralType))>
|
||||||
@ -112,7 +122,11 @@ public:
|
|||||||
{
|
{
|
||||||
if ( includeHidden ) return XObjArray<REFIT_ABSTRACT_MENU_ENTRY>::operator [] (nIndex);
|
if ( includeHidden ) return XObjArray<REFIT_ABSTRACT_MENU_ENTRY>::operator [] (nIndex);
|
||||||
if (nIndex < 0) {
|
if (nIndex < 0) {
|
||||||
|
#ifdef DEBUG
|
||||||
panic("EntryArray::operator[] : i < 0. System halted\n");
|
panic("EntryArray::operator[] : i < 0. System halted\n");
|
||||||
|
#else
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
size_t size = 0;
|
size_t size = 0;
|
||||||
for ( size_t i=0 ; i < XObjArray<REFIT_ABSTRACT_MENU_ENTRY>::size() ; i++ ) {
|
for ( size_t i=0 ; i < XObjArray<REFIT_ABSTRACT_MENU_ENTRY>::size() ; i++ ) {
|
||||||
@ -121,7 +135,11 @@ public:
|
|||||||
size++;
|
size++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#ifdef DEBUG
|
||||||
panic("EntryArray::operator[] nIndex > size()");
|
panic("EntryArray::operator[] nIndex > size()");
|
||||||
|
#else
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t getIdx(const REFIT_ABSTRACT_MENU_ENTRY* entry)
|
size_t getIdx(const REFIT_ABSTRACT_MENU_ENTRY* entry)
|
||||||
@ -201,10 +219,18 @@ public:
|
|||||||
template<typename IntegralType1, typename IntegralType2, enable_if(is_integral(IntegralType1) && is_integral(IntegralType2))>
|
template<typename IntegralType1, typename IntegralType2, enable_if(is_integral(IntegralType1) && is_integral(IntegralType2))>
|
||||||
void moveBefore(IntegralType1 idxFrom, IntegralType2 idxTo)
|
void moveBefore(IntegralType1 idxFrom, IntegralType2 idxTo)
|
||||||
{
|
{
|
||||||
|
#ifdef DEBUG
|
||||||
if (idxFrom < 0) panic("EntryArray::move(IntegralType1, IntegralType2) : idxFrom < 0. System halted\n");
|
if (idxFrom < 0) panic("EntryArray::move(IntegralType1, IntegralType2) : idxFrom < 0. System halted\n");
|
||||||
if ((unsigned_type(IntegralType1))idxFrom >= XObjArray<REFIT_ABSTRACT_MENU_ENTRY>::size()) panic("EntryArray::move(IntegralType1, IntegralType2) : idxFrom > size(). System halted\n");
|
if ((unsigned_type(IntegralType1))idxFrom >= XObjArray<REFIT_ABSTRACT_MENU_ENTRY>::size()) panic("EntryArray::move(IntegralType1, IntegralType2) : idxFrom > size(). System halted\n");
|
||||||
if (idxTo < 0) panic("EntryArray::move(IntegralType1, IntegralType2) : idxTo < 0. System halted\n");
|
if (idxTo < 0) panic("EntryArray::move(IntegralType1, IntegralType2) : idxTo < 0. System halted\n");
|
||||||
if ((unsigned_type(IntegralType2))idxTo >= XObjArray<REFIT_ABSTRACT_MENU_ENTRY>::size()) panic("EntryArray::move(IntegralType1, IntegralType2) : idxTo > size(). System halted\n");
|
if ((unsigned_type(IntegralType2))idxTo >= XObjArray<REFIT_ABSTRACT_MENU_ENTRY>::size()) panic("EntryArray::move(IntegralType1, IntegralType2) : idxTo > size(). System halted\n");
|
||||||
|
#else
|
||||||
|
if (idxFrom < 0) return;
|
||||||
|
if ((unsigned_type(IntegralType1))idxFrom >= XObjArray<REFIT_ABSTRACT_MENU_ENTRY>::size()) return;
|
||||||
|
if (idxTo < 0) return;
|
||||||
|
if ((unsigned_type(IntegralType2))idxTo >= XObjArray<REFIT_ABSTRACT_MENU_ENTRY>::size()) return;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
REFIT_ABSTRACT_MENU_ENTRY* entry = &ElementAt(idxFrom);
|
REFIT_ABSTRACT_MENU_ENTRY* entry = &ElementAt(idxFrom);
|
||||||
RemoveWithoutFreeingAtIndex(idxFrom);
|
RemoveWithoutFreeingAtIndex(idxFrom);
|
||||||
@ -218,10 +244,17 @@ public:
|
|||||||
template<typename IntegralType1, typename IntegralType2, enable_if(is_integral(IntegralType1) && is_integral(IntegralType2))>
|
template<typename IntegralType1, typename IntegralType2, enable_if(is_integral(IntegralType1) && is_integral(IntegralType2))>
|
||||||
void moveAfter(IntegralType1 idxFrom, IntegralType2 idxTo)
|
void moveAfter(IntegralType1 idxFrom, IntegralType2 idxTo)
|
||||||
{
|
{
|
||||||
|
#ifdef DEBUG
|
||||||
if (idxFrom < 0) panic("EntryArray::move(IntegralType1, IntegralType2) : idxFrom < 0. System halted\n");
|
if (idxFrom < 0) panic("EntryArray::move(IntegralType1, IntegralType2) : idxFrom < 0. System halted\n");
|
||||||
if ((unsigned_type(IntegralType1))idxFrom >= XObjArray<REFIT_ABSTRACT_MENU_ENTRY>::size()) panic("EntryArray::move(IntegralType1, IntegralType2) : idxFrom > size(). System halted\n");
|
if ((unsigned_type(IntegralType1))idxFrom >= XObjArray<REFIT_ABSTRACT_MENU_ENTRY>::size()) panic("EntryArray::move(IntegralType1, IntegralType2) : idxFrom > size(). System halted\n");
|
||||||
if (idxTo < 0) panic("EntryArray::move(IntegralType1, IntegralType2) : idxTo < 0. System halted\n");
|
if (idxTo < 0) panic("EntryArray::move(IntegralType1, IntegralType2) : idxTo < 0. System halted\n");
|
||||||
if ((unsigned_type(IntegralType2))idxTo >= XObjArray<REFIT_ABSTRACT_MENU_ENTRY>::size()) panic("EntryArray::move(IntegralType1, IntegralType2) : idxTo > size(). System halted\n");
|
if ((unsigned_type(IntegralType2))idxTo >= XObjArray<REFIT_ABSTRACT_MENU_ENTRY>::size()) panic("EntryArray::move(IntegralType1, IntegralType2) : idxTo > size(). System halted\n");
|
||||||
|
#else
|
||||||
|
if (idxFrom < 0) return;
|
||||||
|
if ((unsigned_type(IntegralType1))idxFrom >= XObjArray<REFIT_ABSTRACT_MENU_ENTRY>::size()) return;
|
||||||
|
if (idxTo < 0) return;
|
||||||
|
if ((unsigned_type(IntegralType2))idxTo >= XObjArray<REFIT_ABSTRACT_MENU_ENTRY>::size()) return;
|
||||||
|
#endif
|
||||||
|
|
||||||
REFIT_ABSTRACT_MENU_ENTRY* entry = &ElementAt(idxFrom);
|
REFIT_ABSTRACT_MENU_ENTRY* entry = &ElementAt(idxFrom);
|
||||||
RemoveWithoutFreeingAtIndex(idxFrom);
|
RemoveWithoutFreeingAtIndex(idxFrom);
|
||||||
|
@ -4736,7 +4736,11 @@ static unsigned readChunk_iCCP(LodePNGInfo* info, const LodePNGDecompressSetting
|
|||||||
if(!error) {
|
if(!error) {
|
||||||
if(decoded.size) {
|
if(decoded.size) {
|
||||||
info->iccp_profile_size = (__typeof__(info->iccp_profile_size))decoded.size; // Unsafe cast
|
info->iccp_profile_size = (__typeof__(info->iccp_profile_size))decoded.size; // Unsafe cast
|
||||||
|
#ifdef DEBUG
|
||||||
if ( info->iccp_profile_size != decoded.size ) panic("info->iccp_profile_size != decoded.size"); // Check the cast
|
if ( info->iccp_profile_size != decoded.size ) panic("info->iccp_profile_size != decoded.size"); // Check the cast
|
||||||
|
#else
|
||||||
|
if ( info->iccp_profile_size != decoded.size ) return 100; /*invalid ICC profile size*/
|
||||||
|
#endif
|
||||||
info->iccp_profile = (unsigned char*)lodepng_malloc(decoded.size);
|
info->iccp_profile = (unsigned char*)lodepng_malloc(decoded.size);
|
||||||
if(info->iccp_profile) {
|
if(info->iccp_profile) {
|
||||||
lodepng_memcpy(info->iccp_profile, decoded.data, decoded.size);
|
lodepng_memcpy(info->iccp_profile, decoded.data, decoded.size);
|
||||||
|
@ -576,7 +576,11 @@ size_t setKextAtPos(XObjArray<SIDELOAD_KEXT>* kextArrayPtr, const XString8& kext
|
|||||||
|
|
||||||
for (size_t kextIdx = 0 ; kextIdx < kextArray.size() ; kextIdx++ ) {
|
for (size_t kextIdx = 0 ; kextIdx < kextArray.size() ; kextIdx++ ) {
|
||||||
if ( kextArray[kextIdx].FileName.contains(kextName) ) {
|
if ( kextArray[kextIdx].FileName.contains(kextName) ) {
|
||||||
|
#ifdef DEBUG
|
||||||
if ( pos >= kextArray.size() ) panic("pos >= kextArray.size()");
|
if ( pos >= kextArray.size() ) panic("pos >= kextArray.size()");
|
||||||
|
#else
|
||||||
|
//it is impossible
|
||||||
|
#endif
|
||||||
if ( pos == kextIdx ) return pos+1;
|
if ( pos == kextIdx ) return pos+1;
|
||||||
if ( pos > kextIdx ) pos -= 1;
|
if ( pos > kextIdx ) pos -= 1;
|
||||||
SIDELOAD_KEXT* kextToMove = &kextArray[kextIdx];
|
SIDELOAD_KEXT* kextToMove = &kextArray[kextIdx];
|
||||||
@ -595,7 +599,7 @@ static XStringW getDriversPath()
|
|||||||
if (FileExists(&self.getCloverDir(), L"drivers\\BIOS")) {
|
if (FileExists(&self.getCloverDir(), L"drivers\\BIOS")) {
|
||||||
return L"drivers\\BIOS"_XSW;
|
return L"drivers\\BIOS"_XSW;
|
||||||
} else {
|
} else {
|
||||||
return L"drivers64"_XSW;
|
return L"drivers64"_XSW; //backward compatibility
|
||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
if (FileExists(&self.getCloverDir(), L"drivers\\UEFI")) {
|
if (FileExists(&self.getCloverDir(), L"drivers\\UEFI")) {
|
||||||
@ -608,6 +612,7 @@ static XStringW getDriversPath()
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
void debugStartImageWithOC()
|
void debugStartImageWithOC()
|
||||||
{
|
{
|
||||||
MsgLog("debugStartImageWithOC\n");
|
MsgLog("debugStartImageWithOC\n");
|
||||||
@ -677,7 +682,7 @@ MsgLog("debugStartImageWithOC\n");
|
|||||||
MsgLog("debugStartImageWithOC : not found\n");
|
MsgLog("debugStartImageWithOC : not found\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
void LOADER_ENTRY::DelegateKernelPatches()
|
void LOADER_ENTRY::DelegateKernelPatches()
|
||||||
{
|
{
|
||||||
XObjArray<KEXT_PATCH> selectedPathArray;
|
XObjArray<KEXT_PATCH> selectedPathArray;
|
||||||
@ -815,7 +820,11 @@ void LOADER_ENTRY::StartLoader()
|
|||||||
EFI_HANDLE Interface = NULL;
|
EFI_HANDLE Interface = NULL;
|
||||||
Status = gBS->LocateProtocol(&gAptioMemoryFixProtocolGuid, NULL, &Interface );
|
Status = gBS->LocateProtocol(&gAptioMemoryFixProtocolGuid, NULL, &Interface );
|
||||||
if ( !EFI_ERROR(Status) ) {
|
if ( !EFI_ERROR(Status) ) {
|
||||||
|
#ifdef DEBUG
|
||||||
panic("Remove AptioMemoryFix.efi and OcQuirks.efi from your driver folder\n");
|
panic("Remove AptioMemoryFix.efi and OcQuirks.efi from your driver folder\n");
|
||||||
|
#else
|
||||||
|
DBG("Remove AptioMemoryFix.efi and OcQuirks.efi from your driver folder\n");
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user