diff --git a/libos/include/os/File.h b/libos/include/os/File.h index 25f174bf..0f32277a 100644 --- a/libos/include/os/File.h +++ b/libos/include/os/File.h @@ -34,8 +34,10 @@ namespace os Result write(const Buffer& buf); Result read_line(); + Result read_all_as_string(); Result read(Buffer& buf, usize size); + Result read_all(); Result getchar(); diff --git a/libos/src/File.cpp b/libos/src/File.cpp index 9eb8b872..9a3e5676 100644 --- a/libos/src/File.cpp +++ b/libos/src/File.cpp @@ -131,6 +131,36 @@ namespace os return String::from_cstring(data.data()); } + Result File::read_all_as_string() + { + StringBuilder sb; + + while (true) + { + auto line = TRY(read_line()); + if (line.is_empty()) break; + TRY(sb.add(line)); + } + + return sb.string(); + } + + Result File::read_all() + { + Vector data; + + while (true) + { + int c = TRY(getchar()); + if (c == -1) break; + TRY(data.try_append((u8)c)); + } + + Buffer buf; + TRY(buf.append_data(data.data(), data.size())); + return buf; + } + Result File::read(Buffer& buf, usize size) { u8* slice = TRY(buf.slice(0, size)); @@ -144,9 +174,9 @@ namespace os Result File::getchar() { - char value; + u8 value; - usize nread = TRY(raw_read((u8*)&value, 1)); + usize nread = TRY(raw_read(&value, 1)); if (!nread) return -1; return value;