xref: /aosp_15_r20/external/bsdiff/utils.cc (revision a3a45f308bd90ef1a6e6a5e8fb92fe449b895909)
1 // Copyright 2018 The Chromium OS Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "bsdiff/utils.h"
6 
7 namespace bsdiff {
8 
ParseInt64(const uint8_t * buf)9 int64_t ParseInt64(const uint8_t* buf) {
10   // BSPatch uses a non-standard encoding of integers.
11   // Highest bit of that integer is used as a sign bit, 1 = negative
12   // and 0 = positive.
13   // Therefore, if the highest bit is set, flip it, then do 2's complement
14   // to get the integer in standard form
15   int64_t result = buf[7] & 0x7F;
16   for (int i = 6; i >= 0; i--) {
17     result <<= 8;
18     result |= buf[i];
19   }
20 
21   if (buf[7] & 0x80)
22     result = -result;
23   return result;
24 }
25 
26 }  // namespace bsdiff
27