commit 4a5eb434cbb25a8a23b056f5aad93e4c05677795
parent 6ce05c9a2449670dddc0fab602ee73bb2d88195a
Author: Drew DeVault <sir@cmpwn.com>
Date: Sat, 13 Jul 2024 15:16:38 +0200
debug::dwarf: eliminate use of bufio::read_* functions
This is the last internal consumer of these functions.
Signed-off-by: Drew DeVault <sir@cmpwn.com>
Diffstat:
1 file changed, 22 insertions(+), 18 deletions(-)
diff --git a/debug/dwarf/reader.ha b/debug/dwarf/reader.ha
@@ -109,21 +109,15 @@ fn read_tell(rd: *table_reader) size = {
fn read_sbyte(rd: *table_reader) (i8 | io::error) = {
read_advance(rd, size(i8))?;
-
- match (bufio::read_byte(rd.src)?) {
- case let byte: u8 =>
- return byte: i8;
- case io::EOF =>
- return 0: io::underread;
- };
+ return read_ubyte(rd)?: i8;
};
fn read_ubyte(rd: *table_reader) (u8 | io::error) = {
read_advance(rd, size(u8))?;
-
- match (bufio::read_byte(rd.src)?) {
- case let byte: u8 =>
- return byte;
+ let b: [1]u8 = [0...];
+ match (io::read(rd.src, b)?) {
+ case size =>
+ return b[0];
case io::EOF =>
return 0: io::underread;
};
@@ -213,12 +207,22 @@ fn read_slice(rd: *table_reader, amt: size) ([]u8 | io::error) = {
// Borrowed from underlying source
fn read_string(rd: *table_reader) (const str | io::error) = {
- // XXX: Leaks, should probably borrow from memio
- match (bufio::read_tok(rd.src, 0)?) {
- case let data: []u8 =>
- rd.length -= len(data) + 1;
- return strings::fromutf8(data)!;
- case io::EOF =>
- return 0: io::underread;
+ const start = io::tell(rd.src)!;
+ for (true) {
+ match (memio::borrowedread(rd.src, 1)) {
+ case let d: []u8 =>
+ if (d[0] == 0) {
+ break;
+ };
+ case io::EOF =>
+ return 0: io::underread;
+ };
};
+ const end = io::tell(rd.src)!;
+ const length = end - start;
+ io::seek(rd.src, start, io::whence::SET)!;
+
+ let data = read_slice(rd, length: size)?;
+ data = data[..len(data)-1]; // Trim \0
+ return strings::fromutf8(data)!;
};