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