MCPcopy Create free account
hub / github.com/CloverHackyColor/CloverBootloader / FixAny

Function FixAny

rEFIt_UEFI/Platform/FixBiosDsdt.cpp:1770–1816  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1768}
1769
1770UINT32 FixAny (UINT8* dsdt, UINT32 len, const XBuffer<UINT8> ToFind, const XBuffer<UINT8> ToReplace)
1771{
1772 size_t sizeoffset;
1773 INT32 adr;
1774 UINT32 i;
1775 BOOLEAN found = FALSE;
1776 if ( ToFind.isEmpty() || ToReplace.isEmpty() ) {
1777 DBG(" invalid patches!\n");
1778 return len;
1779 }
1780 MsgLog(" pattern %02hhX%02hhX%02hhX%02hhX,", ToFind[0], ToFind[1], ToFind[2], ToFind[3]);
1781 if ((ToFind.size() + sizeof(EFI_ACPI_DESCRIPTION_HEADER)) > len) {
1782 MsgLog(" the patch is too large!\n");
1783 return len;
1784 }
1785 sizeoffset = ToReplace.size() - ToFind.size();
1786 if ( sizeoffset > MAX_INT32 ) {
1787 DBG(" invalid patches (sizeoffset > MAX_INT32)!\n");
1788 return len;
1789 }
1790 for (i = 20; i < len; ) {
1791 adr = FindBin(dsdt + i, len - i, ToFind);
1792 if (adr < 0) {
1793 if (found) {
1794 MsgLog(" ]\n");
1795 } else {
1796 MsgLog(" bin not found / already patched!\n");
1797 }
1798 return len;
1799 }
1800
1801 if (!found) {
1802 MsgLog(" patched at: [");
1803 MsgLog(" (%X)", adr); //print once because whole duration is 26 seconds!!!
1804 }
1805
1806// MsgLog(" (%X)", adr);
1807 found = TRUE;
1808 len = move_data(adr + i, dsdt, len, (INT32)sizeoffset); // safe cast, sizeoffset > MAX_INT32
1809 CopyMem(dsdt + adr + i, ToReplace.data(), ToReplace.size());
1810 len = CorrectOuterMethod(dsdt, len, adr + i - 2, (INT32)sizeoffset); // safe cast, sizeoffset > MAX_INT32
1811 len = CorrectOuters(dsdt, len, adr + i - 3, (INT32)sizeoffset); // safe cast, sizeoffset > MAX_INT32
1812 i += adr + ToReplace.size();
1813 }
1814 MsgLog(" ]\n"); //should not be here
1815 return len;
1816}
1817
1818//new method. by goodwin_c
1819UINT32 FixRenameByBridge2 (UINT8* dsdt, UINT32 len, const XBuffer<UINT8>& TgtBrgName, const XBuffer<UINT8>& ToFind, const XBuffer<UINT8>& ToReplace)

Callers 2

FixBiosDsdtFunction · 0.85
PatchAllTablesFunction · 0.85

Calls 8

FindBinFunction · 0.85
move_dataFunction · 0.85
CorrectOuterMethodFunction · 0.85
CorrectOutersFunction · 0.85
CopyMemFunction · 0.50
isEmptyMethod · 0.45
sizeMethod · 0.45
dataMethod · 0.45

Tested by

no test coverage detected