aboutsummaryrefslogtreecommitdiff
path: root/bfd/libbfd.c
diff options
context:
space:
mode:
Diffstat (limited to 'bfd/libbfd.c')
-rw-r--r--bfd/libbfd.c13
1 files changed, 5 insertions, 8 deletions
diff --git a/bfd/libbfd.c b/bfd/libbfd.c
index 892f291..dd98e1b 100644
--- a/bfd/libbfd.c
+++ b/bfd/libbfd.c
@@ -1170,28 +1170,26 @@ _bfd_read_unsigned_leb128 (bfd *abfd ATTRIBUTE_UNUSED,
return result;
}
-/* Read in a LEB128 encoded value from ABFD starting at DATA.
+/* Read in a LEB128 encoded value from ABFD starting at *PTR.
If SIGN is true, return a signed LEB128 value.
- If LENGTH_RETURN is not NULL, return in it the number of bytes read.
+ *PTR is incremented by the number of bytes read.
No bytes will be read at address END or beyond. */
bfd_vma
_bfd_safe_read_leb128 (bfd *abfd ATTRIBUTE_UNUSED,
- bfd_byte *data,
- unsigned int *length_return,
+ bfd_byte **ptr,
bool sign,
const bfd_byte * const end)
{
bfd_vma result = 0;
- unsigned int num_read = 0;
unsigned int shift = 0;
unsigned char byte = 0;
+ bfd_byte *data = *ptr;
while (data < end)
{
byte = bfd_get_8 (abfd, data);
data++;
- num_read++;
if (shift < 8 * sizeof (result))
{
result |= ((bfd_vma) (byte & 0x7f)) << shift;
@@ -1201,8 +1199,7 @@ _bfd_safe_read_leb128 (bfd *abfd ATTRIBUTE_UNUSED,
break;
}
- if (length_return != NULL)
- *length_return = num_read;
+ *ptr = data;
if (sign && (shift < 8 * sizeof (result)) && (byte & 0x40))
result |= -((bfd_vma) 1 << shift);