You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
27 lines
718 B
27 lines
718 B
// Copyright 2018 The Chromium OS Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#include "bsdiff/utils.h"
|
|
|
|
namespace bsdiff {
|
|
|
|
int64_t ParseInt64(const uint8_t* buf) {
|
|
// BSPatch uses a non-standard encoding of integers.
|
|
// Highest bit of that integer is used as a sign bit, 1 = negative
|
|
// and 0 = positive.
|
|
// Therefore, if the highest bit is set, flip it, then do 2's complement
|
|
// to get the integer in standard form
|
|
int64_t result = buf[7] & 0x7F;
|
|
for (int i = 6; i >= 0; i--) {
|
|
result <<= 8;
|
|
result |= buf[i];
|
|
}
|
|
|
|
if (buf[7] & 0x80)
|
|
result = -result;
|
|
return result;
|
|
}
|
|
|
|
} // namespace bsdiff
|