mirror of
https://github.com/SerenityOS/serenity
synced 2024-10-06 16:09:30 +00:00
comm: Support reading arbitrarily long lines
This commit is contained in:
parent
9f0ab281ce
commit
4663b2fee6
|
@ -113,27 +113,27 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
|
||||||
int col3_count { 0 };
|
int col3_count { 0 };
|
||||||
ByteString file1_line;
|
ByteString file1_line;
|
||||||
ByteString file2_line;
|
ByteString file2_line;
|
||||||
Array<u8, PAGE_SIZE> buffer;
|
auto buffer = TRY(ByteBuffer::create_uninitialized(PAGE_SIZE));
|
||||||
|
|
||||||
auto should_continue_comparing_files = [&]() {
|
auto should_continue_comparing_files = [&]() {
|
||||||
if (read_file1) {
|
if (read_file1 && file1->is_eof())
|
||||||
auto can_read_file1_line = file1->can_read_line();
|
|
||||||
if (can_read_file1_line.is_error() || !can_read_file1_line.value())
|
|
||||||
return false;
|
return false;
|
||||||
}
|
if (read_file2 && file2->is_eof())
|
||||||
if (read_file2) {
|
|
||||||
auto can_read_file2_line = file2->can_read_line();
|
|
||||||
if (can_read_file2_line.is_error() || !can_read_file2_line.value())
|
|
||||||
return false;
|
return false;
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
while (should_continue_comparing_files()) {
|
while (should_continue_comparing_files()) {
|
||||||
if (read_file1)
|
if (read_file1) {
|
||||||
file1_line = TRY(file1->read_line(buffer));
|
file1_line = TRY(file1->read_line_with_resize(buffer));
|
||||||
if (read_file2)
|
if (file1_line.is_empty() && file1->is_eof())
|
||||||
file2_line = TRY(file2->read_line(buffer));
|
break;
|
||||||
|
}
|
||||||
|
if (read_file2) {
|
||||||
|
file2_line = TRY(file2->read_line_with_resize(buffer));
|
||||||
|
if (file2_line.is_empty() && file2->is_eof())
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
int cmp_result = cmp(file1_line, file2_line);
|
int cmp_result = cmp(file1_line, file2_line);
|
||||||
|
|
||||||
|
@ -168,13 +168,10 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
|
||||||
}
|
}
|
||||||
|
|
||||||
auto process_remaining = [&](ByteString const& fmt, auto& file, int& count, bool print) {
|
auto process_remaining = [&](ByteString const& fmt, auto& file, int& count, bool print) {
|
||||||
while (true) {
|
while (!file->is_eof()) {
|
||||||
auto can_read_result = file->can_read_line();
|
|
||||||
if (can_read_result.is_error() || !can_read_result.value())
|
|
||||||
break;
|
|
||||||
++count;
|
++count;
|
||||||
auto line = file->read_line(buffer);
|
auto line = file->read_line_with_resize(buffer);
|
||||||
if (line.is_error())
|
if (line.is_error() || (line.value().is_empty() && file->is_eof()))
|
||||||
break;
|
break;
|
||||||
if (print)
|
if (print)
|
||||||
outln(fmt, line.value());
|
outln(fmt, line.value());
|
||||||
|
|
Loading…
Reference in a new issue