forked from OSchip/llvm-project
NFC: DataExtractor: use decodeULEB128 to implement getULEB128
llvm-svn: 364230
This commit is contained in:
parent
11cfa92a19
commit
8242f35d50
|
@ -10,6 +10,7 @@
|
|||
#include "llvm/Support/ErrorHandling.h"
|
||||
#include "llvm/Support/Host.h"
|
||||
#include "llvm/Support/SwapByteOrder.h"
|
||||
#include "llvm/Support/LEB128.h"
|
||||
using namespace llvm;
|
||||
|
||||
template <typename T>
|
||||
|
@ -145,24 +146,17 @@ StringRef DataExtractor::getCStrRef(uint32_t *OffsetPtr) const {
|
|||
}
|
||||
|
||||
uint64_t DataExtractor::getULEB128(uint32_t *offset_ptr) const {
|
||||
uint64_t result = 0;
|
||||
if (Data.empty())
|
||||
assert(*offset_ptr <= Data.size());
|
||||
|
||||
const char *error;
|
||||
unsigned bytes_read;
|
||||
uint64_t result = decodeULEB128(
|
||||
reinterpret_cast<const uint8_t *>(Data.data() + *offset_ptr), &bytes_read,
|
||||
reinterpret_cast<const uint8_t *>(Data.data() + Data.size()), &error);
|
||||
if (error)
|
||||
return 0;
|
||||
|
||||
unsigned shift = 0;
|
||||
uint32_t offset = *offset_ptr;
|
||||
uint8_t byte = 0;
|
||||
|
||||
while (isValidOffset(offset)) {
|
||||
byte = Data[offset++];
|
||||
result |= uint64_t(byte & 0x7f) << shift;
|
||||
shift += 7;
|
||||
if ((byte & 0x80) == 0) {
|
||||
*offset_ptr = offset;
|
||||
return result;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
*offset_ptr += bytes_read;
|
||||
return result;
|
||||
}
|
||||
|
||||
int64_t DataExtractor::getSLEB128(uint32_t *offset_ptr) const {
|
||||
|
|
Loading…
Reference in New Issue