mirror of
https://github.com/CloverHackyColor/CloverBootloader.git
synced 2024-11-27 12:15:19 +01:00
Merge branch 'master' of https://github.com/CloverHackyColor/CloverBootloader
This commit is contained in:
commit
8578de1abe
@ -1765,7 +1765,7 @@ typedef struct {
|
|||||||
UINT16 TotalWidth;
|
UINT16 TotalWidth;
|
||||||
UINT16 DataWidth;
|
UINT16 DataWidth;
|
||||||
UINT16 Size;
|
UINT16 Size;
|
||||||
MEMORY_FORM_FACTOR FormFactor; ///< The enumeration value from MEMORY_FORM_FACTOR.
|
UINT8 FormFactor; ///< The enumeration value from MEMORY_FORM_FACTOR.
|
||||||
UINT8 DeviceSet;
|
UINT8 DeviceSet;
|
||||||
SMBIOS_TABLE_STRING DeviceLocator;
|
SMBIOS_TABLE_STRING DeviceLocator;
|
||||||
SMBIOS_TABLE_STRING BankLocator;
|
SMBIOS_TABLE_STRING BankLocator;
|
||||||
|
@ -311,7 +311,7 @@ EFI_STATUS ScanDeviceHandles(EFI_HANDLE ControllerHandle,
|
|||||||
Status = gBS->LocateHandleBuffer (AllHandles, NULL, NULL, HandleCount, HandleBuffer);
|
Status = gBS->LocateHandleBuffer (AllHandles, NULL, NULL, HandleCount, HandleBuffer);
|
||||||
if (EFI_ERROR (Status)) goto Error;
|
if (EFI_ERROR (Status)) goto Error;
|
||||||
|
|
||||||
*HandleType = (__typeof_am__(*HandleType))AllocatePool (*HandleCount * sizeof (UINT32));
|
*HandleType = (__typeof_am__(*HandleType))AllocatePool (*HandleCount * sizeof (**HandleType));
|
||||||
if (*HandleType == NULL) goto Error;
|
if (*HandleType == NULL) goto Error;
|
||||||
|
|
||||||
for (HandleIndex = 0; HandleIndex < *HandleCount; HandleIndex++) {
|
for (HandleIndex = 0; HandleIndex < *HandleCount; HandleIndex++) {
|
||||||
|
@ -698,8 +698,8 @@ REFIT_VOLUME *FoundParentVolume(REFIT_VOLUME *Volume)
|
|||||||
return NULL; //don't search!
|
return NULL; //don't search!
|
||||||
}
|
}
|
||||||
|
|
||||||
for (VolumeIndex = 0; VolumeIndex < VolumesCount; VolumeIndex++) {
|
for (VolumeIndex = 0; VolumeIndex < Volumes.size(); VolumeIndex++) {
|
||||||
Volume1 = Volumes[VolumeIndex];
|
Volume1 = &Volumes[VolumeIndex];
|
||||||
if (Volume1 != Volume &&
|
if (Volume1 != Volume &&
|
||||||
Volume1->WholeDiskBlockIO == Volume->WholeDiskBlockIO) {
|
Volume1->WholeDiskBlockIO == Volume->WholeDiskBlockIO) {
|
||||||
if (PartNumForVolume(Volume1) == SearchPartNum - 1) {
|
if (PartNumForVolume(Volume1) == SearchPartNum - 1) {
|
||||||
|
@ -919,10 +919,10 @@ EFI_STATUS bootPBR(REFIT_VOLUME* volume, BOOLEAN SataReset)
|
|||||||
//
|
//
|
||||||
DBG("Looking for parent disk of %s\n", FileDevicePathToStr(volume->DevicePath));
|
DBG("Looking for parent disk of %s\n", FileDevicePathToStr(volume->DevicePath));
|
||||||
BiosDriveNum = 0;
|
BiosDriveNum = 0;
|
||||||
for (i = 0; i < VolumesCount; i++) {
|
for (i = 0; i < Volumes.size(); i++) {
|
||||||
if (Volumes[i] != volume && Volumes[i]->BlockIO == volume->WholeDiskBlockIO)
|
if (&Volumes[i] != volume && Volumes[i].BlockIO == volume->WholeDiskBlockIO)
|
||||||
{
|
{
|
||||||
BiosDriveNum = GetBiosDriveNumForVolume(Volumes[i]);
|
BiosDriveNum = GetBiosDriveNumForVolume(&Volumes[i]);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -334,8 +334,8 @@ ResetNativeNvram ()
|
|||||||
|
|
||||||
if (gFirmwareClover || gDriversFlags.EmuVariableLoaded) {
|
if (gFirmwareClover || gDriversFlags.EmuVariableLoaded) {
|
||||||
//DBG("Searching volumes for nvram.plist\n");
|
//DBG("Searching volumes for nvram.plist\n");
|
||||||
for (VolumeIndex = 0; VolumeIndex < VolumesCount; ++VolumeIndex) {
|
for (VolumeIndex = 0; VolumeIndex < Volumes.size(); ++VolumeIndex) {
|
||||||
Volume = Volumes[VolumeIndex];
|
Volume = &Volumes[VolumeIndex];
|
||||||
|
|
||||||
if (!Volume->RootDir) {
|
if (!Volume->RootDir) {
|
||||||
continue;
|
continue;
|
||||||
@ -889,8 +889,8 @@ LoadLatestNvramPlist ()
|
|||||||
LastModifTimeMs = 0;
|
LastModifTimeMs = 0;
|
||||||
|
|
||||||
// search all volumes
|
// search all volumes
|
||||||
for (UINTN Index = 0; Index < VolumesCount; ++Index) {
|
for (UINTN Index = 0; Index < Volumes.size(); ++Index) {
|
||||||
Volume = Volumes[Index];
|
Volume = &Volumes[Index];
|
||||||
|
|
||||||
if (!Volume->RootDir) {
|
if (!Volume->RootDir) {
|
||||||
continue;
|
continue;
|
||||||
@ -1224,8 +1224,8 @@ FindStartupDiskVolume (
|
|||||||
//
|
//
|
||||||
DiskVolume = NULL;
|
DiskVolume = NULL;
|
||||||
DBG (" - searching for that disk\n");
|
DBG (" - searching for that disk\n");
|
||||||
for (Index = 0; Index < (INTN)VolumesCount; ++Index) {
|
for (UINTN Index = 0; Index < Volumes.size(); ++Index) {
|
||||||
Volume = Volumes[Index];
|
Volume = &Volumes[Index];
|
||||||
if (BootVolumeDevicePathEqual (gEfiBootVolume, Volume->DevicePath)) {
|
if (BootVolumeDevicePathEqual (gEfiBootVolume, Volume->DevicePath)) {
|
||||||
// that's the one
|
// that's the one
|
||||||
DiskVolume = Volume;
|
DiskVolume = Volume;
|
||||||
|
@ -82,6 +82,10 @@ extern "C" {
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include "../cpp_foundation/XStringW.h"
|
||||||
|
#include "../cpp_foundation/XArray.h"
|
||||||
|
#include "../cpp_foundation/XObjArray.h"
|
||||||
|
|
||||||
#include "../refit/lib.h"
|
#include "../refit/lib.h"
|
||||||
#include "string.h"
|
#include "string.h"
|
||||||
#include "boot.h"
|
#include "boot.h"
|
||||||
|
@ -431,7 +431,7 @@ ParseLoadOptions (
|
|||||||
AsciiConf = (__typeof__(AsciiConf))AllocateCopyPool (TailSize + 1, Start);
|
AsciiConf = (__typeof__(AsciiConf))AllocateCopyPool (TailSize + 1, Start);
|
||||||
if (AsciiConf != NULL) {
|
if (AsciiConf != NULL) {
|
||||||
*(AsciiConf + TailSize) = '\0';
|
*(AsciiConf + TailSize) = '\0';
|
||||||
*Conf = (__typeof_am__(*Conf))AllocateZeroPool ((TailSize + 1) * sizeof (CHAR16));
|
*Conf = (__typeof_am__(*Conf))AllocateZeroPool ((TailSize + 1) * sizeof(**Conf));
|
||||||
AsciiStrToUnicodeStrS (AsciiConf, *Conf, TailSize);
|
AsciiStrToUnicodeStrS (AsciiConf, *Conf, TailSize);
|
||||||
FreePool (AsciiConf);
|
FreePool (AsciiConf);
|
||||||
}
|
}
|
||||||
@ -5074,7 +5074,8 @@ GetUserSettings(
|
|||||||
for (j = 0; j < PropCount; j++) {
|
for (j = 0; j < PropCount; j++) {
|
||||||
Prop3 = NULL;
|
Prop3 = NULL;
|
||||||
DevProps = *Child;
|
DevProps = *Child;
|
||||||
*Child = (__typeof_am__(*Child))AllocateZeroPool(sizeof(DEV_PROPERTY));
|
// *Child = (__typeof_am__(*Child))AllocateZeroPool(sizeof(**Child));
|
||||||
|
*Child = new (__typeof_am__(**Child));
|
||||||
(*Child)->Next = DevProps;
|
(*Child)->Next = DevProps;
|
||||||
|
|
||||||
if (EFI_ERROR(GetElement(Prop2, j, &Prop3))) { // Prop3 -> <key>
|
if (EFI_ERROR(GetElement(Prop2, j, &Prop3))) { // Prop3 -> <key>
|
||||||
|
@ -1326,14 +1326,14 @@ VOID PatchTableType17()
|
|||||||
// Inject tables
|
// Inject tables
|
||||||
for (Index = 0; Index < gRAM.UserInUse; Index++) {
|
for (Index = 0; Index < gRAM.UserInUse; Index++) {
|
||||||
UINTN UserIndex = channelMap[Index];
|
UINTN UserIndex = channelMap[Index];
|
||||||
UINT8 bank = (UINT8)Index / gRAM.UserChannels;
|
UINT8 bank = (UINT8)(Index / gRAM.UserChannels);
|
||||||
ZeroMem((VOID*)newSmbiosTable.Type17, MAX_TABLE_SIZE);
|
ZeroMem((VOID*)newSmbiosTable.Type17, MAX_TABLE_SIZE);
|
||||||
newSmbiosTable.Type17->Hdr.Type = EFI_SMBIOS_TYPE_MEMORY_DEVICE;
|
newSmbiosTable.Type17->Hdr.Type = EFI_SMBIOS_TYPE_MEMORY_DEVICE;
|
||||||
newSmbiosTable.Type17->Hdr.Length = sizeof(SMBIOS_TABLE_TYPE17);
|
newSmbiosTable.Type17->Hdr.Length = sizeof(SMBIOS_TABLE_TYPE17);
|
||||||
newSmbiosTable.Type17->TotalWidth = 0xFFFF;
|
newSmbiosTable.Type17->TotalWidth = 0xFFFF;
|
||||||
newSmbiosTable.Type17->DataWidth = 0xFFFF;
|
newSmbiosTable.Type17->DataWidth = 0xFFFF;
|
||||||
newSmbiosTable.Type17->Hdr.Handle = (UINT16)(0x1100 + UserIndex);
|
newSmbiosTable.Type17->Hdr.Handle = (UINT16)(0x1100 + UserIndex);
|
||||||
newSmbiosTable.Type17->FormFactor = gMobile ? MemoryFormFactorSodimm : MemoryFormFactorDimm;
|
newSmbiosTable.Type17->FormFactor = (UINT8)(gMobile ? MemoryFormFactorSodimm : MemoryFormFactorDimm);
|
||||||
newSmbiosTable.Type17->TypeDetail.Synchronous = TRUE;
|
newSmbiosTable.Type17->TypeDetail.Synchronous = TRUE;
|
||||||
newSmbiosTable.Type17->DeviceSet = bank + 1;
|
newSmbiosTable.Type17->DeviceSet = bank + 1;
|
||||||
newSmbiosTable.Type17->MemoryArrayHandle = mHandle16;
|
newSmbiosTable.Type17->MemoryArrayHandle = mHandle16;
|
||||||
@ -1347,7 +1347,7 @@ VOID PatchTableType17()
|
|||||||
UpdateSmbiosString(newSmbiosTable, &newSmbiosTable.Type17->DeviceLocator, (CHAR8*)&deviceLocator[0]);
|
UpdateSmbiosString(newSmbiosTable, &newSmbiosTable.Type17->DeviceLocator, (CHAR8*)&deviceLocator[0]);
|
||||||
if ((gRAM.User[UserIndex].InUse) && (gRAM.User[UserIndex].ModuleSize > 0)) {
|
if ((gRAM.User[UserIndex].InUse) && (gRAM.User[UserIndex].ModuleSize > 0)) {
|
||||||
if (iStrLen(gRAM.User[UserIndex].Vendor, 64) > 0) {
|
if (iStrLen(gRAM.User[UserIndex].Vendor, 64) > 0) {
|
||||||
CHAR8* vendor = (CHAR8*)AllocatePool(AsciiStrLen(gRAM.User[UserIndex].Vendor)+1); // this will never be freed. WIll be solved when using a string object.
|
CHAR8* vendor = (CHAR8*)AllocatePool(AsciiStrLen(gRAM.User[UserIndex].Vendor)+1); // this will never be freed. Will be solved when using a string object.
|
||||||
AsciiStrCpy(vendor, gRAM.User[UserIndex].Vendor);
|
AsciiStrCpy(vendor, gRAM.User[UserIndex].Vendor);
|
||||||
UpdateSmbiosString(newSmbiosTable, &newSmbiosTable.Type17->Manufacturer, vendor);
|
UpdateSmbiosString(newSmbiosTable, &newSmbiosTable.Type17->Manufacturer, vendor);
|
||||||
gRAM.User[UserIndex].Vendor = vendor;
|
gRAM.User[UserIndex].Vendor = vendor;
|
||||||
@ -1617,7 +1617,7 @@ VOID PatchTableType17()
|
|||||||
}
|
}
|
||||||
Once = TRUE;
|
Once = TRUE;
|
||||||
newSmbiosTable.Type17->Hdr.Handle = (UINT16)(0x1100 + Index);
|
newSmbiosTable.Type17->Hdr.Handle = (UINT16)(0x1100 + Index);
|
||||||
newSmbiosTable.Type17->FormFactor = gMobile ? MemoryFormFactorSodimm : MemoryFormFactorDimm;
|
newSmbiosTable.Type17->FormFactor = (UINT8)(gMobile ? MemoryFormFactorSodimm : MemoryFormFactorDimm);
|
||||||
newSmbiosTable.Type17->TypeDetail.Synchronous = TRUE;
|
newSmbiosTable.Type17->TypeDetail.Synchronous = TRUE;
|
||||||
newSmbiosTable.Type17->DeviceSet = bank + 1;
|
newSmbiosTable.Type17->DeviceSet = bank + 1;
|
||||||
newSmbiosTable.Type17->MemoryArrayHandle = mHandle16;
|
newSmbiosTable.Type17->MemoryArrayHandle = mHandle16;
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
#if !defined(__XARRAY_H__)
|
#if !defined(__XARRAY_H__)
|
||||||
#define __XARRAY_H__
|
#define __XARRAY_H__
|
||||||
|
|
||||||
#include <Platform.h> // Only use angled for Platform, else, xcode project won't compile // for DebugLog
|
//#include <Platform.h> // Only use angled for Platform, else, xcode project won't compile // for DebugLog
|
||||||
//VOID EFIAPI DebugLog(IN INTN DebugMode, IN CONST CHAR8 *FormatString, ...); // To avoid include Platform just for this
|
//VOID EFIAPI DebugLog(IN INTN DebugMode, IN CONST CHAR8 *FormatString, ...); // To avoid include Platform just for this
|
||||||
//extern "C" {
|
//extern "C" {
|
||||||
// #include <Library/MemoryAllocationLib.h>
|
// #include <Library/MemoryAllocationLib.h>
|
||||||
@ -52,6 +52,18 @@ class XArray
|
|||||||
xsize Length() const { return m_len; }
|
xsize Length() const { return m_len; }
|
||||||
void SetLength(xsize l);
|
void SetLength(xsize l);
|
||||||
|
|
||||||
|
//low case functions like in std::vector
|
||||||
|
xsize size() const { return m_len; }
|
||||||
|
const TYPE& begin() const { return ElementAt(0); }
|
||||||
|
TYPE& begin() { return ElementAt(0); }
|
||||||
|
|
||||||
|
const TYPE& end() const { return ElementAt(m_len - 1); }
|
||||||
|
TYPE& end() { return ElementAt(m_len - 1); }
|
||||||
|
|
||||||
|
xsize insert(const TYPE newElement, xsize pos, xsize count = 1) { return Insert(newElement, pos, count); }
|
||||||
|
|
||||||
|
//--------------------------------------------------
|
||||||
|
|
||||||
const TYPE& ElementAt(xsize nIndex) const;
|
const TYPE& ElementAt(xsize nIndex) const;
|
||||||
TYPE& ElementAt(xsize nIndex);
|
TYPE& ElementAt(xsize nIndex);
|
||||||
|
|
||||||
@ -91,7 +103,8 @@ class XArray
|
|||||||
void RemoveAtIndex(xsize nIndex);
|
void RemoveAtIndex(xsize nIndex);
|
||||||
void RemoveAtIndex(int nIndex);
|
void RemoveAtIndex(int nIndex);
|
||||||
|
|
||||||
void Empty();
|
void setEmpty();
|
||||||
|
bool isEmpty() const { return size() == 0; }
|
||||||
|
|
||||||
xsize IdxOf(TYPE& e) const;
|
xsize IdxOf(TYPE& e) const;
|
||||||
bool ExistIn(TYPE& e) const { return IdxOf(e) != MAX_XSIZE; }
|
bool ExistIn(TYPE& e) const { return IdxOf(e) != MAX_XSIZE; }
|
||||||
@ -138,7 +151,7 @@ const XArray<TYPE> &XArray<TYPE>::operator =(const XArray<TYPE> &anArray)
|
|||||||
{
|
{
|
||||||
xsize ui;
|
xsize ui;
|
||||||
|
|
||||||
Empty();
|
setEmpty();
|
||||||
for ( ui=0 ; ui<anArray.Length() ; ui+=1 ) AddCopy(anArray.Data() );
|
for ( ui=0 ; ui<anArray.Length() ; ui+=1 ) AddCopy(anArray.Data() );
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
@ -327,7 +340,7 @@ void XArray<TYPE>::Remove(const TYPE *Element)
|
|||||||
|
|
||||||
/* Empty() */
|
/* Empty() */
|
||||||
template<class TYPE>
|
template<class TYPE>
|
||||||
void XArray<TYPE>::Empty()
|
void XArray<TYPE>::setEmpty()
|
||||||
{
|
{
|
||||||
//printf("XArray Empty\n");
|
//printf("XArray Empty\n");
|
||||||
m_len = 0;
|
m_len = 0;
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
#if !defined(__XOBJARRAY_H__)
|
#if !defined(__XOBJARRAY_H__)
|
||||||
#define __XOBJARRAY_H__
|
#define __XOBJARRAY_H__
|
||||||
|
|
||||||
#include <Platform.h> // Only use angled for Platform, else, xcode project won't compile // for DebugLog
|
//#include <Platform.h> // Only use angled for Platform, else, xcode project won't compile // for DebugLog
|
||||||
//VOID EFIAPI DebugLog(IN INTN DebugMode, IN CONST CHAR8 *FormatString, ...); // To avoid include Platform just for this
|
//VOID EFIAPI DebugLog(IN INTN DebugMode, IN CONST CHAR8 *FormatString, ...); // To avoid include Platform just for this
|
||||||
//extern "C" {
|
//extern "C" {
|
||||||
// #include <Library/MemoryAllocationLib.h>
|
// #include <Library/MemoryAllocationLib.h>
|
||||||
@ -56,11 +56,12 @@ class XObjArrayNC
|
|||||||
xsize _getLen() const { return _Len; }
|
xsize _getLen() const { return _Len; }
|
||||||
|
|
||||||
public:
|
public:
|
||||||
xsize Size() const { return _Size; }
|
xsize AllocatedSize() const { return _Size; }
|
||||||
xsize Length() const { return _Len; }
|
xsize size() const { return _Len; }
|
||||||
|
xsize length() const { return _Len; }
|
||||||
|
|
||||||
bool NotNull() const { return Length() > 0; }
|
bool NotNull() const { return size() > 0; }
|
||||||
bool IsNull() const { return Length() == 0; }
|
bool IsNull() const { return size() == 0; }
|
||||||
|
|
||||||
const TYPE &ElementAt(xsize nIndex) const;
|
const TYPE &ElementAt(xsize nIndex) const;
|
||||||
TYPE &ElementAt(xsize nIndex);
|
TYPE &ElementAt(xsize nIndex);
|
||||||
@ -156,8 +157,8 @@ XObjArray<TYPE>::XObjArray(const XObjArray<TYPE> &anObjArray)
|
|||||||
xsize ui;
|
xsize ui;
|
||||||
|
|
||||||
XObjArrayNC<TYPE>::Init();
|
XObjArrayNC<TYPE>::Init();
|
||||||
this->CheckSize(anObjArray.Length(), (xsize)0);
|
this->CheckSize(anObjArray.size(), (xsize)0);
|
||||||
for ( ui=0 ; ui<anObjArray.Length() ; ui+=1 ) AddCopy(anObjArray.ElementAt(ui));
|
for ( ui=0 ; ui<anObjArray.size() ; ui+=1 ) AddCopy(anObjArray.ElementAt(ui));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* operator = */
|
/* operator = */
|
||||||
@ -168,7 +169,7 @@ const XObjArray<TYPE> &XObjArray<TYPE>::operator =(const XObjArray<TYPE> &anObjA
|
|||||||
|
|
||||||
XObjArrayNC<TYPE>::Empty();
|
XObjArrayNC<TYPE>::Empty();
|
||||||
CheckSize(anObjArray.Length(), 0);
|
CheckSize(anObjArray.Length(), 0);
|
||||||
for ( ui=0 ; ui<anObjArray.Length() ; ui+=1 ) AddCopy(anObjArray.ElementAt(ui));
|
for ( ui=0 ; ui<anObjArray.size() ; ui+=1 ) AddCopy(anObjArray.ElementAt(ui));
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -212,7 +213,7 @@ template<class TYPE>
|
|||||||
const TYPE &XObjArrayNC<TYPE>::ElementAt(xsize index) const
|
const TYPE &XObjArrayNC<TYPE>::ElementAt(xsize index) const
|
||||||
{
|
{
|
||||||
if ( index >= _Len ) {
|
if ( index >= _Len ) {
|
||||||
DebugLog(2, "XObjArray<TYPE>::ElementAt(xsize) -> operator [] - index (%d) greater than length (%d)\n", index, _Len);
|
DebugLog(2, "XObjArray<TYPE>::ElementAt(xsize) const -> operator [] - index (%d) greater than length (%d)\n", index, _Len);
|
||||||
CpuDeadLoop();
|
CpuDeadLoop();
|
||||||
}
|
}
|
||||||
return *((TYPE *)(_Data[index].Object));
|
return *((TYPE *)(_Data[index].Object));
|
||||||
|
@ -42,10 +42,10 @@ XStringW XStringWArray::ConcatAll(XStringW Separator, XStringW Prefix, XStringW
|
|||||||
xsize i;
|
xsize i;
|
||||||
XStringW s;
|
XStringW s;
|
||||||
|
|
||||||
if ( Length() > 0 ) {
|
if ( size() > 0 ) {
|
||||||
s = Prefix;
|
s = Prefix;
|
||||||
s += ElementAt(0);
|
s += ElementAt(0);
|
||||||
for ( i=1 ; i<Length() ; i+=1 ) {
|
for ( i=1 ; i<size() ; i+=1 ) {
|
||||||
s += Separator;
|
s += Separator;
|
||||||
s += ElementAt(i);
|
s += ElementAt(i);
|
||||||
}
|
}
|
||||||
@ -58,8 +58,8 @@ bool XStringWArray::Equal(const XStringWArray &aStrings) const
|
|||||||
{
|
{
|
||||||
xsize ui;
|
xsize ui;
|
||||||
|
|
||||||
if ( Length() != aStrings.Length() ) return false;
|
if ( size() != aStrings.size() ) return false;
|
||||||
for ( ui=0 ; ui<Length() ; ui+=1 ) {
|
for ( ui=0 ; ui<size() ; ui+=1 ) {
|
||||||
if ( ElementAt(ui) != aStrings[ui] ) return false;
|
if ( ElementAt(ui) != aStrings[ui] ) return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@ -69,10 +69,10 @@ bool XStringWArray::Same(const XStringWArray &aStrings) const
|
|||||||
{
|
{
|
||||||
xsize i;
|
xsize i;
|
||||||
|
|
||||||
for ( i=0 ; i<Length() ; i+=1 ) {
|
for ( i=0 ; i<size() ; i+=1 ) {
|
||||||
if ( !aStrings.Contains(ElementAt(i)) ) return false;
|
if ( !aStrings.Contains(ElementAt(i)) ) return false;
|
||||||
}
|
}
|
||||||
for ( i=0 ; i<aStrings.Length() ; i+=1 ) {
|
for ( i=0 ; i<aStrings.size() ; i+=1 ) {
|
||||||
if ( !Contains(aStrings.ElementAt(i)) ) return false;
|
if ( !Contains(aStrings.ElementAt(i)) ) return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@ -82,7 +82,7 @@ bool XStringWArray::Contains(const XStringW &S) const
|
|||||||
{
|
{
|
||||||
xsize i;
|
xsize i;
|
||||||
|
|
||||||
for ( i=0 ; i<Length() ; i+=1 ) {
|
for ( i=0 ; i<size() ; i+=1 ) {
|
||||||
if ( ElementAt(i) == S ) return true;
|
if ( ElementAt(i) == S ) return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -95,7 +95,7 @@ void XStringWArray::Add(const XStringWArray &aStrings)
|
|||||||
{
|
{
|
||||||
xsize i;
|
xsize i;
|
||||||
|
|
||||||
for ( i=0 ; i<aStrings.Length() ; i+=1 ) {
|
for ( i=0 ; i<aStrings.size() ; i+=1 ) {
|
||||||
AddCopy(aStrings[i]);
|
AddCopy(aStrings[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -109,7 +109,7 @@ void XStringWArray::AddID(const XStringWArray &aStrings)
|
|||||||
{
|
{
|
||||||
xsize i;
|
xsize i;
|
||||||
|
|
||||||
for ( i=0 ; i<aStrings.Length() ; i+=1 ) {
|
for ( i=0 ; i<aStrings.size() ; i+=1 ) {
|
||||||
if ( !Contains(aStrings[i]) ) AddCopy(aStrings[i]);
|
if ( !Contains(aStrings[i]) ) AddCopy(aStrings[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -23,8 +23,8 @@ class XStringWArray : public XStringWArraySuper
|
|||||||
|
|
||||||
|
|
||||||
void SetNull() { Empty(); }
|
void SetNull() { Empty(); }
|
||||||
bool IsNull() const { return Length() == 0 ; }
|
bool IsNull() const { return size() == 0 ; }
|
||||||
bool NotNull() const { return Length() > 0 ; }
|
bool NotNull() const { return size() > 0 ; }
|
||||||
|
|
||||||
XStringW ConcatAll(XStringW Separator = L", ", XStringW Prefix = L"", XStringW Suffix = L"") const;
|
XStringW ConcatAll(XStringW Separator = L", ", XStringW Prefix = L"", XStringW Suffix = L"") const;
|
||||||
|
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
#ifndef __XTOOLSCOMMON_H__
|
#ifndef __XTOOLSCOMMON_H__
|
||||||
#define __XTOOLSCOMMON_H__
|
#define __XTOOLSCOMMON_H__
|
||||||
|
|
||||||
#include <Platform.h>
|
|
||||||
|
|
||||||
#define xsize UINTN
|
#define xsize UINTN
|
||||||
#define MAX_XSIZE MAX_UINTN
|
#define MAX_XSIZE MAX_UINTN
|
||||||
@ -14,8 +13,24 @@ extern xsize XBufferGrowByDefault;
|
|||||||
*/
|
*/
|
||||||
#define __XTOOLS_INT_CHECK__
|
#define __XTOOLS_INT_CHECK__
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
#include <Library/BaseLib.h> // for CpuDeadLoop
|
||||||
|
#include <Library/MemoryAllocationLib.h>
|
||||||
|
#include <Library/BaseMemoryLib.h> // for CopyMen
|
||||||
|
}
|
||||||
#define Xalloc(AllocationSize) AllocatePool(AllocationSize)
|
#define Xalloc(AllocationSize) AllocatePool(AllocationSize)
|
||||||
#define Xrealloc(OldSize, NewSize, OldBuffer) ReallocatePool(OldSize, NewSize, OldBuffer)
|
#define Xrealloc(OldSize, NewSize, OldBuffer) ReallocatePool(OldSize, NewSize, OldBuffer)
|
||||||
#define Xfree(Buffer) FreePool(Buffer)
|
#define Xfree(Buffer) FreePool(Buffer)
|
||||||
#define Xmemmove(dest,source,count) CopyMem(dest, (void*)(source), count) // that has to handle overlapping memory (prefer memmove to memcpy).
|
#define Xmemmove(dest,source,count) CopyMem(dest, (void*)(source), count) // that has to handle overlapping memory (prefer memmove to memcpy).
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Declare here instead of include to avoid circular dependancy.
|
||||||
|
VOID
|
||||||
|
EFIAPI
|
||||||
|
DebugLog (
|
||||||
|
IN INTN DebugMode,
|
||||||
|
IN CONST CHAR8 *FormatString, ...);
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -54,13 +54,13 @@ int XStringWArray_tests()
|
|||||||
if ( !array1.Same(array2) ) return 41; // Arrays are the same
|
if ( !array1.Same(array2) ) return 41; // Arrays are the same
|
||||||
|
|
||||||
array1.AddNoNull(L"3");
|
array1.AddNoNull(L"3");
|
||||||
if ( array1.Length() != 3 ) return 50;
|
if ( array1.size() != 3 ) return 50;
|
||||||
array1.AddNoNull(L"");
|
array1.AddNoNull(L"");
|
||||||
if ( array1.Length() != 3 ) return 51;
|
if ( array1.size() != 3 ) return 51;
|
||||||
array1.AddEvenNull(XStringW());
|
array1.AddEvenNull(XStringW());
|
||||||
if ( array1.Length() != 4 ) return 52;
|
if ( array1.size() != 4 ) return 52;
|
||||||
array1.AddID(L"2");
|
array1.AddID(L"2");
|
||||||
if ( array1.Length() != 4 ) return 53;
|
if ( array1.size() != 4 ) return 53;
|
||||||
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -441,15 +441,15 @@ BOOLEAN AskUserForFilePathFromVolumes(IN CHAR16 *Title OPTIONAL, OUT EFI_DEVICE_
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
// Allocate entries
|
// Allocate entries
|
||||||
Entries = (REFIT_MENU_ENTRY **)AllocateZeroPool(sizeof(REFIT_MENU_ENTRY *) + ((sizeof(REFIT_MENU_ENTRY *) + sizeof(REFIT_MENU_ENTRY)) * VolumesCount));
|
Entries = (REFIT_MENU_ENTRY **)AllocateZeroPool(sizeof(REFIT_MENU_ENTRY *) + ((sizeof(REFIT_MENU_ENTRY *) + sizeof(REFIT_MENU_ENTRY)) * Volumes.size()));
|
||||||
if (Entries == NULL) {
|
if (Entries == NULL) {
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
EntryPtr = (REFIT_MENU_ENTRY *)(Entries + (VolumesCount + 1));
|
EntryPtr = (REFIT_MENU_ENTRY *)(Entries + (Volumes.size() + 1));
|
||||||
// Create volume entries
|
// Create volume entries
|
||||||
for (Index = 0; Index < VolumesCount; ++Index) {
|
for (Index = 0; Index < Volumes.size(); ++Index) {
|
||||||
REFIT_MENU_ENTRY *Entry;
|
REFIT_MENU_ENTRY *Entry;
|
||||||
REFIT_VOLUME *Volume = Volumes[Index];
|
REFIT_VOLUME *Volume = &Volumes[Index];
|
||||||
if ((Volume == NULL) || (Volume->RootDir == NULL) ||
|
if ((Volume == NULL) || (Volume->RootDir == NULL) ||
|
||||||
((Volume->DevicePathString == NULL) && (Volume->VolName == NULL))) {
|
((Volume->DevicePathString == NULL) && (Volume->VolName == NULL))) {
|
||||||
continue;
|
continue;
|
||||||
@ -474,9 +474,9 @@ BOOLEAN AskUserForFilePathFromVolumes(IN CHAR16 *Title OPTIONAL, OUT EFI_DEVICE_
|
|||||||
((MenuExit == MENU_EXIT_ENTER) || (MenuExit == MENU_EXIT_DETAILS))) {
|
((MenuExit == MENU_EXIT_ENTER) || (MenuExit == MENU_EXIT_DETAILS))) {
|
||||||
if (ChosenEntry->Tag >= TAG_OFFSET) {
|
if (ChosenEntry->Tag >= TAG_OFFSET) {
|
||||||
Index = (ChosenEntry->Tag - TAG_OFFSET);
|
Index = (ChosenEntry->Tag - TAG_OFFSET);
|
||||||
if (Index < VolumesCount) {
|
if (Index < Volumes.size()) {
|
||||||
// Run directory chooser menu
|
// Run directory chooser menu
|
||||||
if (!AskUserForFilePathFromDir(Title, Volumes[Index], NULL, Volumes[Index]->RootDir, Result)) {
|
if (!AskUserForFilePathFromDir(Title, &Volumes[Index], NULL, Volumes[Index].RootDir, Result)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
Responded = TRUE;
|
Responded = TRUE;
|
||||||
@ -502,8 +502,8 @@ BOOLEAN AskUserForFilePath(IN CHAR16 *Title OPTIONAL, IN EFI_DEVICE_PATH_PROTOCO
|
|||||||
if (DevicePathStr != NULL) {
|
if (DevicePathStr != NULL) {
|
||||||
UINTN Index = 0;
|
UINTN Index = 0;
|
||||||
// Check the volumes for a match
|
// Check the volumes for a match
|
||||||
for (Index = 0; Index < VolumesCount; ++Index) {
|
for (Index = 0; Index < Volumes.size(); ++Index) {
|
||||||
REFIT_VOLUME *Volume = Volumes[Index];
|
REFIT_VOLUME *Volume = &Volumes[Index];
|
||||||
UINTN Length;
|
UINTN Length;
|
||||||
if ((Volume == NULL) || (Volume->RootDir == NULL) ||
|
if ((Volume == NULL) || (Volume->RootDir == NULL) ||
|
||||||
(Volume->DevicePathString == NULL)) {
|
(Volume->DevicePathString == NULL)) {
|
||||||
|
@ -185,8 +185,8 @@ VOID ScanLegacy(VOID)
|
|||||||
|
|
||||||
DBG("Scanning legacy ...\n");
|
DBG("Scanning legacy ...\n");
|
||||||
|
|
||||||
for (VolumeIndex = 0; VolumeIndex < VolumesCount; VolumeIndex++) {
|
for (VolumeIndex = 0; VolumeIndex < Volumes.size(); VolumeIndex++) {
|
||||||
Volume = Volumes[VolumeIndex];
|
Volume = &Volumes[VolumeIndex];
|
||||||
if ((Volume->BootType != BOOTING_BY_PBR) &&
|
if ((Volume->BootType != BOOTING_BY_PBR) &&
|
||||||
(Volume->BootType != BOOTING_BY_MBR) &&
|
(Volume->BootType != BOOTING_BY_MBR) &&
|
||||||
(Volume->BootType != BOOTING_BY_CD)) {
|
(Volume->BootType != BOOTING_BY_CD)) {
|
||||||
@ -232,10 +232,10 @@ VOID ScanLegacy(VOID)
|
|||||||
if (HideIfOthersFound) {
|
if (HideIfOthersFound) {
|
||||||
// check for other bootable entries on the same disk
|
// check for other bootable entries on the same disk
|
||||||
//if PBR exists then Hide MBR
|
//if PBR exists then Hide MBR
|
||||||
for (VolumeIndex2 = 0; VolumeIndex2 < VolumesCount; VolumeIndex2++) {
|
for (VolumeIndex2 = 0; VolumeIndex2 < Volumes.size(); VolumeIndex2++) {
|
||||||
if (VolumeIndex2 != VolumeIndex &&
|
if (VolumeIndex2 != VolumeIndex &&
|
||||||
Volumes[VolumeIndex2]->HasBootCode &&
|
Volumes[VolumeIndex2].HasBootCode &&
|
||||||
Volumes[VolumeIndex2]->WholeDiskBlockIO == Volume->BlockIO){
|
Volumes[VolumeIndex2].WholeDiskBlockIO == Volume->BlockIO){
|
||||||
ShowVolume = FALSE;
|
ShowVolume = FALSE;
|
||||||
// DBG("PBR volume at index %d\n", VolumeIndex2);
|
// DBG("PBR volume at index %d\n", VolumeIndex2);
|
||||||
break;
|
break;
|
||||||
@ -280,8 +280,8 @@ VOID AddCustomLegacy(VOID)
|
|||||||
if (Custom->Volume) {
|
if (Custom->Volume) {
|
||||||
DBG("Custom legacy %d matching \"%s\" ...\n", i, Custom->Volume);
|
DBG("Custom legacy %d matching \"%s\" ...\n", i, Custom->Volume);
|
||||||
}
|
}
|
||||||
for (VolumeIndex = 0; VolumeIndex < VolumesCount; ++VolumeIndex) {
|
for (VolumeIndex = 0; VolumeIndex < Volumes.size(); ++VolumeIndex) {
|
||||||
Volume = Volumes[VolumeIndex];
|
Volume = &Volumes[VolumeIndex];
|
||||||
|
|
||||||
DBG(" Checking volume \"%s\" (%s) ... ", Volume->VolName, Volume->DevicePathString);
|
DBG(" Checking volume \"%s\" (%s) ... ", Volume->VolName, Volume->DevicePathString);
|
||||||
|
|
||||||
@ -327,10 +327,10 @@ VOID AddCustomLegacy(VOID)
|
|||||||
if (HideIfOthersFound) {
|
if (HideIfOthersFound) {
|
||||||
// check for other bootable entries on the same disk
|
// check for other bootable entries on the same disk
|
||||||
//if PBR exists then Hide MBR
|
//if PBR exists then Hide MBR
|
||||||
for (VolumeIndex2 = 0; VolumeIndex2 < VolumesCount; VolumeIndex2++) {
|
for (VolumeIndex2 = 0; VolumeIndex2 < Volumes.size(); VolumeIndex2++) {
|
||||||
if (VolumeIndex2 != VolumeIndex &&
|
if (VolumeIndex2 != VolumeIndex &&
|
||||||
Volumes[VolumeIndex2]->HasBootCode &&
|
Volumes[VolumeIndex2].HasBootCode &&
|
||||||
Volumes[VolumeIndex2]->WholeDiskBlockIO == Volume->BlockIO) {
|
Volumes[VolumeIndex2].WholeDiskBlockIO == Volume->BlockIO) {
|
||||||
ShowVolume = FALSE;
|
ShowVolume = FALSE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -342,8 +342,8 @@ STATIC BOOLEAN isFirstRootUUID(REFIT_VOLUME *Volume)
|
|||||||
UINTN VolumeIndex;
|
UINTN VolumeIndex;
|
||||||
REFIT_VOLUME *scanedVolume;
|
REFIT_VOLUME *scanedVolume;
|
||||||
|
|
||||||
for (VolumeIndex = 0; VolumeIndex < VolumesCount; VolumeIndex++) {
|
for (VolumeIndex = 0; VolumeIndex < Volumes.size(); VolumeIndex++) {
|
||||||
scanedVolume = Volumes[VolumeIndex];
|
scanedVolume = &Volumes[VolumeIndex];
|
||||||
|
|
||||||
if (scanedVolume == Volume)
|
if (scanedVolume == Volume)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
@ -1075,8 +1075,8 @@ VOID ScanLoader(VOID)
|
|||||||
//DBG("Scanning loaders...\n");
|
//DBG("Scanning loaders...\n");
|
||||||
DbgHeader("ScanLoader");
|
DbgHeader("ScanLoader");
|
||||||
|
|
||||||
for (VolumeIndex = 0; VolumeIndex < VolumesCount; VolumeIndex++) {
|
for (VolumeIndex = 0; VolumeIndex < Volumes.size(); VolumeIndex++) {
|
||||||
Volume = Volumes[VolumeIndex];
|
Volume = &Volumes[VolumeIndex];
|
||||||
if (Volume->RootDir == NULL) { // || Volume->VolName == NULL)
|
if (Volume->RootDir == NULL) { // || Volume->VolName == NULL)
|
||||||
//DBG(", no file system\n", VolumeIndex);
|
//DBG(", no file system\n", VolumeIndex);
|
||||||
continue;
|
continue;
|
||||||
@ -1541,14 +1541,14 @@ STATIC VOID AddCustomEntry(IN UINTN CustomIndex,
|
|||||||
DBG("all volumes\n");
|
DBG("all volumes\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
for (VolumeIndex = 0; VolumeIndex < VolumesCount; ++VolumeIndex) {
|
for (VolumeIndex = 0; VolumeIndex < Volumes.size(); ++VolumeIndex) {
|
||||||
CUSTOM_LOADER_ENTRY *CustomSubEntry;
|
CUSTOM_LOADER_ENTRY *CustomSubEntry;
|
||||||
LOADER_ENTRY *Entry = NULL;
|
LOADER_ENTRY *Entry = NULL;
|
||||||
EG_IMAGE *Image, *DriveImage;
|
EG_IMAGE *Image, *DriveImage;
|
||||||
EFI_GUID *Guid = NULL;
|
EFI_GUID *Guid = NULL;
|
||||||
UINT64 VolumeSize;
|
UINT64 VolumeSize;
|
||||||
|
|
||||||
Volume = Volumes[VolumeIndex];
|
Volume = &Volumes[VolumeIndex];
|
||||||
if ((Volume == NULL) || (Volume->RootDir == NULL)) {
|
if ((Volume == NULL) || (Volume->RootDir == NULL)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -205,8 +205,8 @@ VOID ScanTool(VOID)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// if (!gFirmwareClover) { //Slice: I wish to extend functionality on emulated nvram
|
// if (!gFirmwareClover) { //Slice: I wish to extend functionality on emulated nvram
|
||||||
for (VolumeIndex = 0; VolumeIndex < VolumesCount; VolumeIndex++) {
|
for (VolumeIndex = 0; VolumeIndex < Volumes.size(); VolumeIndex++) {
|
||||||
Volume = Volumes[VolumeIndex];
|
Volume = &Volumes[VolumeIndex];
|
||||||
if (!Volume->RootDir || !Volume->DeviceHandle) {
|
if (!Volume->RootDir || !Volume->DeviceHandle) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -258,8 +258,8 @@ VOID AddCustomTool(VOID)
|
|||||||
if (Custom->Volume) {
|
if (Custom->Volume) {
|
||||||
DBG("Custom tool %d matching \"%s\" ...\n", i, Custom->Volume);
|
DBG("Custom tool %d matching \"%s\" ...\n", i, Custom->Volume);
|
||||||
}
|
}
|
||||||
for (VolumeIndex = 0; VolumeIndex < VolumesCount; ++VolumeIndex) {
|
for (VolumeIndex = 0; VolumeIndex < Volumes.size(); ++VolumeIndex) {
|
||||||
Volume = Volumes[VolumeIndex];
|
Volume = &Volumes[VolumeIndex];
|
||||||
|
|
||||||
DBG(" Checking volume \"%s\" (%s) ... ", Volume->VolName, Volume->DevicePathString);
|
DBG(" Checking volume \"%s\" (%s) ... ", Volume->VolName, Volume->DevicePathString);
|
||||||
|
|
||||||
|
@ -13,19 +13,49 @@ XImage::XImage(UINTN W, UINTN H)
|
|||||||
Height = H;
|
Height = H;
|
||||||
PixelData.CheckSize(GetWidth()*GetHeight());
|
PixelData.CheckSize(GetWidth()*GetHeight());
|
||||||
}
|
}
|
||||||
#if 0
|
#if 1
|
||||||
UINT8 Smooth(UINT8* P, int a01, int a10, int a11, int a21, int a12, int dx, int dy, float scale)
|
UINT8 Smooth(const UINT8* p, int a01, int a10, int a21, int a12, int dx, int dy, float scale)
|
||||||
{
|
{
|
||||||
return (UINT8)((*(p + a01) * (scale - dx) * 3 + *(p + a10) * (scale - dy) * 3 + *(p + a21) * dx * 3 +
|
return (UINT8)((*(p + a01) * (scale - dx) * 3.f + *(p + a10) * (scale - dy) * 3.f + *(p + a21) * dx * 3.f +
|
||||||
*(p + a12) * dy * 3 + *(p + a11) * 2 *scale) / (scale * 8));
|
*(p + a12) * dy * 3.f + *(p) * 2.f *scale) / (scale * 8.f));
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
XImage::XImage(const XImage& Image, float scale)
|
XImage::XImage(const XImage& Image, float scale)
|
||||||
{
|
{
|
||||||
Width = (UINTN)(Image.GetWidth() * scale);
|
int SrcWidth = Image.GetWidth();
|
||||||
Height = (UINTN)(Image.GetHeight() * scale);
|
int SrcHeight = Image.GetHeight();
|
||||||
|
Width = (UINTN)(SrcWidth * scale);
|
||||||
|
Height = (UINTN)(SrcHeight * scale);
|
||||||
PixelData.CheckSize(GetWidth()*GetHeight());
|
PixelData.CheckSize(GetWidth()*GetHeight());
|
||||||
|
if (scale < 1.e-4) return;
|
||||||
|
|
||||||
|
int Pixel = sizeof(EFI_GRAPHICS_OUTPUT_BLT_PIXEL);
|
||||||
|
int Row = SrcWidth * sizeof(EFI_GRAPHICS_OUTPUT_BLT_PIXEL);
|
||||||
|
|
||||||
|
const XArray<EFI_GRAPHICS_OUTPUT_BLT_PIXEL>& Source = Image.GetData();
|
||||||
|
|
||||||
|
for (size_t y = 0; y < Height; y++)
|
||||||
|
{
|
||||||
|
int ly = (int)(y / scale);
|
||||||
|
int dy = (int)(y - ly * scale);
|
||||||
|
for (size_t x = 0; x < Width; x++)
|
||||||
|
{
|
||||||
|
int lx = (int)(x / scale);
|
||||||
|
int dx = (int)(x - lx * scale);
|
||||||
|
int a01 = (x == 0) ? 0 : -Pixel;
|
||||||
|
int a10 = (y == 0) ? 0 : -Row;
|
||||||
|
int a21 = (x == Width - 1) ? 0 : Pixel;
|
||||||
|
int a12 = (y == Height - 1) ? 0 : Row;
|
||||||
|
EFI_GRAPHICS_OUTPUT_BLT_PIXEL& dst = *GetPixelPtr(x, y);
|
||||||
|
dst.Blue = Smooth(&Source[lx + ly * SrcWidth].Blue, a01, a10, a21, a12, dx, dy, scale);
|
||||||
|
dst.Green = Smooth(&Source[lx + ly * SrcWidth].Green, a01, a10, a21, a12, dx, dy, scale);
|
||||||
|
dst.Red = Smooth(&Source[lx + ly * SrcWidth].Red, a01, a10, a21, a12, dx, dy, scale);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
UINTN Offset = OFFSET_OF(EFI_GRAPHICS_OUTPUT_BLT_PIXEL, Blue);
|
UINTN Offset = OFFSET_OF(EFI_GRAPHICS_OUTPUT_BLT_PIXEL, Blue);
|
||||||
|
|
||||||
@ -86,7 +116,7 @@ do { \
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
|
||||||
|
|
||||||
XImage::~XImage()
|
XImage::~XImage()
|
||||||
{
|
{
|
||||||
@ -260,7 +290,7 @@ void XImage::GetArea(UINTN x, UINTN y, UINTN W, UINTN H)
|
|||||||
UINT32 ScreenHeight = 0;
|
UINT32 ScreenHeight = 0;
|
||||||
UINT32 Depth = 0;
|
UINT32 Depth = 0;
|
||||||
UINT32 RefreshRate = 60;
|
UINT32 RefreshRate = 60;
|
||||||
EFI_STATUS Status = UgaDraw->GetMode(UgaDraw, &LineWidth, &ScreenHeight, &Depth, &RefreshRate);
|
Status = UgaDraw->GetMode(UgaDraw, &LineWidth, &ScreenHeight, &Depth, &RefreshRate);
|
||||||
if (EFI_ERROR(Status)) {
|
if (EFI_ERROR(Status)) {
|
||||||
return; // graphics not available
|
return; // graphics not available
|
||||||
}
|
}
|
||||||
@ -277,10 +307,10 @@ void XImage::GetArea(UINTN x, UINTN y, UINTN W, UINTN H)
|
|||||||
void XImage::Draw(int x, int y, float scale)
|
void XImage::Draw(int x, int y, float scale)
|
||||||
{
|
{
|
||||||
//prepare images
|
//prepare images
|
||||||
INTN UGAWidth = 0;
|
INTN ScreenWidth = 0;
|
||||||
INTN UGAHeight = 0;
|
INTN ScreenHeight = 0;
|
||||||
egGetScreenSize(&UGAWidth, &UGAHeight);
|
egGetScreenSize(&ScreenWidth, &ScreenHeight);
|
||||||
XImage Background(UGAWidth, UGAHeight);
|
XImage Background(ScreenWidth, ScreenHeight);
|
||||||
Background.GetArea(x, y, Width, Height);
|
Background.GetArea(x, y, Width, Height);
|
||||||
XImage Top(*this, scale);
|
XImage Top(*this, scale);
|
||||||
Background.Compose(x, y, Top, true);
|
Background.Compose(x, y, Top, true);
|
||||||
|
@ -248,6 +248,9 @@ About uivector, ucvector and string:
|
|||||||
-They're not used in the interface, only internally in this file as static functions.
|
-They're not used in the interface, only internally in this file as static functions.
|
||||||
-As with many other structs in this file, the init and cleanup functions serve as ctor and dtor.
|
-As with many other structs in this file, the init and cleanup functions serve as ctor and dtor.
|
||||||
*/
|
*/
|
||||||
|
/*
|
||||||
|
Replaced std::vector by XArray
|
||||||
|
*/
|
||||||
|
|
||||||
#ifdef LODEPNG_COMPILE_ZLIB
|
#ifdef LODEPNG_COMPILE_ZLIB
|
||||||
/*dynamic vector of unsigned ints*/
|
/*dynamic vector of unsigned ints*/
|
||||||
@ -5855,7 +5858,7 @@ unsigned lodepng_encode(unsigned char** out, size_t* outsize,
|
|||||||
unsigned alread_added_id_text = 0;
|
unsigned alread_added_id_text = 0;
|
||||||
for(i = 0; i != info.text_num; ++i)
|
for(i = 0; i != info.text_num; ++i)
|
||||||
{
|
{
|
||||||
if(!strcmp(info.text_keys[i], "LodePNG"))
|
if(!AsciiStrCmp(info.text_keys[i], "LodePNG"))
|
||||||
{
|
{
|
||||||
alread_added_id_text = 1;
|
alread_added_id_text = 1;
|
||||||
break;
|
break;
|
||||||
@ -6086,7 +6089,7 @@ namespace lodepng
|
|||||||
{
|
{
|
||||||
|
|
||||||
#ifdef LODEPNG_COMPILE_DISK
|
#ifdef LODEPNG_COMPILE_DISK
|
||||||
unsigned load_file(std::vector<unsigned char>& buffer, const std::string& filename)
|
unsigned load_file(XArray<unsigned char>& buffer, const std::string& filename)
|
||||||
{
|
{
|
||||||
long size = lodepng_filesize(filename.c_str());
|
long size = lodepng_filesize(filename.c_str());
|
||||||
if(size < 0) return 78;
|
if(size < 0) return 78;
|
||||||
@ -6095,15 +6098,15 @@ unsigned load_file(std::vector<unsigned char>& buffer, const std::string& filena
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*write given buffer to the file, overwriting the file, it doesn't append to it.*/
|
/*write given buffer to the file, overwriting the file, it doesn't append to it.*/
|
||||||
unsigned save_file(const std::vector<unsigned char>& buffer, const std::string& filename)
|
unsigned save_file(const XArray<unsigned char>& buffer, const std::string& filename)
|
||||||
{
|
{
|
||||||
return lodepng_save_file(buffer.empty() ? 0 : &buffer[0], buffer.size(), filename.c_str());
|
return lodepng_save_file(buffer.isEmpty() ? 0 : &buffer[0], buffer.size(), filename.c_str());
|
||||||
}
|
}
|
||||||
#endif /* LODEPNG_COMPILE_DISK */
|
#endif /* LODEPNG_COMPILE_DISK */
|
||||||
|
|
||||||
#ifdef LODEPNG_COMPILE_ZLIB
|
#ifdef LODEPNG_COMPILE_ZLIB
|
||||||
#ifdef LODEPNG_COMPILE_DECODER
|
#ifdef LODEPNG_COMPILE_DECODER
|
||||||
unsigned decompress(std::vector<unsigned char>& out, const unsigned char* in, size_t insize,
|
unsigned decompress(XArray<unsigned char>& out, const unsigned char* in, size_t insize,
|
||||||
const LodePNGDecompressSettings& settings)
|
const LodePNGDecompressSettings& settings)
|
||||||
{
|
{
|
||||||
unsigned char* buffer = 0;
|
unsigned char* buffer = 0;
|
||||||
@ -6111,21 +6114,22 @@ unsigned decompress(std::vector<unsigned char>& out, const unsigned char* in, si
|
|||||||
unsigned error = zlib_decompress(&buffer, &buffersize, in, insize, &settings);
|
unsigned error = zlib_decompress(&buffer, &buffersize, in, insize, &settings);
|
||||||
if(buffer)
|
if(buffer)
|
||||||
{
|
{
|
||||||
out.insert(out.end(), &buffer[0], &buffer[buffersize]);
|
// out.insert(out.end(), &buffer[0], &buffer[buffersize]);
|
||||||
|
out.AddArray(buffer, buffersize);
|
||||||
lodepng_free(buffer);
|
lodepng_free(buffer);
|
||||||
}
|
}
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned decompress(std::vector<unsigned char>& out, const std::vector<unsigned char>& in,
|
unsigned decompress(XArray<unsigned char>& out, const XArray<unsigned char>& in,
|
||||||
const LodePNGDecompressSettings& settings)
|
const LodePNGDecompressSettings& settings)
|
||||||
{
|
{
|
||||||
return decompress(out, in.empty() ? 0 : &in[0], in.size(), settings);
|
return decompress(out, in.isEmpty() ? 0 : &in[0], in.size(), settings);
|
||||||
}
|
}
|
||||||
#endif /* LODEPNG_COMPILE_DECODER */
|
#endif /* LODEPNG_COMPILE_DECODER */
|
||||||
|
|
||||||
#ifdef LODEPNG_COMPILE_ENCODER
|
#ifdef LODEPNG_COMPILE_ENCODER
|
||||||
unsigned compress(std::vector<unsigned char>& out, const unsigned char* in, size_t insize,
|
unsigned compress(XArray<unsigned char>& out, const unsigned char* in, size_t insize,
|
||||||
const LodePNGCompressSettings& settings)
|
const LodePNGCompressSettings& settings)
|
||||||
{
|
{
|
||||||
unsigned char* buffer = 0;
|
unsigned char* buffer = 0;
|
||||||
@ -6133,16 +6137,17 @@ unsigned compress(std::vector<unsigned char>& out, const unsigned char* in, size
|
|||||||
unsigned error = zlib_compress(&buffer, &buffersize, in, insize, &settings);
|
unsigned error = zlib_compress(&buffer, &buffersize, in, insize, &settings);
|
||||||
if(buffer)
|
if(buffer)
|
||||||
{
|
{
|
||||||
out.insert(out.end(), &buffer[0], &buffer[buffersize]);
|
// out.insert(out.end(), &buffer[0], &buffer[buffersize]);
|
||||||
|
out.AddArray(buffer, buffersize);
|
||||||
lodepng_free(buffer);
|
lodepng_free(buffer);
|
||||||
}
|
}
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned compress(std::vector<unsigned char>& out, const std::vector<unsigned char>& in,
|
unsigned compress(XArray<unsigned char>& out, const XArray<unsigned char>& in,
|
||||||
const LodePNGCompressSettings& settings)
|
const LodePNGCompressSettings& settings)
|
||||||
{
|
{
|
||||||
return compress(out, in.empty() ? 0 : &in[0], in.size(), settings);
|
return compress(out, in.isEmpty() ? 0 : &in[0], in.size(), settings);
|
||||||
}
|
}
|
||||||
#endif /* LODEPNG_COMPILE_ENCODER */
|
#endif /* LODEPNG_COMPILE_ENCODER */
|
||||||
#endif /* LODEPNG_COMPILE_ZLIB */
|
#endif /* LODEPNG_COMPILE_ZLIB */
|
||||||
@ -6174,7 +6179,7 @@ State& State::operator=(const State& other)
|
|||||||
|
|
||||||
#ifdef LODEPNG_COMPILE_DECODER
|
#ifdef LODEPNG_COMPILE_DECODER
|
||||||
|
|
||||||
unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h, const unsigned char* in,
|
unsigned decode(XArray<unsigned char>& out, unsigned& w, unsigned& h, const unsigned char* in,
|
||||||
size_t insize, LodePNGColorType colortype, unsigned bitdepth)
|
size_t insize, LodePNGColorType colortype, unsigned bitdepth)
|
||||||
{
|
{
|
||||||
unsigned char* buffer;
|
unsigned char* buffer;
|
||||||
@ -6185,19 +6190,20 @@ unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h, const
|
|||||||
state.info_raw.colortype = colortype;
|
state.info_raw.colortype = colortype;
|
||||||
state.info_raw.bitdepth = bitdepth;
|
state.info_raw.bitdepth = bitdepth;
|
||||||
size_t buffersize = lodepng_get_raw_size(w, h, &state.info_raw);
|
size_t buffersize = lodepng_get_raw_size(w, h, &state.info_raw);
|
||||||
out.insert(out.end(), &buffer[0], &buffer[buffersize]);
|
// out.insert(out.end(), &buffer[0], &buffer[buffersize]);
|
||||||
|
out.AddArray(buffer, buffersize);
|
||||||
lodepng_free(buffer);
|
lodepng_free(buffer);
|
||||||
}
|
}
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,
|
unsigned decode(XArray<unsigned char>& out, unsigned& w, unsigned& h,
|
||||||
const std::vector<unsigned char>& in, LodePNGColorType colortype, unsigned bitdepth)
|
const XArray<unsigned char>& in, LodePNGColorType colortype, unsigned bitdepth)
|
||||||
{
|
{
|
||||||
return decode(out, w, h, in.empty() ? 0 : &in[0], (unsigned)in.size(), colortype, bitdepth);
|
return decode(out, w, h, in.isEmpty() ? 0 : &in[0], (unsigned)in.size(), colortype, bitdepth);
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,
|
unsigned decode(XArray<unsigned char>& out, unsigned& w, unsigned& h,
|
||||||
State& state,
|
State& state,
|
||||||
const unsigned char* in, size_t insize)
|
const unsigned char* in, size_t insize)
|
||||||
{
|
{
|
||||||
@ -6206,24 +6212,25 @@ unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,
|
|||||||
if(buffer && !error)
|
if(buffer && !error)
|
||||||
{
|
{
|
||||||
size_t buffersize = lodepng_get_raw_size(w, h, &state.info_raw);
|
size_t buffersize = lodepng_get_raw_size(w, h, &state.info_raw);
|
||||||
out.insert(out.end(), &buffer[0], &buffer[buffersize]);
|
// out.insert(out.end(), &buffer[0], &buffer[buffersize]);
|
||||||
|
out.AddArray(buffer, buffersize);
|
||||||
}
|
}
|
||||||
lodepng_free(buffer);
|
lodepng_free(buffer);
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,
|
unsigned decode(XArray<unsigned char>& out, unsigned& w, unsigned& h,
|
||||||
State& state,
|
State& state,
|
||||||
const std::vector<unsigned char>& in)
|
const XArray<unsigned char>& in)
|
||||||
{
|
{
|
||||||
return decode(out, w, h, state, in.empty() ? 0 : &in[0], in.size());
|
return decode(out, w, h, state, in.isEmpty() ? 0 : &in[0], in.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef LODEPNG_COMPILE_DISK
|
#ifdef LODEPNG_COMPILE_DISK
|
||||||
unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h, const std::string& filename,
|
unsigned decode(XArray<unsigned char>& out, unsigned& w, unsigned& h, const std::string& filename,
|
||||||
LodePNGColorType colortype, unsigned bitdepth)
|
LodePNGColorType colortype, unsigned bitdepth)
|
||||||
{
|
{
|
||||||
std::vector<unsigned char> buffer;
|
XArray<unsigned char> buffer;
|
||||||
unsigned error = load_file(buffer, filename);
|
unsigned error = load_file(buffer, filename);
|
||||||
if(error) return error;
|
if(error) return error;
|
||||||
return decode(out, w, h, buffer, colortype, bitdepth);
|
return decode(out, w, h, buffer, colortype, bitdepth);
|
||||||
@ -6232,7 +6239,7 @@ unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h, const
|
|||||||
#endif /* LODEPNG_COMPILE_DISK */
|
#endif /* LODEPNG_COMPILE_DISK */
|
||||||
|
|
||||||
#ifdef LODEPNG_COMPILE_ENCODER
|
#ifdef LODEPNG_COMPILE_ENCODER
|
||||||
unsigned encode(std::vector<unsigned char>& out, const unsigned char* in, unsigned w, unsigned h,
|
unsigned encode(XArray<unsigned char>& out, const unsigned char* in, unsigned w, unsigned h,
|
||||||
LodePNGColorType colortype, unsigned bitdepth)
|
LodePNGColorType colortype, unsigned bitdepth)
|
||||||
{
|
{
|
||||||
unsigned char* buffer;
|
unsigned char* buffer;
|
||||||
@ -6240,21 +6247,22 @@ unsigned encode(std::vector<unsigned char>& out, const unsigned char* in, unsign
|
|||||||
unsigned error = lodepng_encode_memory(&buffer, &buffersize, in, w, h, colortype, bitdepth);
|
unsigned error = lodepng_encode_memory(&buffer, &buffersize, in, w, h, colortype, bitdepth);
|
||||||
if(buffer)
|
if(buffer)
|
||||||
{
|
{
|
||||||
out.insert(out.end(), &buffer[0], &buffer[buffersize]);
|
// out.insert(out.end(), &buffer[0], &buffer[buffersize]);
|
||||||
|
out.AddArray(buffer, buffersize);
|
||||||
lodepng_free(buffer);
|
lodepng_free(buffer);
|
||||||
}
|
}
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned encode(std::vector<unsigned char>& out,
|
unsigned encode(XArray<unsigned char>& out,
|
||||||
const std::vector<unsigned char>& in, unsigned w, unsigned h,
|
const XArray<unsigned char>& in, unsigned w, unsigned h,
|
||||||
LodePNGColorType colortype, unsigned bitdepth)
|
LodePNGColorType colortype, unsigned bitdepth)
|
||||||
{
|
{
|
||||||
if(lodepng_get_raw_size_lct(w, h, colortype, bitdepth) > in.size()) return 84;
|
if(lodepng_get_raw_size_lct(w, h, colortype, bitdepth) > in.size()) return 84;
|
||||||
return encode(out, in.empty() ? 0 : &in[0], w, h, colortype, bitdepth);
|
return encode(out, in.isEmpty() ? 0 : &in[0], w, h, colortype, bitdepth);
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned encode(std::vector<unsigned char>& out,
|
unsigned encode(XArray<unsigned char>& out,
|
||||||
const unsigned char* in, unsigned w, unsigned h,
|
const unsigned char* in, unsigned w, unsigned h,
|
||||||
State& state)
|
State& state)
|
||||||
{
|
{
|
||||||
@ -6263,18 +6271,19 @@ unsigned encode(std::vector<unsigned char>& out,
|
|||||||
unsigned error = lodepng_encode(&buffer, &buffersize, in, w, h, &state);
|
unsigned error = lodepng_encode(&buffer, &buffersize, in, w, h, &state);
|
||||||
if(buffer)
|
if(buffer)
|
||||||
{
|
{
|
||||||
out.insert(out.end(), &buffer[0], &buffer[buffersize]);
|
// out.insert(out.end(), &buffer[0], &buffer[buffersize]);
|
||||||
|
out.AddArray(buffer, buffersize);
|
||||||
lodepng_free(buffer);
|
lodepng_free(buffer);
|
||||||
}
|
}
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned encode(std::vector<unsigned char>& out,
|
unsigned encode(XArray<unsigned char>& out,
|
||||||
const std::vector<unsigned char>& in, unsigned w, unsigned h,
|
const XArray<unsigned char>& in, unsigned w, unsigned h,
|
||||||
State& state)
|
State& state)
|
||||||
{
|
{
|
||||||
if(lodepng_get_raw_size(w, h, &state.info_raw) > in.size()) return 84;
|
if(lodepng_get_raw_size(w, h, &state.info_raw) > in.size()) return 84;
|
||||||
return encode(out, in.empty() ? 0 : &in[0], w, h, state);
|
return encode(out, in.isEmpty() ? 0 : &in[0], w, h, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef LODEPNG_COMPILE_DISK
|
#ifdef LODEPNG_COMPILE_DISK
|
||||||
@ -6282,18 +6291,18 @@ unsigned encode(const std::string& filename,
|
|||||||
const unsigned char* in, unsigned w, unsigned h,
|
const unsigned char* in, unsigned w, unsigned h,
|
||||||
LodePNGColorType colortype, unsigned bitdepth)
|
LodePNGColorType colortype, unsigned bitdepth)
|
||||||
{
|
{
|
||||||
std::vector<unsigned char> buffer;
|
XArray<unsigned char> buffer;
|
||||||
unsigned error = encode(buffer, in, w, h, colortype, bitdepth);
|
unsigned error = encode(buffer, in, w, h, colortype, bitdepth);
|
||||||
if(!error) error = save_file(buffer, filename);
|
if(!error) error = save_file(buffer, filename);
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned encode(const std::string& filename,
|
unsigned encode(const std::string& filename,
|
||||||
const std::vector<unsigned char>& in, unsigned w, unsigned h,
|
const XArray<unsigned char>& in, unsigned w, unsigned h,
|
||||||
LodePNGColorType colortype, unsigned bitdepth)
|
LodePNGColorType colortype, unsigned bitdepth)
|
||||||
{
|
{
|
||||||
if(lodepng_get_raw_size_lct(w, h, colortype, bitdepth) > in.size()) return 84;
|
if(lodepng_get_raw_size_lct(w, h, colortype, bitdepth) > in.size()) return 84;
|
||||||
return encode(filename, in.empty() ? 0 : &in[0], w, h, colortype, bitdepth);
|
return encode(filename, in.isEmpty() ? 0 : &in[0], w, h, colortype, bitdepth);
|
||||||
}
|
}
|
||||||
#endif /* LODEPNG_COMPILE_DISK */
|
#endif /* LODEPNG_COMPILE_DISK */
|
||||||
#endif /* LODEPNG_COMPILE_ENCODER */
|
#endif /* LODEPNG_COMPILE_ENCODER */
|
||||||
|
@ -29,13 +29,16 @@ freely, subject to the following restrictions:
|
|||||||
|
|
||||||
//MODSNI v
|
//MODSNI v
|
||||||
#include <Uefi.h>
|
#include <Uefi.h>
|
||||||
|
#include "../cpp_foundation/XToolsCommon.h"
|
||||||
|
#include "../cpp_foundation/XArray.h"
|
||||||
|
|
||||||
|
|
||||||
//#define LODEPNG_NO_COMPILE_DECODER
|
//#define LODEPNG_NO_COMPILE_DECODER
|
||||||
#define LODEPNG_NO_COMPILE_DISK
|
#define LODEPNG_NO_COMPILE_DISK
|
||||||
//#define LODEPNG_NO_COMPILE_ALLOCATORS
|
//#define LODEPNG_NO_COMPILE_ALLOCATORS
|
||||||
//#define LODEPNG_NO_COMPILE_ERROR_TEXT
|
//#define LODEPNG_NO_COMPILE_ERROR_TEXT
|
||||||
#define LODEPNG_NO_COMPILE_ANCILLARY_CHUNKS
|
//#define LODEPNG_NO_COMPILE_ANCILLARY_CHUNKS
|
||||||
#define LODEPNG_NO_COMPILE_CPP
|
//#define LODEPNG_NO_COMPILE_CPP
|
||||||
|
|
||||||
// Microsoft compiler has built-in size_t
|
// Microsoft compiler has built-in size_t
|
||||||
//#if !defined(_MSC_VER)
|
//#if !defined(_MSC_VER)
|
||||||
@ -224,33 +227,33 @@ unsigned lodepng_encode24_file(const char* filename,
|
|||||||
namespace lodepng
|
namespace lodepng
|
||||||
{
|
{
|
||||||
#ifdef LODEPNG_COMPILE_DECODER
|
#ifdef LODEPNG_COMPILE_DECODER
|
||||||
/*Same as lodepng_decode_memory, but decodes to an std::vector. The colortype
|
/*Same as lodepng_decode_memory, but decodes to an XArray. The colortype
|
||||||
is the format to output the pixels to. Default is RGBA 8-bit per channel.*/
|
is the format to output the pixels to. Default is RGBA 8-bit per channel.*/
|
||||||
unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,
|
unsigned decode(XArray<unsigned char>& out, unsigned& w, unsigned& h,
|
||||||
const unsigned char* in, size_t insize,
|
const unsigned char* in, size_t insize,
|
||||||
LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);
|
LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);
|
||||||
unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,
|
unsigned decode(XArray<unsigned char>& out, unsigned& w, unsigned& h,
|
||||||
const std::vector<unsigned char>& in,
|
const XArray<unsigned char>& in,
|
||||||
LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);
|
LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);
|
||||||
#ifdef LODEPNG_COMPILE_DISK
|
#ifdef LODEPNG_COMPILE_DISK
|
||||||
/*
|
/*
|
||||||
Converts PNG file from disk to raw pixel data in memory.
|
Converts PNG file from disk to raw pixel data in memory.
|
||||||
Same as the other decode functions, but instead takes a filename as input.
|
Same as the other decode functions, but instead takes a filename as input.
|
||||||
*/
|
*/
|
||||||
unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,
|
unsigned decode(XArray<unsigned char>& out, unsigned& w, unsigned& h,
|
||||||
const std::string& filename,
|
const std::string& filename,
|
||||||
LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);
|
LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);
|
||||||
#endif /* LODEPNG_COMPILE_DISK */
|
#endif /* LODEPNG_COMPILE_DISK */
|
||||||
#endif /* LODEPNG_COMPILE_DECODER */
|
#endif /* LODEPNG_COMPILE_DECODER */
|
||||||
|
|
||||||
#ifdef LODEPNG_COMPILE_ENCODER
|
#ifdef LODEPNG_COMPILE_ENCODER
|
||||||
/*Same as lodepng_encode_memory, but encodes to an std::vector. colortype
|
/*Same as lodepng_encode_memory, but encodes to an XArray. colortype
|
||||||
is that of the raw input data. The output PNG color type will be auto chosen.*/
|
is that of the raw input data. The output PNG color type will be auto chosen.*/
|
||||||
unsigned encode(std::vector<unsigned char>& out,
|
unsigned encode(XArray<unsigned char>& out,
|
||||||
const unsigned char* in, unsigned w, unsigned h,
|
const unsigned char* in, unsigned w, unsigned h,
|
||||||
LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);
|
LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);
|
||||||
unsigned encode(std::vector<unsigned char>& out,
|
unsigned encode(XArray<unsigned char>& out,
|
||||||
const std::vector<unsigned char>& in, unsigned w, unsigned h,
|
const XArray<unsigned char>& in, unsigned w, unsigned h,
|
||||||
LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);
|
LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);
|
||||||
#ifdef LODEPNG_COMPILE_DISK
|
#ifdef LODEPNG_COMPILE_DISK
|
||||||
/*
|
/*
|
||||||
@ -262,7 +265,7 @@ unsigned encode(const std::string& filename,
|
|||||||
const unsigned char* in, unsigned w, unsigned h,
|
const unsigned char* in, unsigned w, unsigned h,
|
||||||
LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);
|
LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);
|
||||||
unsigned encode(const std::string& filename,
|
unsigned encode(const std::string& filename,
|
||||||
const std::vector<unsigned char>& in, unsigned w, unsigned h,
|
const XArray<unsigned char>& in, unsigned w, unsigned h,
|
||||||
LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);
|
LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);
|
||||||
#endif /* LODEPNG_COMPILE_DISK */
|
#endif /* LODEPNG_COMPILE_DISK */
|
||||||
#endif /* LODEPNG_COMPILE_ENCODER */
|
#endif /* LODEPNG_COMPILE_ENCODER */
|
||||||
@ -838,7 +841,7 @@ unsigned lodepng_save_file(const unsigned char* buffer, size_t buffersize, const
|
|||||||
#endif /*LODEPNG_COMPILE_DISK*/
|
#endif /*LODEPNG_COMPILE_DISK*/
|
||||||
|
|
||||||
#ifdef LODEPNG_COMPILE_CPP
|
#ifdef LODEPNG_COMPILE_CPP
|
||||||
/* The LodePNG C++ wrapper uses std::vectors instead of manually allocated memory buffers. */
|
/* The LodePNG C++ wrapper uses XArrays instead of manually allocated memory buffers. */
|
||||||
namespace lodepng
|
namespace lodepng
|
||||||
{
|
{
|
||||||
#ifdef LODEPNG_COMPILE_PNG
|
#ifdef LODEPNG_COMPILE_PNG
|
||||||
@ -853,57 +856,57 @@ class State : public LodePNGState
|
|||||||
|
|
||||||
#ifdef LODEPNG_COMPILE_DECODER
|
#ifdef LODEPNG_COMPILE_DECODER
|
||||||
/* Same as other lodepng::decode, but using a State for more settings and information. */
|
/* Same as other lodepng::decode, but using a State for more settings and information. */
|
||||||
unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,
|
unsigned decode(XArray<unsigned char>& out, unsigned& w, unsigned& h,
|
||||||
State& state,
|
State& state,
|
||||||
const unsigned char* in, size_t insize);
|
const unsigned char* in, size_t insize);
|
||||||
unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,
|
unsigned decode(XArray<unsigned char>& out, unsigned& w, unsigned& h,
|
||||||
State& state,
|
State& state,
|
||||||
const std::vector<unsigned char>& in);
|
const XArray<unsigned char>& in);
|
||||||
#endif /*LODEPNG_COMPILE_DECODER*/
|
#endif /*LODEPNG_COMPILE_DECODER*/
|
||||||
|
|
||||||
#ifdef LODEPNG_COMPILE_ENCODER
|
#ifdef LODEPNG_COMPILE_ENCODER
|
||||||
/* Same as other lodepng::encode, but using a State for more settings and information. */
|
/* Same as other lodepng::encode, but using a State for more settings and information. */
|
||||||
unsigned encode(std::vector<unsigned char>& out,
|
unsigned encode(XArray<unsigned char>& out,
|
||||||
const unsigned char* in, unsigned w, unsigned h,
|
const unsigned char* in, unsigned w, unsigned h,
|
||||||
State& state);
|
State& state);
|
||||||
unsigned encode(std::vector<unsigned char>& out,
|
unsigned encode(XArray<unsigned char>& out,
|
||||||
const std::vector<unsigned char>& in, unsigned w, unsigned h,
|
const XArray<unsigned char>& in, unsigned w, unsigned h,
|
||||||
State& state);
|
State& state);
|
||||||
#endif /*LODEPNG_COMPILE_ENCODER*/
|
#endif /*LODEPNG_COMPILE_ENCODER*/
|
||||||
|
|
||||||
#ifdef LODEPNG_COMPILE_DISK
|
#ifdef LODEPNG_COMPILE_DISK
|
||||||
/*
|
/*
|
||||||
Load a file from disk into an std::vector.
|
Load a file from disk into an XArray.
|
||||||
return value: error code (0 means ok)
|
return value: error code (0 means ok)
|
||||||
*/
|
*/
|
||||||
unsigned load_file(std::vector<unsigned char>& buffer, const std::string& filename);
|
unsigned load_file(XArray<unsigned char>& buffer, const std::string& filename);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Save the binary data in an std::vector to a file on disk. The file is overwritten
|
Save the binary data in an XArray to a file on disk. The file is overwritten
|
||||||
without warning.
|
without warning.
|
||||||
*/
|
*/
|
||||||
unsigned save_file(const std::vector<unsigned char>& buffer, const std::string& filename);
|
unsigned save_file(const XArray<unsigned char>& buffer, const std::string& filename);
|
||||||
#endif /* LODEPNG_COMPILE_DISK */
|
#endif /* LODEPNG_COMPILE_DISK */
|
||||||
#endif /* LODEPNG_COMPILE_PNG */
|
#endif /* LODEPNG_COMPILE_PNG */
|
||||||
|
|
||||||
#ifdef LODEPNG_COMPILE_ZLIB
|
#ifdef LODEPNG_COMPILE_ZLIB
|
||||||
#ifdef LODEPNG_COMPILE_DECODER
|
#ifdef LODEPNG_COMPILE_DECODER
|
||||||
/* Zlib-decompress an unsigned char buffer */
|
/* Zlib-decompress an unsigned char buffer */
|
||||||
unsigned decompress(std::vector<unsigned char>& out, const unsigned char* in, size_t insize,
|
unsigned decompress(XArray<unsigned char>& out, const unsigned char* in, size_t insize,
|
||||||
const LodePNGDecompressSettings& settings = lodepng_default_decompress_settings);
|
const LodePNGDecompressSettings& settings = lodepng_default_decompress_settings);
|
||||||
|
|
||||||
/* Zlib-decompress an std::vector */
|
/* Zlib-decompress an XArray */
|
||||||
unsigned decompress(std::vector<unsigned char>& out, const std::vector<unsigned char>& in,
|
unsigned decompress(XArray<unsigned char>& out, const XArray<unsigned char>& in,
|
||||||
const LodePNGDecompressSettings& settings = lodepng_default_decompress_settings);
|
const LodePNGDecompressSettings& settings = lodepng_default_decompress_settings);
|
||||||
#endif /* LODEPNG_COMPILE_DECODER */
|
#endif /* LODEPNG_COMPILE_DECODER */
|
||||||
|
|
||||||
#ifdef LODEPNG_COMPILE_ENCODER
|
#ifdef LODEPNG_COMPILE_ENCODER
|
||||||
/* Zlib-compress an unsigned char buffer */
|
/* Zlib-compress an unsigned char buffer */
|
||||||
unsigned compress(std::vector<unsigned char>& out, const unsigned char* in, size_t insize,
|
unsigned compress(XArray<unsigned char>& out, const unsigned char* in, size_t insize,
|
||||||
const LodePNGCompressSettings& settings = lodepng_default_compress_settings);
|
const LodePNGCompressSettings& settings = lodepng_default_compress_settings);
|
||||||
|
|
||||||
/* Zlib-compress an std::vector */
|
/* Zlib-compress an XArray */
|
||||||
unsigned compress(std::vector<unsigned char>& out, const std::vector<unsigned char>& in,
|
unsigned compress(XArray<unsigned char>& out, const XArray<unsigned char>& in,
|
||||||
const LodePNGCompressSettings& settings = lodepng_default_compress_settings);
|
const LodePNGCompressSettings& settings = lodepng_default_compress_settings);
|
||||||
#endif /* LODEPNG_COMPILE_ENCODER */
|
#endif /* LODEPNG_COMPILE_ENCODER */
|
||||||
#endif /* LODEPNG_COMPILE_ZLIB */
|
#endif /* LODEPNG_COMPILE_ZLIB */
|
||||||
@ -1058,7 +1061,7 @@ The C version uses buffers allocated with alloc that you need to free()
|
|||||||
yourself. You need to use init and cleanup functions for each struct whenever
|
yourself. You need to use init and cleanup functions for each struct whenever
|
||||||
using a struct from the C version to avoid exploits and memory leaks.
|
using a struct from the C version to avoid exploits and memory leaks.
|
||||||
|
|
||||||
The C++ version has extra functions with std::vectors in the interface and the
|
The C++ version has extra functions with XArrays in the interface and the
|
||||||
lodepng::State class which is a LodePNGState with constructor and destructor.
|
lodepng::State class which is a LodePNGState with constructor and destructor.
|
||||||
|
|
||||||
These files work without modification for both C and C++ compilers because all
|
These files work without modification for both C and C++ compilers because all
|
||||||
@ -1492,7 +1495,7 @@ encoder and decoder, this makes a large difference.
|
|||||||
|
|
||||||
Make sure that LodePNG is compiled with the same compiler of the same version
|
Make sure that LodePNG is compiled with the same compiler of the same version
|
||||||
and with the same settings as the rest of the program, or the interfaces with
|
and with the same settings as the rest of the program, or the interfaces with
|
||||||
std::vectors and std::strings in C++ can be incompatible.
|
XArrays and std::strings in C++ can be incompatible.
|
||||||
|
|
||||||
CHAR_BITS must be 8 or higher, because LodePNG uses unsigned chars for octets.
|
CHAR_BITS must be 8 or higher, because LodePNG uses unsigned chars for octets.
|
||||||
|
|
||||||
@ -1555,7 +1558,7 @@ int main(int argc, char *argv[])
|
|||||||
const char* filename = argc > 1 ? argv[1] : "test.png";
|
const char* filename = argc > 1 ? argv[1] : "test.png";
|
||||||
|
|
||||||
//load and decode
|
//load and decode
|
||||||
std::vector<unsigned char> image;
|
XArray<unsigned char> image;
|
||||||
unsigned width, height;
|
unsigned width, height;
|
||||||
unsigned error = lodepng::decode(image, width, height, filename);
|
unsigned error = lodepng::decode(image, width, height, filename);
|
||||||
|
|
||||||
@ -1672,7 +1675,7 @@ symbol.
|
|||||||
*) 21 jul 2007: deflate code placed in new namespace separate from zlib code
|
*) 21 jul 2007: deflate code placed in new namespace separate from zlib code
|
||||||
*) 08 jun 2007: fixed bug with 2- and 4-bit color, and small interlaced images
|
*) 08 jun 2007: fixed bug with 2- and 4-bit color, and small interlaced images
|
||||||
*) 04 jun 2007: improved support for Visual Studio 2005: crash with accessing
|
*) 04 jun 2007: improved support for Visual Studio 2005: crash with accessing
|
||||||
invalid std::vector element [0] fixed, and level 3 and 4 warnings removed
|
invalid XArray element [0] fixed, and level 3 and 4 warnings removed
|
||||||
*) 02 jun 2007: made the encoder add a tag with version by default
|
*) 02 jun 2007: made the encoder add a tag with version by default
|
||||||
*) 27 may 2007: zlib and png code separated (but still in the same file),
|
*) 27 may 2007: zlib and png code separated (but still in the same file),
|
||||||
simple encoder/decoder functions added for more simple usage cases
|
simple encoder/decoder functions added for more simple usage cases
|
||||||
@ -1726,7 +1729,7 @@ symbol.
|
|||||||
in LodePNG namespace. Changed the order of the parameters. Rewrote the
|
in LodePNG namespace. Changed the order of the parameters. Rewrote the
|
||||||
documentation in the header. Renamed files to lodepng.cpp and lodepng.h
|
documentation in the header. Renamed files to lodepng.cpp and lodepng.h
|
||||||
*) 22 apr 2006: Optimized and improved some code
|
*) 22 apr 2006: Optimized and improved some code
|
||||||
*) 07 sep 2005: (!) Changed to std::vector interface
|
*) 07 sep 2005: (!) Changed to XArray interface
|
||||||
*) 12 aug 2005: Initial release (C++, decoder only)
|
*) 12 aug 2005: Initial release (C++, decoder only)
|
||||||
|
|
||||||
|
|
||||||
|
@ -81,8 +81,8 @@
|
|||||||
libeg/VectorGraphics.cpp
|
libeg/VectorGraphics.cpp
|
||||||
libeg/libeg.h
|
libeg/libeg.h
|
||||||
libeg/libegint.h
|
libeg/libegint.h
|
||||||
libeg/XImage.cpp
|
# libeg/XImage.cpp
|
||||||
libeg/XImage.h
|
# libeg/XImage.h
|
||||||
Platform/AcpiPatcher.cpp
|
Platform/AcpiPatcher.cpp
|
||||||
Platform/ati_reg.h
|
Platform/ati_reg.h
|
||||||
Platform/AmlGenerator.cpp
|
Platform/AmlGenerator.cpp
|
||||||
|
@ -71,8 +71,9 @@ EFI_FILE *OemThemeDir = NULL;
|
|||||||
|
|
||||||
|
|
||||||
REFIT_VOLUME *SelfVolume = NULL;
|
REFIT_VOLUME *SelfVolume = NULL;
|
||||||
REFIT_VOLUME **Volumes = NULL;
|
//REFIT_VOLUME **Volumes = NULL;
|
||||||
UINTN VolumesCount = 0;
|
//UINTN VolumesCount = 0;
|
||||||
|
XObjArray<REFIT_VOLUME> Volumes;
|
||||||
//
|
//
|
||||||
// Unicode collation protocol interface
|
// Unicode collation protocol interface
|
||||||
//
|
//
|
||||||
@ -334,19 +335,19 @@ BOOLEAN IsEmbeddedTheme()
|
|||||||
//
|
//
|
||||||
// list functions
|
// list functions
|
||||||
//
|
//
|
||||||
|
//
|
||||||
VOID CreateList(OUT VOID ***ListPtr, OUT UINTN *ElementCount, IN UINTN InitialElementCount)
|
//VOID CreateList(OUT VOID ***ListPtr, OUT UINTN *ElementCount, IN UINTN InitialElementCount)
|
||||||
{
|
//{
|
||||||
UINTN AllocateCount;
|
// UINTN AllocateCount;
|
||||||
|
//
|
||||||
*ElementCount = InitialElementCount;
|
// *ElementCount = InitialElementCount;
|
||||||
if (*ElementCount > 0) {
|
// if (*ElementCount > 0) {
|
||||||
AllocateCount = (*ElementCount + 7) & ~7; // next multiple of 8
|
// AllocateCount = (*ElementCount + 7) & ~7; // next multiple of 8
|
||||||
*ListPtr = (__typeof_am__(*ListPtr))AllocatePool(sizeof(VOID *) * AllocateCount);
|
// *ListPtr = (__typeof_am__(*ListPtr))AllocatePool(sizeof(VOID *) * AllocateCount);
|
||||||
} else {
|
// } else {
|
||||||
*ListPtr = NULL;
|
// *ListPtr = NULL;
|
||||||
}
|
// }
|
||||||
}
|
//}
|
||||||
|
|
||||||
VOID AddListElement(IN OUT VOID ***ListPtr, IN OUT UINTN *ElementCount, IN VOID *NewElement)
|
VOID AddListElement(IN OUT VOID ***ListPtr, IN OUT UINTN *ElementCount, IN VOID *NewElement)
|
||||||
{
|
{
|
||||||
@ -1077,7 +1078,7 @@ static VOID ScanExtendedPartition(REFIT_VOLUME *WholeDiskVolume, MBR_PARTITION_I
|
|||||||
} else {
|
} else {
|
||||||
|
|
||||||
// found a logical partition
|
// found a logical partition
|
||||||
Volume = (__typeof__(Volume))AllocateZeroPool(sizeof(REFIT_VOLUME));
|
Volume = (__typeof__(Volume))AllocateZeroPool(sizeof(*Volume));
|
||||||
Volume->DiskKind = WholeDiskVolume->DiskKind;
|
Volume->DiskKind = WholeDiskVolume->DiskKind;
|
||||||
Volume->IsMbrPartition = TRUE;
|
Volume->IsMbrPartition = TRUE;
|
||||||
Volume->MbrPartitionIndex = LogicalPartitionIndex++;
|
Volume->MbrPartitionIndex = LogicalPartitionIndex++;
|
||||||
@ -1092,7 +1093,8 @@ static VOID ScanExtendedPartition(REFIT_VOLUME *WholeDiskVolume, MBR_PARTITION_I
|
|||||||
if (!Bootable)
|
if (!Bootable)
|
||||||
Volume->HasBootCode = FALSE;
|
Volume->HasBootCode = FALSE;
|
||||||
|
|
||||||
AddListElement((VOID ***) &Volumes, &VolumesCount, Volume);
|
Volumes.AddReference(Volume, true);
|
||||||
|
// AddListElement((VOID ***) &Volumes, &VolumesCount, Volume);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1105,7 +1107,7 @@ VOID ScanVolumes(VOID)
|
|||||||
UINTN HandleCount = 0;
|
UINTN HandleCount = 0;
|
||||||
UINTN HandleIndex;
|
UINTN HandleIndex;
|
||||||
EFI_HANDLE *Handles = NULL;
|
EFI_HANDLE *Handles = NULL;
|
||||||
REFIT_VOLUME *Volume, *WholeDiskVolume;
|
REFIT_VOLUME *WholeDiskVolume;
|
||||||
UINTN VolumeIndex, VolumeIndex2;
|
UINTN VolumeIndex, VolumeIndex2;
|
||||||
MBR_PARTITION_INFO *MbrTable;
|
MBR_PARTITION_INFO *MbrTable;
|
||||||
UINTN PartitionIndex;
|
UINTN PartitionIndex;
|
||||||
@ -1127,7 +1129,7 @@ VOID ScanVolumes(VOID)
|
|||||||
// first pass: collect information about all handles
|
// first pass: collect information about all handles
|
||||||
for (HandleIndex = 0; HandleIndex < HandleCount; HandleIndex++) {
|
for (HandleIndex = 0; HandleIndex < HandleCount; HandleIndex++) {
|
||||||
|
|
||||||
Volume = (__typeof__(Volume))AllocateZeroPool(sizeof(REFIT_VOLUME));
|
REFIT_VOLUME* Volume = (__typeof__(Volume))AllocateZeroPool(sizeof(*Volume));
|
||||||
Volume->LegacyOS = (__typeof__(Volume->LegacyOS))AllocateZeroPool(sizeof(LEGACY_OS));
|
Volume->LegacyOS = (__typeof__(Volume->LegacyOS))AllocateZeroPool(sizeof(LEGACY_OS));
|
||||||
Volume->DeviceHandle = Handles[HandleIndex];
|
Volume->DeviceHandle = Handles[HandleIndex];
|
||||||
if (Volume->DeviceHandle == SelfDeviceHandle) {
|
if (Volume->DeviceHandle == SelfDeviceHandle) {
|
||||||
@ -1140,8 +1142,8 @@ VOID ScanVolumes(VOID)
|
|||||||
|
|
||||||
Status = ScanVolume(Volume);
|
Status = ScanVolume(Volume);
|
||||||
if (!EFI_ERROR(Status)) {
|
if (!EFI_ERROR(Status)) {
|
||||||
|
Volumes.AddReference(Volume, true);
|
||||||
AddListElement((VOID ***) &Volumes, &VolumesCount, Volume);
|
// AddListElement((VOID ***) &Volumes, &VolumesCount, Volume);
|
||||||
if (!gSettings.ShowHiddenEntries) {
|
if (!gSettings.ShowHiddenEntries) {
|
||||||
for (HVi = 0; HVi < gSettings.HVCount; HVi++) {
|
for (HVi = 0; HVi < gSettings.HVCount; HVi++) {
|
||||||
if (StriStr(Volume->DevicePathString, gSettings.HVHideStrings[HVi]) ||
|
if (StriStr(Volume->DevicePathString, gSettings.HVHideStrings[HVi]) ||
|
||||||
@ -1186,8 +1188,8 @@ VOID ScanVolumes(VOID)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// second pass: relate partitions and whole disk devices
|
// second pass: relate partitions and whole disk devices
|
||||||
for (VolumeIndex = 0; VolumeIndex < VolumesCount; VolumeIndex++) {
|
for (VolumeIndex = 0; VolumeIndex < Volumes.size(); VolumeIndex++) {
|
||||||
Volume = Volumes[VolumeIndex];
|
REFIT_VOLUME* Volume = &Volumes[VolumeIndex];
|
||||||
|
|
||||||
// check MBR partition table for extended partitions
|
// check MBR partition table for extended partitions
|
||||||
if (Volume->BlockIO != NULL && Volume->WholeDiskBlockIO != NULL &&
|
if (Volume->BlockIO != NULL && Volume->WholeDiskBlockIO != NULL &&
|
||||||
@ -1206,10 +1208,10 @@ VOID ScanVolumes(VOID)
|
|||||||
WholeDiskVolume = NULL;
|
WholeDiskVolume = NULL;
|
||||||
if (Volume->BlockIO != NULL && Volume->WholeDiskBlockIO != NULL &&
|
if (Volume->BlockIO != NULL && Volume->WholeDiskBlockIO != NULL &&
|
||||||
Volume->BlockIO != Volume->WholeDiskBlockIO) {
|
Volume->BlockIO != Volume->WholeDiskBlockIO) {
|
||||||
for (VolumeIndex2 = 0; VolumeIndex2 < VolumesCount; VolumeIndex2++) {
|
for (VolumeIndex2 = 0; VolumeIndex2 < Volumes.size(); VolumeIndex2++) {
|
||||||
if (Volumes[VolumeIndex2]->BlockIO == Volume->WholeDiskBlockIO &&
|
if (Volumes[VolumeIndex2].BlockIO == Volume->WholeDiskBlockIO &&
|
||||||
Volumes[VolumeIndex2]->BlockIOOffset == 0)
|
Volumes[VolumeIndex2].BlockIOOffset == 0)
|
||||||
WholeDiskVolume = Volumes[VolumeIndex2];
|
WholeDiskVolume = &Volumes[VolumeIndex2];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (WholeDiskVolume != NULL && WholeDiskVolume->MbrPartitionTable != NULL) {
|
if (WholeDiskVolume != NULL && WholeDiskVolume->MbrPartitionTable != NULL) {
|
||||||
@ -1263,8 +1265,8 @@ static VOID UninitVolumes(VOID)
|
|||||||
REFIT_VOLUME *Volume;
|
REFIT_VOLUME *Volume;
|
||||||
UINTN VolumeIndex;
|
UINTN VolumeIndex;
|
||||||
|
|
||||||
for (VolumeIndex = 0; VolumeIndex < VolumesCount; VolumeIndex++) {
|
for (VolumeIndex = 0; VolumeIndex < Volumes.size(); VolumeIndex++) {
|
||||||
Volume = Volumes[VolumeIndex];
|
Volume = &Volumes[VolumeIndex];
|
||||||
|
|
||||||
if (Volume->RootDir != NULL) {
|
if (Volume->RootDir != NULL) {
|
||||||
Volume->RootDir->Close(Volume->RootDir);
|
Volume->RootDir->Close(Volume->RootDir);
|
||||||
@ -1277,13 +1279,7 @@ static VOID UninitVolumes(VOID)
|
|||||||
Volume->WholeDiskDeviceHandle = NULL;
|
Volume->WholeDiskDeviceHandle = NULL;
|
||||||
FreePool(Volume);
|
FreePool(Volume);
|
||||||
}
|
}
|
||||||
|
Volumes.Empty();
|
||||||
if (Volumes != NULL) {
|
|
||||||
FreePool(Volumes);
|
|
||||||
Volumes = NULL;
|
|
||||||
}
|
|
||||||
VolumesCount = 0;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID ReinitVolumes(VOID)
|
VOID ReinitVolumes(VOID)
|
||||||
@ -1295,8 +1291,8 @@ VOID ReinitVolumes(VOID)
|
|||||||
EFI_DEVICE_PATH *RemainingDevicePath;
|
EFI_DEVICE_PATH *RemainingDevicePath;
|
||||||
EFI_HANDLE DeviceHandle, WholeDiskHandle;
|
EFI_HANDLE DeviceHandle, WholeDiskHandle;
|
||||||
|
|
||||||
for (VolumeIndex = 0; VolumeIndex < VolumesCount; VolumeIndex++) {
|
for (VolumeIndex = 0; VolumeIndex < Volumes.size(); VolumeIndex++) {
|
||||||
Volume = Volumes[VolumeIndex];
|
Volume = &Volumes[VolumeIndex];
|
||||||
if (!Volume) {
|
if (!Volume) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -1337,7 +1333,10 @@ VOID ReinitVolumes(VOID)
|
|||||||
// CheckError(Status, L"from LocateDevicePath");
|
// CheckError(Status, L"from LocateDevicePath");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
VolumesCount = VolumesFound;
|
// Jief : I'm not sure to understand the next line. Why would we change the count when we didn't change the array.
|
||||||
|
// This code is not currently not used.
|
||||||
|
// Beware if you want to reuse this.
|
||||||
|
// VolumesCount = VolumesFound;
|
||||||
}
|
}
|
||||||
|
|
||||||
REFIT_VOLUME *FindVolumeByName(IN CHAR16 *VolName)
|
REFIT_VOLUME *FindVolumeByName(IN CHAR16 *VolName)
|
||||||
@ -1349,8 +1348,8 @@ REFIT_VOLUME *FindVolumeByName(IN CHAR16 *VolName)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (VolumeIndex = 0; VolumeIndex < VolumesCount; VolumeIndex++) {
|
for (VolumeIndex = 0; VolumeIndex < Volumes.size(); VolumeIndex++) {
|
||||||
Volume = Volumes[VolumeIndex];
|
Volume = &Volumes[VolumeIndex];
|
||||||
if (!Volume) {
|
if (!Volume) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -68,6 +68,7 @@
|
|||||||
// Experimental <--
|
// Experimental <--
|
||||||
|
|
||||||
#include "libeg.h"
|
#include "libeg.h"
|
||||||
|
#include "../cpp_foundation/XObjArray.h"
|
||||||
|
|
||||||
#define REFIT_DEBUG (2)
|
#define REFIT_DEBUG (2)
|
||||||
#define Print if ((!GlobalConfig.Quiet) || (GlobalConfig.TextOnly)) Print
|
#define Print if ((!GlobalConfig.Quiet) || (GlobalConfig.TextOnly)) Print
|
||||||
@ -693,8 +694,8 @@ extern BOOLEAN MainAnime;
|
|||||||
extern GUI_ANIME *GuiAnime;
|
extern GUI_ANIME *GuiAnime;
|
||||||
|
|
||||||
extern REFIT_VOLUME *SelfVolume;
|
extern REFIT_VOLUME *SelfVolume;
|
||||||
extern REFIT_VOLUME **Volumes;
|
extern XObjArray<REFIT_VOLUME> Volumes;
|
||||||
extern UINTN VolumesCount;
|
//extern UINTN VolumesCount;
|
||||||
|
|
||||||
extern EG_IMAGE *Banner;
|
extern EG_IMAGE *Banner;
|
||||||
extern EG_IMAGE *BigBack;
|
extern EG_IMAGE *BigBack;
|
||||||
|
@ -630,7 +630,7 @@ static VOID StartLoader(IN LOADER_ENTRY *Entry)
|
|||||||
font = nextFont;
|
font = nextFont;
|
||||||
}
|
}
|
||||||
nsvg__deleteParser(mainParser);
|
nsvg__deleteParser(mainParser);
|
||||||
destruct_globals_objects(NULL);
|
//destruct_globals_objects(NULL); //we can't destruct our globals here. We need, for example, Volumes.
|
||||||
|
|
||||||
//DumpKernelAndKextPatches(Entry->KernelAndKextPatches);
|
//DumpKernelAndKextPatches(Entry->KernelAndKextPatches);
|
||||||
|
|
||||||
@ -1847,9 +1847,9 @@ UINT8 *APFSContainer_Support(VOID) {
|
|||||||
EFI_GUID *TmpUUID = NULL;
|
EFI_GUID *TmpUUID = NULL;
|
||||||
|
|
||||||
//Fill APFSUUIDBank
|
//Fill APFSUUIDBank
|
||||||
APFSUUIDBank = (__typeof__(APFSUUIDBank))AllocateZeroPool(0x10*VolumesCount);
|
APFSUUIDBank = (__typeof__(APFSUUIDBank))AllocateZeroPool(0x10*Volumes.size());
|
||||||
for (VolumeIndex = 0; VolumeIndex < VolumesCount; VolumeIndex++) {
|
for (VolumeIndex = 0; VolumeIndex < Volumes.size(); VolumeIndex++) {
|
||||||
Volume = Volumes[VolumeIndex];
|
Volume = &Volumes[VolumeIndex];
|
||||||
//Check that current volume - apfs partition
|
//Check that current volume - apfs partition
|
||||||
if ((TmpUUID = APFSPartitionUUIDExtract(Volume->DevicePath)) != NULL){
|
if ((TmpUUID = APFSPartitionUUIDExtract(Volume->DevicePath)) != NULL){
|
||||||
CopyMem(APFSUUIDBank+APFSUUIDBankCounter*0x10,(UINT8 *)TmpUUID,0x10);
|
CopyMem(APFSUUIDBank+APFSUUIDBankCounter*0x10,(UINT8 *)TmpUUID,0x10);
|
||||||
|
@ -4353,7 +4353,7 @@ UINTN RunMenu(IN REFIT_MENU_SCREEN *Screen, OUT REFIT_MENU_ENTRY **ChosenEntry)
|
|||||||
VOID NewEntry(REFIT_MENU_ENTRY **Entry, REFIT_MENU_SCREEN **SubScreen, ACTION AtClick, UINTN ID, CONST CHAR8 *Title)
|
VOID NewEntry(REFIT_MENU_ENTRY **Entry, REFIT_MENU_SCREEN **SubScreen, ACTION AtClick, UINTN ID, CONST CHAR8 *Title)
|
||||||
{
|
{
|
||||||
//create entry
|
//create entry
|
||||||
*Entry = (__typeof_am__(*Entry))AllocateZeroPool(sizeof(LOADER_ENTRY));
|
*Entry = (__typeof_am__(*Entry))AllocateZeroPool(sizeof(LOADER_ENTRY)); // carefull, **Entry is not a LOADER_ENTRY. Don't use sizeof.
|
||||||
if (Title) {
|
if (Title) {
|
||||||
(*Entry)->Title = PoolPrint(L"%a", Title);
|
(*Entry)->Title = PoolPrint(L"%a", Title);
|
||||||
} else {
|
} else {
|
||||||
@ -4364,7 +4364,7 @@ VOID NewEntry(REFIT_MENU_ENTRY **Entry, REFIT_MENU_SCREEN **SubScreen, ACTION At
|
|||||||
(*Entry)->Tag = TAG_OPTIONS;
|
(*Entry)->Tag = TAG_OPTIONS;
|
||||||
(*Entry)->AtClick = AtClick;
|
(*Entry)->AtClick = AtClick;
|
||||||
// create the submenu
|
// create the submenu
|
||||||
*SubScreen = (__typeof_am__(*SubScreen))AllocateZeroPool(sizeof(REFIT_MENU_SCREEN));
|
*SubScreen = (__typeof_am__(*SubScreen))AllocateZeroPool(sizeof(**SubScreen));
|
||||||
(*SubScreen)->Title = (*Entry)->Title;
|
(*SubScreen)->Title = (*Entry)->Title;
|
||||||
(*SubScreen)->TitleImage = (*Entry)->Image;
|
(*SubScreen)->TitleImage = (*Entry)->Image;
|
||||||
(*SubScreen)->ID = ID;
|
(*SubScreen)->ID = ID;
|
||||||
|
Loading…
Reference in New Issue
Block a user