// 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