LibGfx/PortableFormat: Make read_whitespace
return an ErrorOr
This commit is contained in:
parent
74f893e9f4
commit
bab2113ec1
Notes:
sideshowbarker
2024-07-17 18:46:57 +09:00
Author: https://github.com/LucasChollet Commit: https://github.com/SerenityOS/serenity/commit/bab2113ec1 Pull-request: https://github.com/SerenityOS/serenity/pull/17831 Reviewed-by: https://github.com/kleinesfilmroellchen ✅ Reviewed-by: https://github.com/nico
3 changed files with 23 additions and 19 deletions
|
@ -39,7 +39,7 @@ bool read_image_data(PGMLoadingContext& context, Streamer& streamer)
|
|||
break;
|
||||
auto value = number_or_error.value();
|
||||
|
||||
if (!read_whitespace(context, streamer))
|
||||
if (read_whitespace(context, streamer).is_error())
|
||||
break;
|
||||
|
||||
color_data.append({ (u8)value, (u8)value, (u8)value });
|
||||
|
|
|
@ -27,21 +27,21 @@ bool read_image_data(PPMLoadingContext& context, Streamer& streamer)
|
|||
if (red_or_error.is_error())
|
||||
break;
|
||||
|
||||
if (!read_whitespace(context, streamer))
|
||||
if (read_whitespace(context, streamer).is_error())
|
||||
break;
|
||||
|
||||
auto const green_or_error = read_number(streamer);
|
||||
if (green_or_error.is_error())
|
||||
break;
|
||||
|
||||
if (!read_whitespace(context, streamer))
|
||||
if (read_whitespace(context, streamer).is_error())
|
||||
break;
|
||||
|
||||
auto const blue_or_error = read_number(streamer);
|
||||
if (blue_or_error.is_error())
|
||||
break;
|
||||
|
||||
if (!read_whitespace(context, streamer))
|
||||
if (read_whitespace(context, streamer).is_error())
|
||||
break;
|
||||
|
||||
Color color { (u8)red_or_error.value(), (u8)green_or_error.value(), (u8)blue_or_error.value() };
|
||||
|
|
|
@ -109,25 +109,29 @@ static bool read_magic_number(TContext& context, Streamer& streamer)
|
|||
}
|
||||
|
||||
template<typename TContext>
|
||||
static bool read_whitespace(TContext& context, Streamer& streamer)
|
||||
static ErrorOr<void> read_whitespace(TContext& context, Streamer& streamer)
|
||||
{
|
||||
bool exist = false;
|
||||
bool is_first_char = true;
|
||||
u8 byte {};
|
||||
|
||||
while (streamer.read(byte)) {
|
||||
if (byte == ' ' || byte == '\t' || byte == '\n' || byte == '\r') {
|
||||
exist = true;
|
||||
} else if (byte == '#') {
|
||||
if (byte == '#') {
|
||||
streamer.step_back();
|
||||
if (read_comment(context, streamer).is_error())
|
||||
return false;
|
||||
} else {
|
||||
streamer.step_back();
|
||||
return exist;
|
||||
TRY(read_comment(context, streamer));
|
||||
continue;
|
||||
}
|
||||
if (byte != ' ' && byte != '\t' && byte != '\n' && byte != '\r') {
|
||||
streamer.step_back();
|
||||
if (is_first_char)
|
||||
return Error::from_string_literal("Can't read whitespace from stream");
|
||||
break;
|
||||
}
|
||||
|
||||
if (is_first_char)
|
||||
is_first_char = false;
|
||||
}
|
||||
|
||||
return exist;
|
||||
return {};
|
||||
}
|
||||
|
||||
template<typename TContext>
|
||||
|
@ -212,13 +216,13 @@ static bool decode(TContext& context)
|
|||
if (!read_magic_number(context, streamer))
|
||||
return false;
|
||||
|
||||
if (!read_whitespace(context, streamer))
|
||||
if (read_whitespace(context, streamer).is_error())
|
||||
return false;
|
||||
|
||||
if (!read_width(context, streamer))
|
||||
return false;
|
||||
|
||||
if (!read_whitespace(context, streamer))
|
||||
if (read_whitespace(context, streamer).is_error())
|
||||
return false;
|
||||
|
||||
if (!read_height(context, streamer))
|
||||
|
@ -229,14 +233,14 @@ static bool decode(TContext& context)
|
|||
return false;
|
||||
}
|
||||
|
||||
if (!read_whitespace(context, streamer))
|
||||
if (read_whitespace(context, streamer).is_error())
|
||||
return false;
|
||||
|
||||
if constexpr (requires { context.format_details.max_val; }) {
|
||||
if (!read_max_val(context, streamer))
|
||||
return false;
|
||||
|
||||
if (!read_whitespace(context, streamer))
|
||||
if (read_whitespace(context, streamer).is_error())
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue