summaryrefslogtreecommitdiffstats
path: root/vendor/gix-features-0.35.0/src/decode.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-07 05:48:48 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-07 05:48:48 +0000
commitef24de24a82fe681581cc130f342363c47c0969a (patch)
tree0d494f7e1a38b95c92426f58fe6eaa877303a86c /vendor/gix-features-0.35.0/src/decode.rs
parentReleasing progress-linux version 1.74.1+dfsg1-1~progress7.99u1. (diff)
downloadrustc-ef24de24a82fe681581cc130f342363c47c0969a.tar.xz
rustc-ef24de24a82fe681581cc130f342363c47c0969a.zip
Merging upstream version 1.75.0+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'vendor/gix-features-0.35.0/src/decode.rs')
-rw-r--r--vendor/gix-features-0.35.0/src/decode.rs38
1 files changed, 38 insertions, 0 deletions
diff --git a/vendor/gix-features-0.35.0/src/decode.rs b/vendor/gix-features-0.35.0/src/decode.rs
new file mode 100644
index 000000000..0df38710d
--- /dev/null
+++ b/vendor/gix-features-0.35.0/src/decode.rs
@@ -0,0 +1,38 @@
+use std::io::Read;
+
+/// Decode variable int numbers from a `Read` implementation.
+///
+/// Note: currently overflow checks are only done in debug mode.
+#[inline]
+pub fn leb64_from_read(mut r: impl Read) -> Result<(u64, usize), std::io::Error> {
+ let mut b = [0u8; 1];
+ let mut i = 0;
+ r.read_exact(&mut b)?;
+ i += 1;
+ let mut value = b[0] as u64 & 0x7f;
+ while b[0] & 0x80 != 0 {
+ r.read_exact(&mut b)?;
+ i += 1;
+ debug_assert!(i <= 10, "Would overflow value at 11th iteration");
+ value += 1;
+ value = (value << 7) + (b[0] as u64 & 0x7f)
+ }
+ Ok((value, i))
+}
+
+/// Decode variable int numbers.
+#[inline]
+pub fn leb64(d: &[u8]) -> (u64, usize) {
+ let mut i = 0;
+ let mut c = d[i];
+ i += 1;
+ let mut value = c as u64 & 0x7f;
+ while c & 0x80 != 0 {
+ c = d[i];
+ i += 1;
+ debug_assert!(i <= 10, "Would overflow value at 11th iteration");
+ value += 1;
+ value = (value << 7) + (c as u64 & 0x7f)
+ }
+ (value, i)
+}