From 13b04152b48fbb2fde0d0c967f13ba2e71e08edb Mon Sep 17 00:00:00 2001 From: Kevin Day Date: Sun, 11 Oct 2026 16:12:50 -0500 Subject: [PATCH] Progress: Fix some regressions and get tests working further. The `F_okay_eos` and `F_okay_stop` must actually be returned after all. Add additional comments in code as well as the documentation comments on the function to clarify. Switch to `fll_flags` from `found_data` for managing flags within a function. --- level_1/fl_fss/c/fss/basic.c | 24 ++++++++-- level_1/fl_fss/c/fss/basic_list.c | 72 +++++++++++++++------------- level_1/fl_fss/c/fss/basic_list.h | 4 ++ level_1/fl_fss/c/fss/embedded_list.c | 57 +++++++++++++--------- level_1/fl_fss/c/fss/extended_list.c | 35 +++++++------- level_1/fl_fss/c/private-fss-list.c | 70 ++++++++++++--------------- level_1/fl_fss/c/private-fss.c | 28 ++++++----- level_2/fll_fss/c/fss/basic_list.c | 2 + level_2/fll_fss/c/fss/payload.c | 27 +++++++---- 9 files changed, 183 insertions(+), 136 deletions(-) diff --git a/level_1/fl_fss/c/fss/basic.c b/level_1/fl_fss/c/fss/basic.c index 4d1eec178..10de92989 100644 --- a/level_1/fl_fss/c/fss/basic.c +++ b/level_1/fl_fss/c/fss/basic.c @@ -48,6 +48,22 @@ extern "C" { } if (F_status_is_error_not(state->status)) { + + // The EOS and stop cases only happen here when EOL is not found, so do not increment found.used. + if (range->start >= buffer.used) { + found->array[found->used].stop = buffer.used - 1; + state->status = F_okay_eos; + + return; + } + + if (range->start > range->stop) { + found->array[found->used].stop = range->stop; + state->status = F_okay_stop; + + return; + } + if (range->start > begin) { found->array[found->used].start = begin; found->array[found->used++].stop = range->start - 1; @@ -58,11 +74,11 @@ extern "C" { } state->status = f_utf_buffer_increment(buffer, range, 1); - } - if (F_status_is_error(state->status)) return; - - state->status = F_fss_found_content; + if (F_status_is_error_not(state->status)) { + state->status = F_fss_found_content; + } + } } #endif // _di_fl_fss_basic_content_read_ diff --git a/level_1/fl_fss/c/fss/basic_list.c b/level_1/fl_fss/c/fss/basic_list.c index 37eeb053a..6b7171403 100644 --- a/level_1/fl_fss/c/fss/basic_list.c +++ b/level_1/fl_fss/c/fss/basic_list.c @@ -133,8 +133,7 @@ extern "C" { } if (state->status == F_data_not) return; - if (F_status_is_error(state->status)) break; - if (range->start > range->stop || range->start >= buffer.used) break; + if (F_status_is_error(state->status) || range->start > range->stop || range->start >= buffer.used) break; if (state->status == F_okay_eol) { newline_last = line_start; @@ -186,7 +185,9 @@ extern "C" { else if ((flag_fl & ___fl_flag_has_graph_first___) && buffer.string[range->start] == f_fss_comment_s.string[0]) { ++range->start; - if (f_fss_is_combining_joiner(buffer, *range, state) == F_true) { + f_fss_skip_past_delimit(buffer, range, state); + + if (F_status_is_error_not(state->status) && f_fss_is_combining_joiner(buffer, *range, state) == F_true) { flag_fl &= ~___fl_flag_has_graph_first_do_escape___; slash_count = 0; @@ -227,7 +228,9 @@ extern "C" { // Found a valid object, set stop point to last newline. if (state->status == F_okay_eol) { if (newline_last == found->array[found->used].start) { - found->array[found->used++].stop = range->start++; + found->array[found->used].start = 1; + found->array[found->used++].stop = 0; + range->start = newline_last; } else { range->start = newline_last + 1; @@ -245,7 +248,9 @@ extern "C" { if ((flag_fl & ___fl_flag_has_graph_first___) && buffer.string[range->start] == f_fss_comment_s.string[0]) { previous = range->start++; - if (f_fss_is_combining_joiner(buffer, *range, state) == F_true) { + f_fss_skip_past_delimit(buffer, range, state); + + if (F_status_is_error_not(state->status) && f_fss_is_combining_joiner(buffer, *range, state) == F_true) { flag_fl &= ~___fl_flag_has_graph_first_do_escape___; slash_count = 0; @@ -304,24 +309,31 @@ extern "C" { return; } + // The EOS and stop cases only happen here when content is not found, so do not increment found.used. + if (range->start >= buffer.used) { + found->array[found->used].stop = buffer.used - 1; + state->status = F_okay_eos; + + return; + } + + if (range->start > range->stop) { + found->array[found->used].stop = range->stop; + state->status = F_okay_stop; + + return; + } + + state->status = F_fss_found_content; + if (range->start > begin) { - if (range->start >= buffer.used) { - found->array[found->used++].stop = buffer.used - 1; - } - else if (range->start > range->stop) { - found->array[found->used++].stop = range->stop; - } - else { - found->array[found->used++].stop = range->start - 1; - } + found->array[found->used++].stop = range->start - 1; } else { found->array[found->used].start = 1; found->array[found->used++].stop = 0; } - state->status = F_fss_found_content; - #undef ___fl_flag_do_escape___ #undef ___fl_flag_has_graph_first___ #undef ___fl_flag_has_delimit_comment___ @@ -576,14 +588,12 @@ extern "C" { f_fss_skip_past_delimit(content, range, state); - if (state->status == F_okay) { - if (f_fss_is_combining_joiner(content, *range, state)) { - if (state->status == F_combarudoo) { - flag_fl |= ___fl_flag_is_combining_graph___; - } - else if (state->status == F_bound) { - flag_fl |= ___fl_flag_is_joiner_graph___; - } + if (F_status_is_error_not(state->status) && f_fss_is_combining_joiner(content, *range, state) == F_true) { + if (state->status == F_combarudoo) { + flag_fl |= ___fl_flag_is_combining_graph___; + } + else if (state->status == F_bound) { + flag_fl |= ___fl_flag_is_joiner_graph___; } } @@ -801,14 +811,12 @@ extern "C" { f_fss_skip_past_delimit(object, range, state); - if (state->status == F_okay) { - if (f_fss_is_combining_joiner(object, *range, state)) { - if (state->status == F_combarudoo) { - flag_fl |= ___fl_flag_is_combining_graph___; - } - else if (state->status == F_bound) { - flag_fl |= ___fl_flag_is_joiner_graph___; - } + if (F_status_is_error_not(state->status) && f_fss_is_combining_joiner(object, *range, state) == F_true) { + if (state->status == F_combarudoo) { + flag_fl |= ___fl_flag_is_combining_graph___; + } + else if (state->status == F_bound) { + flag_fl |= ___fl_flag_is_joiner_graph___; } } diff --git a/level_1/fl_fss/c/fss/basic_list.h b/level_1/fl_fss/c/fss/basic_list.h index cbc1d9cdb..f29cac941 100644 --- a/level_1/fl_fss/c/fss/basic_list.h +++ b/level_1/fl_fss/c/fss/basic_list.h @@ -36,6 +36,10 @@ extern "C" { * * Combining spaces at the start must be handled by the caller to avoid F_complete_not_utf_start errors relating to combining characters. * + * The content is still technically valid on F_okay_eos and F_okay_stop state.status values, but because this function cannot actually know it will not increment found.used. + * However, the start and stop values that are technically valid content are still stored. + * The caller should check for the F_okay_eos and F_okay_stop values and increment found.used as desired. + * * @param buffer * The buffer to read from. * @param range diff --git a/level_1/fl_fss/c/fss/embedded_list.c b/level_1/fl_fss/c/fss/embedded_list.c index ae2114981..2e403a701 100644 --- a/level_1/fl_fss/c/fss/embedded_list.c +++ b/level_1/fl_fss/c/fss/embedded_list.c @@ -106,7 +106,9 @@ extern "C" { else if (buffer.string[range->start] == f_fss_slash_s.string[0] && (flag_fl & ___fl_flag_has_graph_first___)) { previous = range->start++; - if (f_fss_is_combining_joiner(buffer, *range, state) == F_true) { + f_fss_skip_past_delimit(buffer, range, state); + + if (F_status_is_error_not(state->status) && f_fss_is_combining_joiner(buffer, *range, state) == F_true) { // This cannot be a valid object close at this point, seek until EOL. f_fss_seek_to_eol(buffer, range, state); @@ -132,7 +134,9 @@ extern "C" { if (buffer.string[previous] == f_fss_slash_s.string[0]) { ++range->start; - if (f_fss_is_combining_joiner(buffer, *range, state) == F_true) { + f_fss_skip_past_delimit(buffer, range, state); + + if (F_status_is_error_not(state->status) && f_fss_is_combining_joiner(buffer, *range, state) == F_true) { cache->slashes->array[depth] = 0; flag_fl |= ___fl_flag_has_joiner_combining___; @@ -176,7 +180,9 @@ extern "C" { else if (buffer.string[range->start] == f_fss_embedded_list_open_s.string[0] || buffer.string[range->start] == f_fss_embedded_list_close_s.string[0]) { before_list_open = range->start++; - if (f_fss_is_combining_joiner(buffer, *range, state) == F_true) { + f_fss_skip_past_delimit(buffer, range, state); + + if (F_status_is_error_not(state->status) && f_fss_is_combining_joiner(buffer, *range, state) == F_true) { // This cannot be a valid object close at this point, seek until EOL. f_fss_seek_to_eol(buffer, range, state); @@ -291,7 +297,9 @@ extern "C" { else if (buffer.string[range->start] == f_fss_comment_s.string[0] && (flag_fl & ___fl_flag_has_graph_first___)) { previous = range->start++; - if (f_fss_is_combining_joiner(buffer, *range, state) == F_true) { + f_fss_skip_past_delimit(buffer, range, state); + + if (F_status_is_error_not(state->status) && f_fss_is_combining_joiner(buffer, *range, state) == F_true) { // This cannot be a valid object close at this point, seek until EOL. f_fss_seek_to_eol(buffer, range, state); @@ -480,7 +488,14 @@ extern "C" { return; } - state->status = F_fss_found_content; + if (range->start >= buffer.used) { + state->status = F_okay_eos; + } else if (range->start > range->stop) { + state->status = F_okay_stop; + } + else { + state->status = F_fss_found_content; + } return; } @@ -495,7 +510,9 @@ extern "C" { else if (buffer.string[range->start] == f_fss_comment_s.string[0] && (flag_fl & ___fl_flag_has_graph_first___)) { previous = range->start++; - if (f_fss_is_combining_joiner(buffer, *range, state) == F_true) { + f_fss_skip_past_delimit(buffer, range, state); + + if (F_status_is_error_not(state->status) && f_fss_is_combining_joiner(buffer, *range, state) == F_true) { // This cannot be a valid object close at this point, seek until EOL. f_fss_seek_to_eol(buffer, range, state); @@ -850,14 +867,12 @@ extern "C" { f_fss_skip_past_delimit(content, range, state); - if (state->status == F_okay) { - if (f_fss_is_combining_joiner(content, *range, state) == F_true) { - if (state->status == F_combarudoo) { - flag |= ___fl_flag_is_combining_graph___; - } - else if (state->status == F_bound) { - flag |= ___fl_flag_is_joiner_graph___; - } + if (F_status_is_error_not(state->status) && f_fss_is_combining_joiner(content, *range, state) == F_true) { + if (state->status == F_combarudoo) { + flag |= ___fl_flag_is_combining_graph___; + } + else if (state->status == F_bound) { + flag |= ___fl_flag_is_joiner_graph___; } } @@ -1081,14 +1096,12 @@ extern "C" { f_fss_skip_past_delimit(object, range, state); - if (state->status == F_okay) { - if (f_fss_is_combining_joiner(object, *range, state) == F_true) { - if (state->status == F_combarudoo) { - flag |= ___fl_flag_is_combining_graph___; - } - else if (state->status == F_bound) { - flag |= ___fl_flag_is_joiner_graph___; - } + if (F_status_is_error_not(state->status) && f_fss_is_combining_joiner(object, *range, state) == F_true) { + if (state->status == F_combarudoo) { + flag |= ___fl_flag_is_combining_graph___; + } + else if (state->status == F_bound) { + flag |= ___fl_flag_is_joiner_graph___; } } diff --git a/level_1/fl_fss/c/fss/extended_list.c b/level_1/fl_fss/c/fss/extended_list.c index b2b132af5..bde48a57c 100644 --- a/level_1/fl_fss/c/fss/extended_list.c +++ b/level_1/fl_fss/c/fss/extended_list.c @@ -147,6 +147,9 @@ extern "C" { else if (buffer.string[range->start] == f_fss_comment_s.string[0]) { previous = ++range->start; + f_fss_skip_past_delimit(buffer, range, state); + if (F_status_is_error(state->status)) break; + if (f_fss_is_combining_joiner(buffer, *range, state) == F_true) { f_fss_skip_past_combining_joiner(buffer, range, state); if (F_status_is_error(state->status)) break; @@ -214,7 +217,9 @@ extern "C" { if (buffer.string[range->start] == f_fss_comment_s.string[0]) { previous = ++range->start; - if (f_fss_is_combining_joiner(buffer, *range, state) == F_true) { + f_fss_skip_past_delimit(buffer, range, state); + + if (F_status_is_error_not(state->status) && f_fss_is_combining_joiner(buffer, *range, state) == F_true) { f_fss_skip_past_combining_joiner(buffer, range, state); if (F_status_is_error(state->status)) break; @@ -541,14 +546,12 @@ extern "C" { f_fss_skip_past_delimit(content, range, state); - if (state->status == F_okay) { - if (f_fss_is_combining_joiner(content, *range, state)) { - if (state->status == F_combarudoo) { - flag |= ___fl_flag_is_combining_graph___; - } - else if (state->status == F_bound) { - flag |= ___fl_flag_is_joiner_graph___; - } + if (F_status_is_error_not(state->status) && f_fss_is_combining_joiner(content, *range, state) == F_true) { + if (state->status == F_combarudoo) { + flag |= ___fl_flag_is_combining_graph___; + } + else if (state->status == F_bound) { + flag |= ___fl_flag_is_joiner_graph___; } } @@ -781,14 +784,12 @@ extern "C" { f_fss_skip_past_delimit(object, range, state); - if (state->status == F_okay) { - if (f_fss_is_combining_joiner(object, *range, state)) { - if (state->status == F_combarudoo) { - flag |= ___fl_flag_is_combining_graph___; - } - else if (state->status == F_bound) { - flag |= ___fl_flag_is_joiner_graph___; - } + if (F_status_is_error_not(state->status) && f_fss_is_combining_joiner(object, *range, state) == F_true) { + if (state->status == F_combarudoo) { + flag |= ___fl_flag_is_combining_graph___; + } + else if (state->status == F_bound) { + flag |= ___fl_flag_is_joiner_graph___; } } diff --git a/level_1/fl_fss/c/private-fss-list.c b/level_1/fl_fss/c/private-fss-list.c index 9940293e5..808ef1389 100644 --- a/level_1/fl_fss/c/private-fss-list.c +++ b/level_1/fl_fss/c/private-fss-list.c @@ -74,8 +74,8 @@ extern "C" { f_number_unsigned_t location = 0; f_number_unsigned_t slash_first = 0; f_number_unsigned_t slash_count = 0; - f_number_unsigned_t start = 1; - f_number_unsigned_t stop = 0; + f_number_unsigned_t line_start = 1; + f_number_unsigned_t line_stop = 0; uint8_t flag_fl = ___fl_flag_has_graph_first___; @@ -97,12 +97,10 @@ extern "C" { f_fss_skip_past_delimit(buffer, range, state); // If first slash has a combining/joiner following it, then there is no escaping at all but this is not a valid escaping slash. - if (F_status_is_error_not(state->status)) { - if (f_fss_is_combining_joiner(buffer, *range, state) == F_true) { - flag_fl &= ~___fl_flag_do_escape___; + if (F_status_is_error_not(state->status) && f_fss_is_combining_joiner(buffer, *range, state) == F_true) { + flag_fl &= ~___fl_flag_do_escape___; - f_fss_skip_past_combining_joiner(buffer, range, state); - } + f_fss_skip_past_combining_joiner(buffer, range, state); } if (flag_fl & ___fl_flag_do_escape___) { @@ -161,19 +159,17 @@ extern "C" { if (buffer.string[range->start] == list_open.string[0]) { flag_fl &= ~___fl_flag_has_graph_first___; - stop = range->start++; + line_stop = range->start++; f_fss_skip_past_delimit(buffer, range, state); - if (F_status_is_error_not(state->status)) { - if (f_fss_is_combining_joiner(buffer, *range, state) == F_true) { - flag_fl &= ~___fl_flag_do_escape___; - slash_count = 0; + if (F_status_is_error_not(state->status) && f_fss_is_combining_joiner(buffer, *range, state) == F_true) { + flag_fl &= ~___fl_flag_do_escape___; + slash_count = 0; - f_fss_skip_past_combining_joiner(buffer, range, state); + f_fss_skip_past_combining_joiner(buffer, range, state); - continue; - } + continue; } if (F_status_is_error_not(state->status)) { @@ -234,8 +230,8 @@ extern "C" { } // while range->start = found->stop + 1; - found->start = stop; - found->stop = stop; + found->start = line_stop; + found->stop = line_stop; state->status = f_utf_buffer_decrement(buffer, found, 1); @@ -247,7 +243,7 @@ extern "C" { } found->stop = found->start; - found->start = start; + found->start = line_start; state->status = F_fss_found_object; } else { @@ -260,20 +256,18 @@ extern "C" { } else if ((flag_fl & ___fl_flag_has_graph_first___) && buffer.string[range->start] == f_fss_comment_s.string[0]) { flag_fl &= ~___fl_flag_has_graph_first___; - start = slash_first; + line_start = slash_first; location = range->start++; f_fss_skip_past_delimit(buffer, range, state); - if (F_status_is_error_not(state->status)) { - if (f_fss_is_combining_joiner(buffer, *range, state) == F_true) { - flag_fl &= ~___fl_flag_do_escape___; - slash_count = 0; + if (F_status_is_error_not(state->status) && f_fss_is_combining_joiner(buffer, *range, state) == F_true) { + flag_fl &= ~___fl_flag_do_escape___; + slash_count = 0; - f_fss_skip_past_combining_joiner(buffer, range, state); + f_fss_skip_past_combining_joiner(buffer, range, state); - continue; - } + continue; } if (F_status_is_error(state->status)) break; @@ -291,11 +285,11 @@ extern "C" { } delimits->array[delimits->used++] = slash_first; - stop = range->start++; + line_stop = range->start++; } else { flag_fl &= ~___fl_flag_has_graph_first___; - stop = range->start; + line_stop = range->start; } continue; @@ -339,8 +333,8 @@ extern "C" { } if (state->status == F_okay_eol) { - found->start = start; - found->stop = stop + macro_f_utf_byte_width(buffer.string[stop]) - 1; + found->start = line_start; + found->stop = line_stop + macro_f_utf_byte_width(buffer.string[line_stop]) - 1; ++range->start; state->status = F_fss_found_object; @@ -349,30 +343,28 @@ extern "C" { if (flag_fl & ___fl_flag_has_graph_first___) { flag_fl &= ~___fl_flag_has_graph_first___; - start = 1; - stop = 0; + line_start = 1; + line_stop = 0; } else { - stop = range->start; + line_stop = range->start; } continue; } if (f_fss_is_space(buffer, *range, state) == F_false) { - if (F_status_is_error_not(state->status)) { - if (f_fss_is_combining_joiner(buffer, *range, state) == F_true) { - f_fss_skip_past_combining_joiner(buffer, range, state); - } + if (F_status_is_error_not(state->status) && f_fss_is_combining_joiner(buffer, *range, state) == F_true) { + f_fss_skip_past_combining_joiner(buffer, range, state); } if (F_status_is_error_not(state->status)) { if (flag_fl & ___fl_flag_has_graph_first___) { flag_fl &= ~___fl_flag_has_graph_first___; - start = range->start; + line_start = range->start; } - stop = range->start; + line_stop = range->start; } } diff --git a/level_1/fl_fss/c/private-fss.c b/level_1/fl_fss/c/private-fss.c index c6b37e5c0..3b6930801 100644 --- a/level_1/fl_fss/c/private-fss.c +++ b/level_1/fl_fss/c/private-fss.c @@ -96,12 +96,10 @@ extern "C" { } // If first slash has a combining/joiner following it, then there is no escaping at all so slash_first is the start of an object and is not considered an escaping character. - if (F_status_is_error_not(state->status)) { - if (f_fss_is_combining_joiner(buffer, *range, state) == F_true) { - flag_fl &= ~___fl_flag_do_escape___; + if (F_status_is_error_not(state->status) && f_fss_is_combining_joiner(buffer, *range, state) == F_true) { + flag_fl &= ~___fl_flag_do_escape___; - f_fss_skip_past_combining_joiner(buffer, range, state); - } + f_fss_skip_past_combining_joiner(buffer, range, state); } if (F_status_is_error(state->status)) return; @@ -194,6 +192,9 @@ extern "C" { else if (!(flag & 0x2) && (buffer.string[range->start] == f_fss_quote_single_s.string[0] || buffer.string[range->start] == f_fss_quote_double_s.string[0] || buffer.string[range->start] == f_fss_quote_grave_s.string[0])) { previous = range->start++; + f_fss_skip_past_delimit(buffer, range, state); + if (F_status_is_error(state->status)) return; + if (range->start <= range->stop && range->start < buffer.used) { if (f_fss_is_combining_joiner(buffer, *range, state) == F_false) { if (F_status_is_error(state->status)) return; @@ -332,9 +333,12 @@ extern "C" { flag_fl &= ~___fl_flag_has_joiner_combining___; state->status = f_utf_buffer_increment(buffer, range, 1); - if (F_status_is_error(state->status)) return; - if (f_fss_is_combining_joiner(buffer, *range, state) == F_true) { + if (F_status_is_error_not(state->status)) { + f_fss_skip_past_delimit(buffer, range, state); + } + + if (F_status_is_error_not(state->status) && f_fss_is_combining_joiner(buffer, *range, state) == F_true) { flag_fl |= ___fl_flag_has_joiner_combining___; } else { @@ -513,7 +517,9 @@ extern "C" { state->status = f_utf_buffer_increment(buffer, range, 1); if (F_status_is_error(state->status)) return; - if (f_fss_is_combining_joiner(buffer, *range, state) == F_true) { + f_fss_skip_past_delimit(buffer, range, state); + + if (F_status_is_error_not(state->status) && f_fss_is_combining_joiner(buffer, *range, state) == F_true) { flag_fl |= ___fl_flag_has_joiner_combining___; } else { @@ -724,9 +730,8 @@ extern "C" { } f_fss_skip_past_delimit(buffer, range, state); - if (F_status_is_error(state->status)) return; - if (f_fss_is_combining_joiner(buffer, *range, state) == F_true) { + if (F_status_is_error_not(state->status) && f_fss_is_combining_joiner(buffer, *range, state) == F_true) { f_fss_skip_past_combining_joiner(buffer, range, state); if (F_status_is_error_not(state->status)) continue; } @@ -749,9 +754,8 @@ extern "C" { } f_fss_skip_past_delimit(buffer, range, state); - if (F_status_is_error(state->status)) return; - if (f_fss_is_combining_joiner(buffer, *range, state) == F_true) { + if (F_status_is_error_not(state->status) && f_fss_is_combining_joiner(buffer, *range, state) == F_true) { f_fss_skip_past_combining_joiner(buffer, range, state); if (F_status_is_error_not(state->status)) continue; } diff --git a/level_2/fll_fss/c/fss/basic_list.c b/level_2/fll_fss/c/fss/basic_list.c index 40097009b..606a4ee14 100644 --- a/level_2/fll_fss/c/fss/basic_list.c +++ b/level_2/fll_fss/c/fss/basic_list.c @@ -67,6 +67,8 @@ extern "C" { } while (state->status == F_fss_found_object_not); + // The fl_fss_basic_list_content_read() returns F_okay_eos and F_okay_stop but doesn't increment found.used given that it has no way of knowing. + // This function will treat these states as known and declare that this is found content (and therefore found an object). if (state->status == F_okay_eos || state->status == F_okay_stop) { ++contents->array[contents->used++].used; ++objects->used; diff --git a/level_2/fll_fss/c/fss/payload.c b/level_2/fll_fss/c/fss/payload.c index c2ce66771..864a6ce46 100644 --- a/level_2/fll_fss/c/fss/payload.c +++ b/level_2/fll_fss/c/fss/payload.c @@ -25,8 +25,10 @@ extern "C" { f_status_t status = F_okay; f_number_unsigned_t initial_used = objects->used; - // 0x1 = found data, 0x2 = found payload object. - uint8_t found_data = 0; + #define ___fll_flag_has_data___ 0x1 + #define ___fll_flag_has_payload___ 0x2 + + uint8_t fll_flag = 0x0; do { state->status = f_memory_array_increase(state->step_small, sizeof(f_range_t), (void **) &objects->array, &objects->used, &objects->size); @@ -42,7 +44,7 @@ extern "C" { if (F_status_is_error(state->status)) return; if (f_compare_dynamic_partial_string(f_fss_payload_s.string, buffer, f_fss_payload_s.used, objects->array[objects->used]) == F_equal_to) { - found_data |= 0x2; + fll_flag |= ___fll_flag_has_payload___; } if (range->start >= range->stop || range->start >= buffer.used) { @@ -52,7 +54,7 @@ extern "C" { break; } - if (found_data & 0x1) { + if (fll_flag & ___fll_flag_has_data___) { state->status = F_status_set_error((range->start >= buffer.used) ? F_okay_eos : F_okay_stop); } else { @@ -63,7 +65,7 @@ extern "C" { } if (state->status == F_fss_found_object) { - found_data |= 0x1; + fll_flag |= ___fll_flag_has_data___; contents->array[contents->used].used = 0; if (f_compare_dynamic_partial_string(f_fss_payload_s.string, buffer, f_fss_payload_s.used, objects->array[objects->used]) == F_equal_to) { @@ -102,19 +104,21 @@ extern "C" { } if (state->status == F_fss_found_object_content_not) { - found_data |= 0x1; + fll_flag |= ___fll_flag_has_data___; break; } } while (state->status == F_fss_found_object_not); + // The fl_fss_basic_list_content_read() returns F_okay_eos and F_okay_stop but doesn't increment found.used given that it has no way of knowing. + // This function will treat these states as known and declare that this is found content (and therefore found an object). if (state->status == F_okay_eos || state->status == F_okay_stop) { ++contents->array[contents->used].used; ++objects->used; ++contents->used; // Returning without a "payload" is an error. - if (!(found_data & 0x2)) { + if (!(fll_flag & ___fll_flag_has_payload___)) { state->status = F_status_set_error(state->status); } @@ -127,7 +131,7 @@ extern "C" { if (objects->used > initial_used) { // Returning without a "payload" is an error. - if (found_data & 0x2) { + if (fll_flag & ___fll_flag_has_payload___) { state->status = (state->status == F_data_not_eos) ? F_okay_eos : F_okay_stop; } else { @@ -146,7 +150,7 @@ extern "C" { } if (state->status == F_fss_found_object_content_not) { - found_data |= 0x1; + fll_flag |= ___fll_flag_has_data___; status = f_memory_array_increase(state->step_small, sizeof(f_range_t), (void **) &contents->array[contents->used].array, &contents->array[contents->used].used, &contents->array[contents->used].size); @@ -168,7 +172,7 @@ extern "C" { } // Returning without a "payload" is an error. - if (found_data & 0x2) { + if (fll_flag & ___fll_flag_has_payload___) { state->status = (range->start >= buffer.used) ? F_okay_eos : F_okay_stop; } else { @@ -183,6 +187,9 @@ extern "C" { } while (range->start < F_string_t_size_d); + #undef ___fll_flag_has_data___ + #undef ___fll_flag_has_payload___ + state->status = F_status_is_error(F_number_overflow); } #endif // _di_fll_fss_payload_read_ -- 2.52.0