15#include <Library/BaseLib.h>
16#include <Library/BaseMemoryLib.h>
17#include <Library/BaseOverflowLib.h>
18#include <Library/DebugLib.h>
24 IN CONST UINT8 *Pattern,
25 IN CONST UINT8 *PatternMask OPTIONAL,
26 IN CONST UINT32 PatternSize,
29 IN OUT UINT32 *DataOff
36 ASSERT (DataSize >= PatternSize);
39 if (PatternSize == 0) {
43 CurrentOffset = *DataOff;
44 LastOffset = DataSize - PatternSize;
46 if (PatternMask == NULL) {
47 while (CurrentOffset <= LastOffset) {
48 for (Index = 0; Index < PatternSize; ++Index) {
49 if (Data[CurrentOffset + Index] != Pattern[Index]) {
54 if (Index == PatternSize) {
55 *DataOff = CurrentOffset;
62 while (CurrentOffset <= LastOffset) {
63 for (Index = 0; Index < PatternSize; ++Index) {
64 if ((Data[CurrentOffset + Index] & PatternMask[Index]) != Pattern[Index]) {
69 if (Index == PatternSize) {
70 *DataOff = CurrentOffset;
83 IN CONST UINT8 *Pattern,
84 IN CONST UINT8 *PatternMask OPTIONAL,
85 IN CONST UINT32 PatternSize,
88 IN OUT UINT32 *DataOff
91 if (DataSize < PatternSize) {
107 IN CONST UINT8 *Pattern,
108 IN CONST UINT8 *PatternMask OPTIONAL,
109 IN CONST UINT32 PatternSize,
110 IN CONST UINT8 *Replace,
111 IN CONST UINT8 *ReplaceMask OPTIONAL,
122 if (DataSize < PatternSize) {
154 DataOff += PatternSize;
161 if (ReplaceMask == NULL) {
162 CopyMem (&Data[DataOff], Replace, PatternSize);
164 for (UINTN Index = 0; Index < PatternSize; ++Index) {
165 Data[DataOff + Index] = (Data[DataOff + Index] & ~ReplaceMask[Index]) | (Replace[Index] & ReplaceMask[Index]);
170 DataOff += PatternSize;
STATIC BOOLEAN InternalFindPattern(IN CONST UINT8 *Pattern, IN CONST UINT8 *PatternMask OPTIONAL, IN CONST UINT32 PatternSize, IN CONST UINT8 *Data, IN UINT32 DataSize, IN OUT UINT32 *DataOff)
BOOLEAN FindPattern(IN CONST UINT8 *Pattern, IN CONST UINT8 *PatternMask OPTIONAL, IN CONST UINT32 PatternSize, IN CONST UINT8 *Data, IN UINT32 DataSize, IN OUT UINT32 *DataOff)
UINT32 ApplyPatch(IN CONST UINT8 *Pattern, IN CONST UINT8 *PatternMask OPTIONAL, IN CONST UINT32 PatternSize, IN CONST UINT8 *Replace, IN CONST UINT8 *ReplaceMask OPTIONAL, IN UINT8 *Data, IN UINT32 DataSize, IN UINT32 Count, IN UINT32 Skip)
VOID *EFIAPI CopyMem(OUT VOID *DestinationBuffer, IN CONST VOID *SourceBuffer, IN UINTN Length)