Skip to content

Commit 5540510

Browse files
ericLemanissiertrflynn89
authored andcommitted
LibEDID: Propagate errors using TRY
1 parent 2065bc5 commit 5540510

File tree

1 file changed

+23
-38
lines changed

1 file changed

+23
-38
lines changed

Userland/Libraries/LibEDID/EDID.cpp

Lines changed: 23 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
#include <AK/Concepts.h>
88
#include <AK/Function.h>
99
#include <AK/QuickSort.h>
10+
#include <AK/Try.h>
1011
#include <LibEDID/EDID.h>
1112

1213
#ifndef KERNEL
@@ -185,16 +186,14 @@ T Parser::read_be(T const* field) const
185186
ErrorOr<Parser> Parser::from_bytes(ReadonlyBytes bytes)
186187
{
187188
Parser edid(bytes);
188-
if (auto parse_result = edid.parse(); parse_result.is_error())
189-
return parse_result.error();
189+
TRY(edid.parse());
190190
return edid;
191191
}
192192

193193
ErrorOr<Parser> Parser::from_bytes(ByteBuffer&& bytes)
194194
{
195195
Parser edid(move(bytes));
196-
if (auto parse_result = edid.parse(); parse_result.is_error())
197-
return parse_result.error();
196+
TRY(edid.parse());
198197
return edid;
199198
}
200199

@@ -683,7 +682,7 @@ ErrorOr<IterationDecision> Parser::for_each_established_timing(Function<Iteratio
683682
}
684683

685684
auto callback_decision = IterationDecision::Continue;
686-
auto result = for_each_display_descriptor([&](u8 descriptor_tag, auto& display_descriptor) {
685+
TRY(for_each_display_descriptor([&](u8 descriptor_tag, auto& display_descriptor) {
687686
if (descriptor_tag != (u8)Definitions::DisplayDescriptorTag::EstablishedTimings3)
688687
return IterationDecision::Continue;
689688

@@ -758,9 +757,7 @@ ErrorOr<IterationDecision> Parser::for_each_established_timing(Function<Iteratio
758757
byte_index++;
759758
}
760759
return IterationDecision::Break; // Only process one descriptor
761-
});
762-
if (result.is_error())
763-
return result.error();
760+
}));
764761
return callback_decision;
765762
}
766763

@@ -898,7 +895,7 @@ ErrorOr<IterationDecision> Parser::for_each_detailed_timing(Function<IterationDe
898895
}
899896

900897
Optional<Error> extension_error;
901-
auto result = for_each_extension_block([&](u8 block_id, u8 tag, u8, ReadonlyBytes bytes) {
898+
auto result = TRY(for_each_extension_block([&](u8 block_id, u8 tag, u8, ReadonlyBytes bytes) {
902899
if (tag != (u8)Definitions::ExtensionBlockTag::CEA_861)
903900
return IterationDecision::Continue;
904901

@@ -913,11 +910,9 @@ ErrorOr<IterationDecision> Parser::for_each_detailed_timing(Function<IterationDe
913910
}
914911

915912
return result.value();
916-
});
917-
if (!result.is_error()) {
918-
if (extension_error.has_value())
919-
return extension_error.value();
920-
}
913+
}));
914+
if (extension_error.has_value())
915+
return extension_error.value();
921916
return result;
922917
}
923918

@@ -978,7 +973,7 @@ ErrorOr<IterationDecision> Parser::for_each_display_descriptor(Function<Iteratio
978973
}
979974

980975
Optional<Error> extension_error;
981-
auto result = for_each_extension_block([&](u8, u8 tag, u8, ReadonlyBytes bytes) {
976+
auto result = TRY(for_each_extension_block([&](u8, u8 tag, u8, ReadonlyBytes bytes) {
982977
if (tag != (u8)Definitions::ExtensionBlockTag::CEA_861)
983978
return IterationDecision::Continue;
984979

@@ -993,11 +988,9 @@ ErrorOr<IterationDecision> Parser::for_each_display_descriptor(Function<Iteratio
993988
}
994989

995990
return result.value();
996-
});
997-
if (!result.is_error()) {
998-
if (extension_error.has_value())
999-
return extension_error.value();
1000-
}
991+
}));
992+
if (extension_error.has_value())
993+
return extension_error.value();
1001994
return result;
1002995
}
1003996

@@ -1075,38 +1068,30 @@ auto Parser::supported_resolutions() const -> ErrorOr<Vector<SupportedResolution
10751068
}
10761069
};
10771070

1078-
auto result = for_each_established_timing([&](auto& established_timing) {
1071+
TRY(for_each_established_timing([&](auto& established_timing) {
10791072
if (established_timing.source() != EstablishedTiming::Source::Manufacturer)
10801073
add_resolution(established_timing.width(), established_timing.height(), established_timing.refresh_rate());
10811074
return IterationDecision::Continue;
1082-
});
1083-
if (result.is_error())
1084-
return result.error();
1075+
}));
10851076

1086-
result = for_each_standard_timing([&](auto& standard_timing) {
1077+
TRY(for_each_standard_timing([&](auto& standard_timing) {
10871078
add_resolution(standard_timing.width(), standard_timing.height(), standard_timing.refresh_rate());
10881079
return IterationDecision::Continue;
1089-
});
1090-
if (result.is_error())
1091-
return result.error();
1080+
}));
10921081

10931082
size_t detailed_timing_index = 0;
1094-
result = for_each_detailed_timing([&](auto& detailed_timing, auto) {
1083+
TRY(for_each_detailed_timing([&](auto& detailed_timing, auto) {
10951084
bool is_preferred = detailed_timing_index++ == 0;
10961085
add_resolution(detailed_timing.horizontal_addressable_pixels(), detailed_timing.vertical_addressable_lines(), detailed_timing.refresh_rate(), is_preferred);
10971086
return IterationDecision::Continue;
1098-
});
1099-
if (result.is_error())
1100-
return result.error();
1087+
}));
11011088

1102-
result = for_each_short_video_descriptor([&](unsigned, bool, VIC::Details const& vic_details) {
1089+
TRY(for_each_short_video_descriptor([&](unsigned, bool, VIC::Details const& vic_details) {
11031090
add_resolution(vic_details.horizontal_pixels, vic_details.vertical_lines, vic_details.refresh_rate_hz());
11041091
return IterationDecision::Continue;
1105-
});
1106-
if (result.is_error())
1107-
return result.error();
1092+
}));
11081093

1109-
result = for_each_coordinated_video_timing([&](auto& coordinated_video_timing) {
1094+
TRY(for_each_coordinated_video_timing([&](auto& coordinated_video_timing) {
11101095
if (auto* dmt = DMT::find_timing_by_cvt(coordinated_video_timing.cvt_code())) {
11111096
add_resolution(dmt->horizontal_pixels, dmt->vertical_lines, dmt->vertical_frequency_hz());
11121097
} else {
@@ -1115,7 +1100,7 @@ auto Parser::supported_resolutions() const -> ErrorOr<Vector<SupportedResolution
11151100
dbgln("TODO: Decode CVT code: {:02x},{:02x},{:02x}", cvt.bytes[0], cvt.bytes[1], cvt.bytes[2]);
11161101
}
11171102
return IterationDecision::Continue;
1118-
});
1103+
}));
11191104

11201105
quick_sort(resolutions, [&](auto& info1, auto& info2) {
11211106
if (info1.width < info2.width)

0 commit comments

Comments
 (0)