This commit is contained in:
Alex Matrosov 2018-04-29 22:38:54 -07:00
parent 956a804dd5
commit a5ce9ab3d9
16 changed files with 3575 additions and 3514 deletions

View file

@ -25,7 +25,7 @@ static ISzAlloc SzAllocForLzma = { &AllocForLzma, &FreeForLzma };
SRes OnProgress(void *p, UInt64 inSize, UInt64 outSize) SRes OnProgress(void *p, UInt64 inSize, UInt64 outSize)
{ {
(void)p; (void) inSize; (void) outSize; (void)p; (void)inSize; (void)outSize;
return SZ_OK; return SZ_OK;
} }
@ -34,18 +34,18 @@ static ICompressProgress g_ProgressCallback = { &OnProgress };
STATIC STATIC
UINT64 UINT64
EFIAPI EFIAPI
RShiftU64( RShiftU64 (
UINT64 Operand, UINT64 Operand,
UINT32 Count UINT32 Count
) )
{ {
return Operand >> Count; return Operand >> Count;
} }
VOID VOID
SetEncodedSizeOfBuf( SetEncodedSizeOfBuf (
UINT64 EncodedSize, UINT64 EncodedSize,
UINT8 *EncodedData UINT8 *EncodedData
) )
{ {
INT32 Index; INT32 Index;
@ -61,10 +61,10 @@ UINT8 *EncodedData
INT32 INT32
EFIAPI EFIAPI
LzmaCompress( LzmaCompress(
CONST UINT8 *Source, CONST UINT8 *Source,
UINT32 SourceSize, UINTN SourceSize,
UINT8 *Destination, UINT8 *Destination,
UINT32 *DestinationSize UINTN *DestinationSize
) )
{ {
SRes LzmaResult; SRes LzmaResult;
@ -98,7 +98,7 @@ UINT32 *DestinationSize
*DestinationSize = destLen + LZMA_HEADER_SIZE; *DestinationSize = destLen + LZMA_HEADER_SIZE;
SetEncodedSizeOfBuf((UINT64)SourceSize, Destination); SetEncodedSizeOfBuf(SourceSize, Destination);
if (LzmaResult == SZ_OK) { if (LzmaResult == SZ_OK) {
return ERR_SUCCESS; return ERR_SUCCESS;

View file

@ -28,9 +28,9 @@ extern "C" {
EFIAPI EFIAPI
LzmaCompress( LzmaCompress(
const UINT8 *Source, const UINT8 *Source,
UINT32 SourceSize, UINTN SourceSize,
UINT8 *Destination, UINT8 *Destination,
UINT32 *DestinationSize UINTN *DestinationSize
); );
#ifdef __cplusplus #ifdef __cplusplus

View file

@ -20,8 +20,8 @@ WITHWARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
UINT64 UINT64
EFIAPI EFIAPI
LShiftU64( LShiftU64(
UINT64 Operand, UINT64 Operand,
UINT32 Count UINT32 Count
) )
{ {
return Operand << Count; return Operand << Count;
@ -40,7 +40,7 @@ Get the size of the uncompressed buffer by parsing EncodeData header.
*/ */
UINT64 UINT64
GetDecodedSizeOfBuf( GetDecodedSizeOfBuf(
UINT8 *EncodedData UINT8 *EncodedData
) )
{ {
UINT64 DecodedSize; UINT64 DecodedSize;
@ -88,18 +88,14 @@ buffer was returned ScratchSize.
INT32 INT32
EFIAPI EFIAPI
LzmaGetInfo( LzmaGetInfo(
CONST VOID *Source, CONST VOID *Source,
UINT32 SourceSize, UINTN SourceSize,
UINT32 *DestinationSize UINTN *DestinationSize
) )
{ {
UInt64 DecodedSize;
ASSERT(SourceSize >= LZMA_HEADER_SIZE); (void)SourceSize; ASSERT(SourceSize >= LZMA_HEADER_SIZE); (void)SourceSize;
DecodedSize = GetDecodedSizeOfBuf((UINT8*)Source); *DestinationSize = (UINTN)GetDecodedSizeOfBuf((UINT8*)Source);
*DestinationSize = (UINT32)DecodedSize;
return ERR_SUCCESS; return ERR_SUCCESS;
} }
@ -125,9 +121,9 @@ The source buffer specified by Source is corrupted
INT32 INT32
EFIAPI EFIAPI
LzmaDecompress( LzmaDecompress(
CONST VOID *Source, CONST VOID *Source,
UINT32 SourceSize, UINTN SourceSize,
VOID *Destination VOID *Destination
) )
{ {
SRes LzmaResult; SRes LzmaResult;

View file

@ -61,8 +61,8 @@ extern "C" {
EFIAPI EFIAPI
LzmaGetInfo( LzmaGetInfo(
const VOID *Source, const VOID *Source,
UINT32 SourceSize, UINTN SourceSize,
UINT32 *DestinationSize UINTN *DestinationSize
); );
/* /*
@ -88,7 +88,7 @@ extern "C" {
EFIAPI EFIAPI
LzmaDecompress( LzmaDecompress(
const VOID *Source, const VOID *Source,
UINT32 SourceSize, UINTN SourceSize,
VOID *Destination VOID *Destination
); );

View file

@ -52,9 +52,9 @@ UINT8 gPBIT = 4;
#define NT (CODE_BIT + 3) #define NT (CODE_BIT + 3)
#define TBIT 5 #define TBIT 5
#if NT > NP #if NT > NP
#define NPT NT #define NPT NT
#else #else
#define NPT NP #define NPT NP
#endif #endif
// //
@ -65,174 +65,160 @@ STATIC
VOID VOID
PutDword( PutDword(
IN UINT32 Data IN UINT32 Data
); );
STATIC STATIC
EFI_STATUS EFI_STATUS
AllocateMemory ( AllocateMemory(VOID);
);
STATIC STATIC
VOID VOID
FreeMemory ( FreeMemory(VOID);
);
STATIC STATIC
VOID VOID
InitSlide ( InitSlide(VOID);
);
STATIC STATIC
NODE NODE
Child ( Child(
IN NODE q, IN NODE q,
IN UINT8 c IN UINT8 c
); );
STATIC STATIC
VOID VOID
MakeChild ( MakeChild(
IN NODE q, IN NODE q,
IN UINT8 c, IN UINT8 c,
IN NODE r IN NODE r
); );
STATIC STATIC
VOID VOID
Split ( Split(
IN NODE Old IN NODE Old
); );
STATIC STATIC
VOID VOID
InsertNode ( InsertNode(VOID);
);
STATIC STATIC
VOID VOID
DeleteNode ( DeleteNode(VOID);
);
STATIC STATIC
VOID VOID
GetNextMatch ( GetNextMatch(VOID);
);
STATIC STATIC
EFI_STATUS EFI_STATUS
Encode ( Encode(VOID);
);
STATIC STATIC
VOID VOID
CountTFreq ( CountTFreq(VOID);
);
STATIC STATIC
VOID VOID
WritePTLen ( WritePTLen(
IN INT32 n, IN INT32 n,
IN INT32 nbit, IN INT32 nbit,
IN INT32 Special IN INT32 Special
); );
STATIC STATIC
VOID VOID
WriteCLen ( WriteCLen(VOID);
);
STATIC STATIC
VOID VOID
EncodeC ( EncodeC(
IN INT32 c IN INT32 c
); );
STATIC STATIC
VOID VOID
EncodeP ( EncodeP(
IN UINT32 p IN UINT32 p
); );
STATIC STATIC
VOID VOID
SendBlock ( SendBlock(VOID);
);
STATIC STATIC
VOID VOID
Output ( Output(
IN UINT32 c, IN UINT32 c,
IN UINT32 p IN UINT32 p
); );
STATIC STATIC
VOID VOID
HufEncodeStart ( HufEncodeStart(VOID);
);
STATIC STATIC
VOID VOID
HufEncodeEnd ( HufEncodeEnd(VOID);
);
STATIC STATIC
VOID VOID
MakeCrcTable ( MakeCrcTable(VOID);
);
STATIC STATIC
VOID VOID
PutBits ( PutBits(
IN INT32 n, IN INT32 n,
IN UINT32 x IN UINT32 x
); );
STATIC STATIC
INT32 INT32
FreadCrc ( FreadCrc(
OUT UINT8 *p, OUT UINT8 *p,
IN INT32 n IN INT32 n
); );
STATIC STATIC
VOID VOID
InitPutBits ( InitPutBits(VOID);
);
STATIC STATIC
VOID VOID
CountLen ( CountLen(
IN INT32 i IN INT32 i
); );
STATIC STATIC
VOID VOID
MakeLen ( MakeLen(
IN INT32 Root IN INT32 Root
); );
STATIC STATIC
VOID VOID
DownHeap ( DownHeap(
IN INT32 i IN INT32 i
); );
STATIC STATIC
VOID VOID
MakeCode ( MakeCode(
IN INT32 n, IN INT32 n,
IN UINT8 Len[], IN UINT8 Len[],
OUT UINT16 Code[] OUT UINT16 Code[]
); );
STATIC STATIC
INT32 INT32
MakeTree ( MakeTree(
IN INT32 NParm, IN INT32 NParm,
IN UINT16 FreqParm[], IN UINT16 FreqParm[],
OUT UINT8 LenParm[], OUT UINT8 LenParm[],
OUT UINT16 CodeParm[] OUT UINT16 CodeParm[]
); );
// //
@ -248,8 +234,8 @@ STATIC UINT32 mBufSiz = 0, mOutputPos, mOutputMask, mSubBitBuf, mCrc;
STATIC UINT32 mCompSize, mOrigSize; STATIC UINT32 mCompSize, mOrigSize;
STATIC UINT16 *mFreq, *mSortPtr, mLenCnt[17], mLeft[2 * NC - 1], mRight[2 * NC - 1], STATIC UINT16 *mFreq, *mSortPtr, mLenCnt[17], mLeft[2 * NC - 1], mRight[2 * NC - 1],
mCrcTable[UINT8_MAX + 1], mCFreq[2 * NC - 1],mCCode[NC], mCrcTable[UINT8_MAX + 1], mCFreq[2 * NC - 1], mCCode[NC],
mPFreq[2 * NP - 1], mPTCode[NPT], mTFreq[2 * NT - 1]; mPFreq[2 * NP - 1], mPTCode[NPT], mTFreq[2 * NT - 1];
STATIC NODE mPos, mMatchPos, mAvail, *mPosition, *mParent, *mPrev, *mNext = NULL; STATIC NODE mPos, mMatchPos, mAvail, *mPosition, *mParent, *mPrev, *mNext = NULL;
@ -259,12 +245,12 @@ STATIC NODE mPos, mMatchPos, mAvail, *mPosition, *mParent, *mPrev, *mNext = NU
// //
EFI_STATUS EFI_STATUS
EfiCompress ( EfiCompress(
IN CONST VOID *SrcBuffer, IN CONST VOID *SrcBuffer,
IN UINT32 SrcSize, IN UINT32 SrcSize,
IN VOID *DstBuffer, IN VOID *DstBuffer,
IN OUT UINT32 *DstSize IN OUT UINT32 *DstSize
) )
/*++ /*++
Routine Description: Routine Description:
@ -311,7 +297,7 @@ Returns:
PutDword(0L); PutDword(0L);
PutDword(0L); PutDword(0L);
MakeCrcTable (); MakeCrcTable();
mOrigSize = mCompSize = 0; mOrigSize = mCompSize = 0;
mCrc = INIT_CRC; mCrc = INIT_CRC;
@ -321,7 +307,7 @@ Returns:
// //
Status = Encode(); Status = Encode();
if (EFI_ERROR (Status)) { if (EFI_ERROR(Status)) {
return EFI_OUT_OF_RESOURCES; return EFI_OUT_OF_RESOURCES;
} }
@ -336,7 +322,7 @@ Returns:
// Fill in compressed size and original size // Fill in compressed size and original size
// //
mDst = DstBuffer; mDst = DstBuffer;
PutDword(mCompSize+1); PutDword(mCompSize + 1);
PutDword(mOrigSize); PutDword(mOrigSize);
// //
@ -346,7 +332,8 @@ Returns:
if (mCompSize + 1 + 8 > *DstSize) { if (mCompSize + 1 + 8 > *DstSize) {
*DstSize = mCompSize + 1 + 8; *DstSize = mCompSize + 1 + 8;
return EFI_BUFFER_TOO_SMALL; return EFI_BUFFER_TOO_SMALL;
} else { }
else {
*DstSize = mCompSize + 1 + 8; *DstSize = mCompSize + 1 + 8;
return EFI_SUCCESS; return EFI_SUCCESS;
} }
@ -355,10 +342,10 @@ Returns:
EFI_STATUS EFI_STATUS
TianoCompress( TianoCompress(
IN CONST VOID *SrcBuffer, IN CONST VOID *SrcBuffer,
IN UINT32 SrcSize, IN UINT32 SrcSize,
IN VOID *DstBuffer, IN VOID *DstBuffer,
IN OUT UINT32 *DstSize IN OUT UINT32 *DstSize
) )
/*++ /*++
@ -453,7 +440,7 @@ STATIC
VOID VOID
PutDword( PutDword(
IN UINT32 Data IN UINT32 Data
) )
/*++ /*++
Routine Description: Routine Description:
@ -469,7 +456,7 @@ Returns: (VOID)
--*/ --*/
{ {
if (mDst < mDstUpperLimit) { if (mDst < mDstUpperLimit) {
*mDst++ = (UINT8)(((UINT8)(Data )) & 0xff); *mDst++ = (UINT8)(((UINT8)(Data)) & 0xff);
} }
if (mDst < mDstUpperLimit) { if (mDst < mDstUpperLimit) {
@ -487,7 +474,7 @@ Returns: (VOID)
STATIC STATIC
EFI_STATUS EFI_STATUS
AllocateMemory () AllocateMemory()
/*++ /*++
Routine Description: Routine Description:
@ -505,17 +492,20 @@ Returns:
{ {
UINT32 i; UINT32 i;
mText = malloc (WNDSIZ * 2 + MAXMATCH); mText = malloc(WNDSIZ * 2 + MAXMATCH);
for (i = 0 ; i < WNDSIZ * 2 + MAXMATCH; i ++) { if (NULL == mText)
return EFI_OUT_OF_RESOURCES;
for (i = 0; i < WNDSIZ * 2 + MAXMATCH; i++) {
mText[i] = 0; mText[i] = 0;
} }
mLevel = malloc ((WNDSIZ + UINT8_MAX + 1) * sizeof(*mLevel)); mLevel = malloc((WNDSIZ + UINT8_MAX + 1) * sizeof(*mLevel));
mChildCount = malloc ((WNDSIZ + UINT8_MAX + 1) * sizeof(*mChildCount)); mChildCount = malloc((WNDSIZ + UINT8_MAX + 1) * sizeof(*mChildCount));
mPosition = malloc ((WNDSIZ + UINT8_MAX + 1) * sizeof(*mPosition)); mPosition = malloc((WNDSIZ + UINT8_MAX + 1) * sizeof(*mPosition));
mParent = malloc (WNDSIZ * 2 * sizeof(*mParent)); mParent = malloc(WNDSIZ * 2 * sizeof(*mParent));
mPrev = malloc (WNDSIZ * 2 * sizeof(*mPrev)); mPrev = malloc(WNDSIZ * 2 * sizeof(*mPrev));
mNext = malloc ((MAX_HASH_VAL + 1) * sizeof(*mNext)); mNext = malloc((MAX_HASH_VAL + 1) * sizeof(*mNext));
mBufSiz = 16 * 1024U; mBufSiz = 16 * 1024U;
while ((mBuf = malloc(mBufSiz)) == NULL) { while ((mBuf = malloc(mBufSiz)) == NULL) {
@ -530,7 +520,7 @@ Returns:
} }
VOID VOID
FreeMemory () FreeMemory()
/*++ /*++
Routine Description: Routine Description:
@ -544,35 +534,35 @@ Returns: (VOID)
--*/ --*/
{ {
if (mText) { if (mText) {
free (mText); free(mText);
} }
if (mLevel) { if (mLevel) {
free (mLevel); free(mLevel);
} }
if (mChildCount) { if (mChildCount) {
free (mChildCount); free(mChildCount);
} }
if (mPosition) { if (mPosition) {
free (mPosition); free(mPosition);
} }
if (mParent) { if (mParent) {
free (mParent); free(mParent);
} }
if (mPrev) { if (mPrev) {
free (mPrev); free(mPrev);
} }
if (mNext) { if (mNext) {
free (mNext); free(mNext);
} }
if (mBuf) { if (mBuf) {
free (mBuf); free(mBuf);
} }
return; return;
@ -581,7 +571,7 @@ Returns: (VOID)
STATIC STATIC
VOID VOID
InitSlide () InitSlide()
/*++ /*++
Routine Description: Routine Description:
@ -617,10 +607,10 @@ Returns: (VOID)
STATIC STATIC
NODE NODE
Child ( Child(
IN NODE q, IN NODE q,
IN UINT8 c IN UINT8 c
) )
/*++ /*++
Routine Description: Routine Description:
@ -651,11 +641,11 @@ Returns:
STATIC STATIC
VOID VOID
MakeChild ( MakeChild(
IN NODE q, IN NODE q,
IN UINT8 c, IN UINT8 c,
IN NODE r IN NODE r
) )
/*++ /*++
Routine Description: Routine Description:
@ -687,8 +677,8 @@ Returns: (VOID)
STATIC STATIC
VOID VOID
Split ( Split (
NODE Old IN NODE Old
) )
/*++ /*++
Routine Description: Routine Description:
@ -723,7 +713,7 @@ Returns: (VOID)
STATIC STATIC
VOID VOID
InsertNode () InsertNode()
/*++ /*++
Routine Description: Routine Description:
@ -765,7 +755,8 @@ Returns: (VOID)
if (t < (NODE)WNDSIZ) { if (t < (NODE)WNDSIZ) {
mPosition[t] = (NODE)(mPos | PERC_FLAG); mPosition[t] = (NODE)(mPos | PERC_FLAG);
} }
} else { }
else {
// //
// Locate the target tree // Locate the target tree
@ -787,11 +778,12 @@ Returns: (VOID)
// Node split or creation is involved. // Node split or creation is involved.
// //
for ( ; ; ) { for (; ; ) {
if (r >= (NODE)WNDSIZ) { if (r >= (NODE)WNDSIZ) {
j = MAXMATCH; j = MAXMATCH;
mMatchPos = r; mMatchPos = r;
} else { }
else {
j = mLevel[r]; j = mLevel[r];
mMatchPos = (NODE)(mPosition[r] & ~PERC_FLAG); mMatchPos = (NODE)(mPosition[r] & ~PERC_FLAG);
} }
@ -838,7 +830,7 @@ Returns: (VOID)
STATIC STATIC
VOID VOID
DeleteNode () DeleteNode()
/*++ /*++
Routine Description: Routine Description:
@ -912,7 +904,7 @@ Returns: (VOID)
STATIC STATIC
VOID VOID
GetNextMatch () GetNextMatch()
/*++ /*++
Routine Description: Routine Description:
@ -941,7 +933,7 @@ Returns: (VOID)
STATIC STATIC
EFI_STATUS EFI_STATUS
Encode () Encode()
/*++ /*++
Routine Description: Routine Description:
@ -995,7 +987,8 @@ Returns:
// //
Output(mText[mPos - 1], 0); Output(mText[mPos - 1], 0);
} else { }
else {
// //
// Outputting a pointer is beneficial enough, do it. // Outputting a pointer is beneficial enough, do it.
@ -1019,7 +1012,7 @@ Returns:
STATIC STATIC
VOID VOID
CountTFreq () CountTFreq()
/*++ /*++
Routine Description: Routine Description:
@ -1052,15 +1045,19 @@ Returns: (VOID)
} }
if (Count <= 2) { if (Count <= 2) {
mTFreq[0] = (UINT16)(mTFreq[0] + Count); mTFreq[0] = (UINT16)(mTFreq[0] + Count);
} else if (Count <= 18) { }
else if (Count <= 18) {
mTFreq[1]++; mTFreq[1]++;
} else if (Count == 19) { }
else if (Count == 19) {
mTFreq[0]++; mTFreq[0]++;
mTFreq[1]++; mTFreq[1]++;
} else { }
else {
mTFreq[2]++; mTFreq[2]++;
} }
} else { }
else {
mTFreq[k + 2]++; mTFreq[k + 2]++;
} }
} }
@ -1068,11 +1065,11 @@ Returns: (VOID)
STATIC STATIC
VOID VOID
WritePTLen ( WritePTLen(
IN INT32 n, IN INT32 n,
IN INT32 nbit, IN INT32 nbit,
IN INT32 Special IN INT32 Special
) )
/*++ /*++
Routine Description: Routine Description:
@ -1100,7 +1097,8 @@ Returns: (VOID)
k = mPTLen[i++]; k = mPTLen[i++];
if (k <= 6) { if (k <= 6) {
PutBits(3, k); PutBits(3, k);
} else { }
else {
PutBits(k - 3, (1U << (k - 3)) - 2); PutBits(k - 3, (1U << (k - 3)) - 2);
} }
if (i == Special) { if (i == Special) {
@ -1114,7 +1112,7 @@ Returns: (VOID)
STATIC STATIC
VOID VOID
WriteCLen () WriteCLen()
/*++ /*++
Routine Description: Routine Description:
@ -1147,18 +1145,22 @@ Returns: (VOID)
for (k = 0; k < Count; k++) { for (k = 0; k < Count; k++) {
PutBits(mPTLen[0], mPTCode[0]); PutBits(mPTLen[0], mPTCode[0]);
} }
} else if (Count <= 18) { }
else if (Count <= 18) {
PutBits(mPTLen[1], mPTCode[1]); PutBits(mPTLen[1], mPTCode[1]);
PutBits(4, Count - 3); PutBits(4, Count - 3);
} else if (Count == 19) { }
else if (Count == 19) {
PutBits(mPTLen[0], mPTCode[0]); PutBits(mPTLen[0], mPTCode[0]);
PutBits(mPTLen[1], mPTCode[1]); PutBits(mPTLen[1], mPTCode[1]);
PutBits(4, 15); PutBits(4, 15);
} else { }
else {
PutBits(mPTLen[2], mPTCode[2]); PutBits(mPTLen[2], mPTCode[2]);
PutBits(CBIT, Count - 20); PutBits(CBIT, Count - 20);
} }
} else { }
else {
PutBits(mPTLen[k + 2], mPTCode[k + 2]); PutBits(mPTLen[k + 2], mPTCode[k + 2]);
} }
} }
@ -1166,18 +1168,18 @@ Returns: (VOID)
STATIC STATIC
VOID VOID
EncodeC ( EncodeC(
IN INT32 c IN INT32 c
) )
{ {
PutBits(mCLen[c], mCCode[c]); PutBits(mCLen[c], mCCode[c]);
} }
STATIC STATIC
VOID VOID
EncodeP ( EncodeP(
IN UINT32 p IN UINT32 p
) )
{ {
UINT32 c, q; UINT32 c, q;
@ -1195,7 +1197,7 @@ EncodeP (
STATIC STATIC
VOID VOID
SendBlock () SendBlock()
/*++ /*++
Routine Description: Routine Description:
@ -1219,12 +1221,14 @@ Returns: (VOID)
Root = MakeTree(NT, mTFreq, mPTLen, mPTCode); Root = MakeTree(NT, mTFreq, mPTLen, mPTCode);
if (Root >= NT) { if (Root >= NT) {
WritePTLen(NT, TBIT, 3); WritePTLen(NT, TBIT, 3);
} else { }
else {
PutBits(TBIT, 0); PutBits(TBIT, 0);
PutBits(TBIT, Root); PutBits(TBIT, Root);
} }
WriteCLen(); WriteCLen();
} else { }
else {
PutBits(TBIT, 0); PutBits(TBIT, 0);
PutBits(TBIT, 0); PutBits(TBIT, 0);
PutBits(CBIT, 0); PutBits(CBIT, 0);
@ -1233,7 +1237,8 @@ Returns: (VOID)
Root = MakeTree(NP, mPFreq, mPTLen, mPTCode); Root = MakeTree(NP, mPFreq, mPTLen, mPTCode);
if (Root >= NP) { if (Root >= NP) {
WritePTLen(NP, gPBIT, -1); WritePTLen(NP, gPBIT, -1);
} else { }
else {
PutBits(gPBIT, 0); PutBits(gPBIT, 0);
PutBits(gPBIT, Root); PutBits(gPBIT, Root);
} }
@ -1241,7 +1246,8 @@ Returns: (VOID)
for (i = 0; i < Size; i++) { for (i = 0; i < Size; i++) {
if (i % UINT8_BIT == 0) { if (i % UINT8_BIT == 0) {
Flags = mBuf[Pos++]; Flags = mBuf[Pos++];
} else { }
else {
Flags <<= 1; Flags <<= 1;
} }
if (Flags & (1U << (UINT8_BIT - 1))) { if (Flags & (1U << (UINT8_BIT - 1))) {
@ -1249,7 +1255,8 @@ Returns: (VOID)
k = mBuf[Pos++] << UINT8_BIT; k = mBuf[Pos++] << UINT8_BIT;
k += mBuf[Pos++]; k += mBuf[Pos++];
EncodeP(k); EncodeP(k);
} else { }
else {
EncodeC(mBuf[Pos++]); EncodeC(mBuf[Pos++]);
} }
} }
@ -1264,10 +1271,10 @@ Returns: (VOID)
STATIC STATIC
VOID VOID
Output ( Output(
IN UINT32 c, IN UINT32 c,
IN UINT32 p IN UINT32 p
) )
/*++ /*++
Routine Description: Routine Description:
@ -1294,12 +1301,12 @@ Returns: (VOID)
CPos = mOutputPos++; CPos = mOutputPos++;
mBuf[CPos] = 0; mBuf[CPos] = 0;
} }
mBuf[mOutputPos++] = (UINT8) c; mBuf[mOutputPos++] = (UINT8)c;
mCFreq[c]++; mCFreq[c]++;
if (c >= (1U << UINT8_BIT)) { if (c >= (1U << UINT8_BIT)) {
mBuf[CPos] |= mOutputMask; mBuf[CPos] |= mOutputMask;
mBuf[mOutputPos++] = (UINT8)(p >> UINT8_BIT); mBuf[mOutputPos++] = (UINT8)(p >> UINT8_BIT);
mBuf[mOutputPos++] = (UINT8) p; mBuf[mOutputPos++] = (UINT8)p;
c = 0; c = 0;
while (p) { while (p) {
p >>= 1; p >>= 1;
@ -1311,7 +1318,7 @@ Returns: (VOID)
STATIC STATIC
VOID VOID
HufEncodeStart () HufEncodeStart()
{ {
INT32 i; INT32 i;
@ -1328,7 +1335,7 @@ HufEncodeStart ()
STATIC STATIC
VOID VOID
HufEncodeEnd () HufEncodeEnd()
{ {
SendBlock(); SendBlock();
@ -1343,7 +1350,7 @@ HufEncodeEnd ()
STATIC STATIC
VOID VOID
MakeCrcTable () MakeCrcTable()
{ {
UINT32 i, j, r; UINT32 i, j, r;
@ -1352,7 +1359,8 @@ MakeCrcTable ()
for (j = 0; j < UINT8_BIT; j++) { for (j = 0; j < UINT8_BIT; j++) {
if (r & 1) { if (r & 1) {
r = (r >> 1) ^ CRCPOLY; r = (r >> 1) ^ CRCPOLY;
} else { }
else {
r >>= 1; r >>= 1;
} }
} }
@ -1362,10 +1370,10 @@ MakeCrcTable ()
STATIC STATIC
VOID VOID
PutBits ( PutBits(
IN INT32 n, IN INT32 n,
IN UINT32 x IN UINT32 x
) )
/*++ /*++
Routine Description: Routine Description:
@ -1385,7 +1393,8 @@ Returns: (VOID)
if (n < mBitCount) { if (n < mBitCount) {
mSubBitBuf |= x << (mBitCount -= n); mSubBitBuf |= x << (mBitCount -= n);
} else { }
else {
Temp = (UINT8)(mSubBitBuf | (x >> (n -= mBitCount))); Temp = (UINT8)(mSubBitBuf | (x >> (n -= mBitCount)));
if (mDst < mDstUpperLimit) { if (mDst < mDstUpperLimit) {
@ -1395,7 +1404,8 @@ Returns: (VOID)
if (n < UINT8_BIT) { if (n < UINT8_BIT) {
mSubBitBuf = x << (mBitCount = UINT8_BIT - n); mSubBitBuf = x << (mBitCount = UINT8_BIT - n);
} else { }
else {
Temp = (UINT8)(x >> (n - UINT8_BIT)); Temp = (UINT8)(x >> (n - UINT8_BIT));
if (mDst < mDstUpperLimit) { if (mDst < mDstUpperLimit) {
@ -1410,10 +1420,10 @@ Returns: (VOID)
STATIC STATIC
INT32 INT32
FreadCrc ( FreadCrc(
OUT UINT8 *p, OUT UINT8 *p,
IN INT32 n IN INT32 n
) )
/*++ /*++
Routine Description: Routine Description:
@ -1449,7 +1459,7 @@ Returns:
STATIC STATIC
VOID VOID
InitPutBits () InitPutBits()
{ {
mBitCount = UINT8_BIT; mBitCount = UINT8_BIT;
mSubBitBuf = 0; mSubBitBuf = 0;
@ -1457,9 +1467,9 @@ InitPutBits ()
STATIC STATIC
VOID VOID
CountLen ( CountLen(
IN INT32 i IN INT32 i
) )
/*++ /*++
Routine Description: Routine Description:
@ -1478,9 +1488,10 @@ Returns: (VOID)
if (i < mN) { if (i < mN) {
mLenCnt[(Depth < 16) ? Depth : 16]++; mLenCnt[(Depth < 16) ? Depth : 16]++;
} else { }
else {
Depth++; Depth++;
CountLen(mLeft [i]); CountLen(mLeft[i]);
CountLen(mRight[i]); CountLen(mRight[i]);
Depth--; Depth--;
} }
@ -1488,9 +1499,9 @@ Returns: (VOID)
STATIC STATIC
VOID VOID
MakeLen ( MakeLen(
IN INT32 Root IN INT32 Root
) )
/*++ /*++
Routine Description: Routine Description:
@ -1525,7 +1536,7 @@ Arguments:
for (i = 15; i > 0; i--) { for (i = 15; i > 0; i--) {
if (mLenCnt[i] != 0) { if (mLenCnt[i] != 0) {
mLenCnt[i]--; mLenCnt[i]--;
mLenCnt[i+1] += 2; mLenCnt[i + 1] += 2;
break; break;
} }
} }
@ -1541,9 +1552,9 @@ Arguments:
STATIC STATIC
VOID VOID
DownHeap ( DownHeap(
IN INT32 i IN INT32 i
) )
{ {
INT32 j, k; INT32 j, k;
@ -1567,11 +1578,11 @@ DownHeap (
STATIC STATIC
VOID VOID
MakeCode ( MakeCode(
IN INT32 n, IN INT32 n,
IN UINT8 Len[], IN UINT8 Len[],
OUT UINT16 Code[] OUT UINT16 Code[]
) )
/*++ /*++
Routine Description: Routine Description:
@ -1602,12 +1613,12 @@ Returns: (VOID)
STATIC STATIC
INT32 INT32
MakeTree ( MakeTree(
IN INT32 NParm, IN INT32 NParm,
IN UINT16 FreqParm[], IN UINT16 FreqParm[],
OUT UINT8 LenParm[], OUT UINT8 LenParm[],
OUT UINT16 CodeParm[] OUT UINT16 CodeParm[]
) )
/*++ /*++
Routine Description: Routine Description:

View file

@ -57,12 +57,11 @@ extern "C" {
--*/ --*/
EFI_STATUS EFI_STATUS
TianoCompress( TianoCompress(
CONST VOID *SrcBuffer, IN CONST VOID *SrcBuffer,
UINT32 SrcSize, IN UINT32 SrcSize,
VOID *DstBuffer, IN VOID *DstBuffer,
UINT32 *DstSize IN OUT UINT32 *DstSize
) );
;
EFI_STATUS EFI_STATUS
TianoCompressLegacy( TianoCompressLegacy(
@ -70,8 +69,7 @@ extern "C" {
UINT32 SrcSize, UINT32 SrcSize,
VOID *DstBuffer, VOID *DstBuffer,
UINT32 *DstSize UINT32 *DstSize
) );
;
/*++ /*++
Routine Description: Routine Description:
@ -97,20 +95,19 @@ extern "C" {
--*/ --*/
EFI_STATUS EFI_STATUS
EfiCompress( EfiCompress(
CONST VOID *SrcBuffer, IN CONST VOID *SrcBuffer,
UINT32 SrcSize, IN UINT32 SrcSize,
VOID *DstBuffer, IN VOID *DstBuffer,
UINT32 *DstSize IN OUT UINT32 *DstSize
) );
;
EFI_STATUS EFI_STATUS
EfiCompressLegacy( EfiCompressLegacy(
CONST VOID *SrcBuffer, CONST VOID *SrcBuffer,
UINT32 SrcSize, UINT32 SrcSize,
VOID *DstBuffer, VOID *DstBuffer,
UINT32 *DstSize UINT32 *DstSize
) );
;
#ifdef __cplusplus #ifdef __cplusplus
} }

File diff suppressed because it is too large Load diff

View file

@ -82,8 +82,8 @@ typedef struct {
STATIC STATIC
VOID VOID
FillBuf( FillBuf(
IN SCRATCH_DATA *Sd, IN SCRATCH_DATA *Sd,
IN UINT16 NumOfBits IN UINT16 NumOfBits
) )
/*++ /*++
@ -130,8 +130,8 @@ Returns: (VOID)
STATIC STATIC
UINT32 UINT32
GetBits( GetBits(
IN SCRATCH_DATA *Sd, IN SCRATCH_DATA *Sd,
IN UINT16 NumOfBits IN UINT16 NumOfBits
) )
/*++ /*++
@ -164,11 +164,11 @@ The bits that are popped out.
STATIC STATIC
UINT16 UINT16
MakeTable( MakeTable(
IN SCRATCH_DATA *Sd, IN SCRATCH_DATA *Sd,
IN UINT16 NumOfChar, IN UINT16 NumOfChar,
IN UINT8 *BitLen, IN UINT8 *BitLen,
IN UINT16 TableBits, IN UINT16 TableBits,
OUT UINT16 *Table OUT UINT16 *Table
) )
/*++ /*++
@ -324,7 +324,7 @@ BAD_TABLE - The table is corrupted.
STATIC STATIC
UINT32 UINT32
DecodeP( DecodeP(
IN SCRATCH_DATA *Sd IN SCRATCH_DATA *Sd
) )
/*++ /*++
@ -378,10 +378,10 @@ The position value decoded.
STATIC STATIC
UINT16 UINT16
ReadPTLen( ReadPTLen(
IN SCRATCH_DATA *Sd, IN SCRATCH_DATA *Sd,
IN UINT16 nn, IN UINT16 nn,
IN UINT16 nbit, IN UINT16 nbit,
IN UINT16 Special IN UINT16 Special
) )
/*++ /*++
@ -472,7 +472,7 @@ BAD_TABLE - Table is corrupted.
STATIC STATIC
VOID VOID
ReadCLen( ReadCLen(
SCRATCH_DATA *Sd SCRATCH_DATA *Sd
) )
/*++ /*++
@ -563,7 +563,7 @@ Returns: (VOID)
STATIC STATIC
UINT16 UINT16
DecodeC( DecodeC(
SCRATCH_DATA *Sd SCRATCH_DATA *Sd
) )
/*++ /*++
@ -630,7 +630,7 @@ The value decoded.
STATIC STATIC
VOID VOID
Decode( Decode(
SCRATCH_DATA *Sd SCRATCH_DATA *Sd
) )
/*++ /*++
@ -702,10 +702,10 @@ Returns: (VOID)
EFI_STATUS EFI_STATUS
GetInfo( GetInfo(
IN const VOID *Source, IN const VOID *Source,
IN UINT32 SrcSize, IN UINT32 SrcSize,
OUT UINT32 *DstSize, OUT UINT32 *DstSize,
OUT UINT32 *ScratchSize OUT UINT32 *ScratchSize
) )
/*++ /*++
@ -742,13 +742,13 @@ EFI_INVALID_PARAMETER - The source data is corrupted
EFI_STATUS EFI_STATUS
Decompress( Decompress(
IN const VOID *Source, IN const VOID *Source,
IN UINT32 SrcSize, IN UINT32 SrcSize,
IN OUT VOID *Destination, IN OUT VOID *Destination,
IN UINT32 DstSize, IN UINT32 DstSize,
IN OUT VOID *Scratch, IN OUT VOID *Scratch,
IN UINT32 ScratchSize, IN UINT32 ScratchSize,
IN UINT8 Version IN UINT8 Version
) )
/*++ /*++
@ -869,10 +869,10 @@ EFI_INVALID_PARAMETER - The source data is corrupted
EFI_STATUS EFI_STATUS
EFIAPI EFIAPI
EfiTianoGetInfo( EfiTianoGetInfo(
IN const VOID *Source, IN const VOID *Source,
IN UINT32 SrcSize, IN UINT32 SrcSize,
OUT UINT32 *DstSize, OUT UINT32 *DstSize,
OUT UINT32 *ScratchSize OUT UINT32 *ScratchSize
) )
/*++ /*++
@ -906,12 +906,12 @@ EFI_INVALID_PARAMETER - The source data is corrupted
EFI_STATUS EFI_STATUS
EFIAPI EFIAPI
EfiDecompress( EfiDecompress(
IN const VOID *Source, IN const VOID *Source,
IN UINT32 SrcSize, IN UINT32 SrcSize,
IN OUT VOID *Destination, IN OUT VOID *Destination,
IN UINT32 DstSize, IN UINT32 DstSize,
IN OUT VOID *Scratch, IN OUT VOID *Scratch,
IN UINT32 ScratchSize IN UINT32 ScratchSize
) )
/*++ /*++
@ -953,12 +953,12 @@ EFI_INVALID_PARAMETER - The source data is corrupted
EFI_STATUS EFI_STATUS
EFIAPI EFIAPI
TianoDecompress( TianoDecompress(
IN const VOID *Source, IN const VOID *Source,
IN UINT32 SrcSize, IN UINT32 SrcSize,
IN OUT VOID *Destination, IN OUT VOID *Destination,
IN UINT32 DstSize, IN UINT32 DstSize,
IN OUT VOID *Scratch, IN OUT VOID *Scratch,
IN UINT32 ScratchSize IN UINT32 ScratchSize
) )
/*++ /*++

View file

@ -38,12 +38,11 @@ extern "C" {
} EFI_TIANO_HEADER; } EFI_TIANO_HEADER;
EFI_STATUS EFI_STATUS
EFIAPI
EfiTianoGetInfo( EfiTianoGetInfo(
const VOID *Source, IN const VOID *Source,
UINT32 SrcSize, IN UINT32 SrcSize,
UINT32 *DstSize, OUT UINT32 *DstSize,
UINT32 *ScratchSize OUT UINT32 *ScratchSize
) )
/*++ /*++
@ -70,12 +69,12 @@ extern "C" {
EFI_STATUS EFI_STATUS
EFIAPI EFIAPI
EfiDecompress( EfiDecompress(
const VOID *Source, IN const VOID *Source,
UINT32 SrcSize, IN UINT32 SrcSize,
VOID *Destination, IN OUT VOID *Destination,
UINT32 DstSize, IN UINT32 DstSize,
VOID *Scratch, IN OUT VOID *Scratch,
UINT32 ScratchSize IN UINT32 ScratchSize
) )
/*++ /*++
@ -104,12 +103,12 @@ extern "C" {
EFI_STATUS EFI_STATUS
EFIAPI EFIAPI
TianoDecompress( TianoDecompress(
const VOID *Source, IN const VOID *Source,
UINT32 SrcSize, IN UINT32 SrcSize,
VOID *Destination, IN OUT VOID *Destination,
UINT32 DstSize, IN UINT32 DstSize,
VOID *Scratch, IN OUT VOID *Scratch,
UINT32 ScratchSize IN UINT32 ScratchSize
) )
/*++ /*++

View file

@ -52,8 +52,9 @@ F7731B4C-58A2-4DF4-8980-5645D39ECE58 10 P:0FBA6C24380F:0FBA7424380F
299D6F8B-2EC9-4E40-9EC6-DDAA7EBF5FD9 10 P:81E10080000033C1:9090909090909090 299D6F8B-2EC9-4E40-9EC6-DDAA7EBF5FD9 10 P:81E10080000033C1:9090909090909090
299D6F8B-2EC9-4E40-9EC6-DDAA7EBF5FD9 12 P:81E10080000033C1:9090909090909090 299D6F8B-2EC9-4E40-9EC6-DDAA7EBF5FD9 12 P:81E10080000033C1:9090909090909090
# PpmInitialize | Skylake-X # SiInit | Skylake-X
3FFCAE95-23CF-4967-94F5-16352F68E43B 10 P:742CB9E2000000:752CB9E2000000 D71C8BA4-4AF2-4D0D-B1BA-F2409F0C20D3 10 P:81E10080000033C1:9090909090909090
D71C8BA4-4AF2-4D0D-B1BA-F2409F0C20D3 12 P:81E10080000033C1:9090909090909090
# CpuInitPei | Skylake-X # PpmInitialize | Skylake-X, Kaby Lake-X
01359D99-9446-456D-ADA4-50A711C03ADA 12 P:BE0080000023CE0B:BE0000000023CE0B 3FFCAE95-23CF-4967-94F5-16352F68E43B 10 P:0FBAE80F:0FBAE00F

View file

@ -95,6 +95,7 @@ public:
UINT8 replace(const QModelIndex & index, const QByteArray & object, const UINT8 mode); UINT8 replace(const QModelIndex & index, const QByteArray & object, const UINT8 mode);
UINT8 remove(const QModelIndex & index); UINT8 remove(const QModelIndex & index);
UINT8 rebuild(const QModelIndex & index); UINT8 rebuild(const QModelIndex & index);
UINT8 doNotRebuild(const QModelIndex & index);
UINT8 dump(const QModelIndex & index, const QString & path, const QString & filter = QString()); UINT8 dump(const QModelIndex & index, const QString & path, const QString & filter = QString());
UINT8 patch(const QModelIndex & index, const QVector<PatchData> & patches); UINT8 patch(const QModelIndex & index, const QVector<PatchData> & patches);

View file

@ -150,6 +150,8 @@ QString actionTypeToQString(const UINT8 action)
return QObject::tr("Rebuild"); return QObject::tr("Rebuild");
case Actions::Rebase: case Actions::Rebase:
return QObject::tr("Rebase"); return QObject::tr("Rebase");
case Actions::DoNotRebuild:
return QObject::tr("Do not rebuild");
default: default:
return QObject::tr("Unknown"); return QObject::tr("Unknown");
} }

View file

@ -26,7 +26,8 @@ namespace Actions
Replace, Replace,
Remove, Remove,
Rebuild, Rebuild,
Rebase Rebase,
DoNotRebuild
}; };
} }

View file

@ -17,7 +17,7 @@
UEFITool::UEFITool(QWidget *parent) : UEFITool::UEFITool(QWidget *parent) :
QMainWindow(parent), QMainWindow(parent),
ui(new Ui::UEFITool), ui(new Ui::UEFITool),
version(tr("0.22.4")) version(tr("0.23.0"))
{ {
clipboard = QApplication::clipboard(); clipboard = QApplication::clipboard();
@ -43,6 +43,7 @@ version(tr("0.22.4"))
connect(ui->actionReplaceBody, SIGNAL(triggered()), this, SLOT(replaceBody())); connect(ui->actionReplaceBody, SIGNAL(triggered()), this, SLOT(replaceBody()));
connect(ui->actionRemove, SIGNAL(triggered()), this, SLOT(remove())); connect(ui->actionRemove, SIGNAL(triggered()), this, SLOT(remove()));
connect(ui->actionRebuild, SIGNAL(triggered()), this, SLOT(rebuild())); connect(ui->actionRebuild, SIGNAL(triggered()), this, SLOT(rebuild()));
connect(ui->actionDoNotRebuild, SIGNAL(triggered()), this, SLOT(doNotRebuild()));
connect(ui->actionMessagesCopy, SIGNAL(triggered()), this, SLOT(copyMessage())); connect(ui->actionMessagesCopy, SIGNAL(triggered()), this, SLOT(copyMessage()));
connect(ui->actionMessagesCopyAll, SIGNAL(triggered()), this, SLOT(copyAllMessages())); connect(ui->actionMessagesCopyAll, SIGNAL(triggered()), this, SLOT(copyAllMessages()));
connect(ui->actionMessagesClear, SIGNAL(triggered()), this, SLOT(clearMessages())); connect(ui->actionMessagesClear, SIGNAL(triggered()), this, SLOT(clearMessages()));
@ -146,6 +147,7 @@ void UEFITool::populateUi(const QModelIndex &current)
// Enable actions // Enable actions
ui->actionExtract->setDisabled(model->hasEmptyHeader(current) && model->hasEmptyBody(current)); ui->actionExtract->setDisabled(model->hasEmptyHeader(current) && model->hasEmptyBody(current));
ui->actionRebuild->setEnabled(type == Types::Volume || type == Types::File || type == Types::Section); ui->actionRebuild->setEnabled(type == Types::Volume || type == Types::File || type == Types::Section);
ui->actionDoNotRebuild->setEnabled(type== Types::Region || type == Types::Volume || type == Types::File || type == Types::Section);
ui->actionExtractBody->setDisabled(model->hasEmptyBody(current)); ui->actionExtractBody->setDisabled(model->hasEmptyBody(current));
ui->actionRemove->setEnabled(type == Types::Volume || type == Types::File || type == Types::Section); ui->actionRemove->setEnabled(type == Types::Volume || type == Types::File || type == Types::Section);
ui->actionInsertInto->setEnabled((type == Types::Volume && subtype != Subtypes::UnknownVolume) || ui->actionInsertInto->setEnabled((type == Types::Volume && subtype != Subtypes::UnknownVolume) ||
@ -220,6 +222,18 @@ void UEFITool::rebuild()
ui->actionSaveImageFile->setEnabled(true); ui->actionSaveImageFile->setEnabled(true);
} }
void UEFITool::doNotRebuild()
{
QModelIndex index = ui->structureTreeView->selectionModel()->currentIndex();
if (!index.isValid())
return;
UINT8 result = ffsEngine->doNotRebuild(index);
if (result == ERR_SUCCESS)
ui->actionSaveImageFile->setEnabled(true);
}
void UEFITool::remove() void UEFITool::remove()
{ {
QModelIndex index = ui->structureTreeView->selectionModel()->currentIndex(); QModelIndex index = ui->structureTreeView->selectionModel()->currentIndex();

View file

@ -78,6 +78,7 @@ public:
void replaceBody(); void replaceBody();
void rebuild(); void rebuild();
void doNotRebuild();
void remove(); void remove();

View file

@ -180,7 +180,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>800</width> <width>800</width>
<height>21</height> <height>31</height>
</rect> </rect>
</property> </property>
<widget class="QMenu" name="menuFile"> <widget class="QMenu" name="menuFile">
@ -225,6 +225,8 @@
</property> </property>
<addaction name="actionExtract"/> <addaction name="actionExtract"/>
<addaction name="separator"/> <addaction name="separator"/>
<addaction name="actionDoNotRebuild"/>
<addaction name="separator"/>
<addaction name="actionReplace"/> <addaction name="actionReplace"/>
</widget> </widget>
<widget class="QMenu" name="menuPaddingActions"> <widget class="QMenu" name="menuPaddingActions">
@ -243,6 +245,7 @@
<addaction name="actionExtractBody"/> <addaction name="actionExtractBody"/>
<addaction name="separator"/> <addaction name="separator"/>
<addaction name="actionRebuild"/> <addaction name="actionRebuild"/>
<addaction name="actionDoNotRebuild"/>
<addaction name="separator"/> <addaction name="separator"/>
<addaction name="actionInsertInto"/> <addaction name="actionInsertInto"/>
<addaction name="separator"/> <addaction name="separator"/>
@ -257,6 +260,7 @@
<addaction name="actionExtractBody"/> <addaction name="actionExtractBody"/>
<addaction name="separator"/> <addaction name="separator"/>
<addaction name="actionRebuild"/> <addaction name="actionRebuild"/>
<addaction name="actionDoNotRebuild"/>
<addaction name="separator"/> <addaction name="separator"/>
<addaction name="actionInsertInto"/> <addaction name="actionInsertInto"/>
<addaction name="actionInsertBefore"/> <addaction name="actionInsertBefore"/>
@ -275,6 +279,7 @@
<addaction name="actionExtractBody"/> <addaction name="actionExtractBody"/>
<addaction name="separator"/> <addaction name="separator"/>
<addaction name="actionRebuild"/> <addaction name="actionRebuild"/>
<addaction name="actionDoNotRebuild"/>
<addaction name="separator"/> <addaction name="separator"/>
<addaction name="actionInsertInto"/> <addaction name="actionInsertInto"/>
<addaction name="actionInsertBefore"/> <addaction name="actionInsertBefore"/>
@ -284,7 +289,6 @@
<addaction name="actionReplaceBody"/> <addaction name="actionReplaceBody"/>
<addaction name="separator"/> <addaction name="separator"/>
<addaction name="actionRemove"/> <addaction name="actionRemove"/>
<addaction name="separator"/>
</widget> </widget>
<widget class="QMenu" name="menuMessages"> <widget class="QMenu" name="menuMessages">
<property name="title"> <property name="title">
@ -536,6 +540,17 @@
<string>Ctrl+Shift+O</string> <string>Ctrl+Shift+O</string>
</property> </property>
</action> </action>
<action name="actionDoNotRebuild">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>&amp;Do not rebuild</string>
</property>
<property name="shortcut">
<string>Ctrl+Shift+Space</string>
</property>
</action>
</widget> </widget>
<layoutdefault spacing="6" margin="11"/> <layoutdefault spacing="6" margin="11"/>
<resources/> <resources/>