[cfe-commits] r45113 - /cfe/trunk/Lex/HeaderMap.cpp
Chris Lattner
sabre at nondot.org
Mon Dec 17 10:59:44 PST 2007
Author: lattner
Date: Mon Dec 17 12:59:44 2007
New Revision: 45113
URL: http://llvm.org/viewvc/llvm-project?rev=45113&view=rev
Log:
simplify some code, using new scoped_ptr support. Fix a bug in the
cross-endianness case, where we checked the version in the wrong endianness.
Amusingly, the GCC logic that detects mixed endianness hmaps and rejects
them is dead for this very reason.
Modified:
cfe/trunk/Lex/HeaderMap.cpp
Modified: cfe/trunk/Lex/HeaderMap.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Lex/HeaderMap.cpp?rev=45113&r1=45112&r2=45113&view=diff
==============================================================================
--- cfe/trunk/Lex/HeaderMap.cpp (original)
+++ cfe/trunk/Lex/HeaderMap.cpp Mon Dec 17 12:59:44 2007
@@ -20,7 +20,8 @@
using namespace clang;
enum {
- HeaderMagicNumber = ('h' << 24) | ('m' << 16) | ('a' << 8) | 'p'
+ HeaderMagicNumber = ('h' << 24) | ('m' << 16) | ('a' << 8) | 'p',
+ HeaderVersion = 1
};
struct HMapHeader {
@@ -53,23 +54,21 @@
// We know the file is at least as big as the header, check it now.
const HMapHeader *Header = reinterpret_cast<const HMapHeader*>(FileStart);
- // Sniff it to see if it's a headermap.
- if (Header->Version != 1 || Header->Reserved != 0)
- return 0;
-
- // Check the magic number.
+ // Sniff it to see if it's a headermap by checking the magic number and
+ // version.
bool NeedsByteSwap;
- if (Header->Magic == HeaderMagicNumber)
+ if (Header->Magic == HeaderMagicNumber && Header->Version == HeaderVersion)
NeedsByteSwap = false;
- else if (Header->Magic == llvm::ByteSwap_32(HeaderMagicNumber))
+ else if (Header->Magic == llvm::ByteSwap_32(HeaderMagicNumber) &&
+ Header->Version == llvm::ByteSwap_16(HeaderVersion))
NeedsByteSwap = true; // Mixed endianness headermap.
else
return 0; // Not a header map.
+
+ if (Header->Reserved != 0) return 0;
// Okay, everything looks good, create the header map.
- HeaderMap *NewHM = new HeaderMap(FileBuffer.get(), NeedsByteSwap);
- FileBuffer.reset(); // Don't deallocate the buffer on return.
- return NewHM;
+ return new HeaderMap(FileBuffer.take(), NeedsByteSwap);
}
HeaderMap::~HeaderMap() {
More information about the cfe-commits
mailing list