]> Kevux Git Server - fll/commitdiff
Security: F_data_not is not being handled leading to invalid read or write.
authorKevin Day <kevin@kevux.org>
Sun, 28 May 2023 02:07:42 +0000 (21:07 -0500)
committerKevin Day <kevin@kevux.org>
Sun, 28 May 2023 02:07:42 +0000 (21:07 -0500)
At some point I changed the behavior to return F_data_not when the main string (usually buffer) has used set to 0.
I failed to update the FSS processing functions to handle this.

The documentation comments are also not up to date in this regard and is now updated.

23 files changed:
level_1/fl_fss/c/fss/basic.c
level_1/fl_fss/c/fss/basic.h
level_1/fl_fss/c/fss/basic_list.c
level_1/fl_fss/c/fss/basic_list.h
level_1/fl_fss/c/fss/embedded_list.c
level_1/fl_fss/c/fss/embedded_list.h
level_1/fl_fss/c/fss/extended.c
level_1/fl_fss/c/fss/extended.h
level_1/fl_fss/c/fss/extended_list.c
level_1/fl_fss/c/fss/extended_list.h
level_1/fl_fss/c/private-fss.h
level_2/fll_fss/c/fss/basic.c
level_2/fll_fss/c/fss/basic.h
level_2/fll_fss/c/fss/basic_list.c
level_2/fll_fss/c/fss/basic_list.h
level_2/fll_fss/c/fss/embedded_list.c
level_2/fll_fss/c/fss/embedded_list.h
level_2/fll_fss/c/fss/extended.c
level_2/fll_fss/c/fss/extended.h
level_2/fll_fss/c/fss/extended_list.c
level_2/fll_fss/c/fss/extended_list.h
level_2/fll_fss/c/fss/payload.c
level_2/fll_fss/c/fss/payload.h

index a50962ac95c5dc339e6752b7e5952dbccfc90310..e52e1c1ffd98366b3c7eb19a88fcbbc626619104 100644 (file)
@@ -19,6 +19,7 @@ extern "C" {
 
     f_fss_skip_past_space(buffer, range, state);
     if (F_status_is_error(state->status)) return;
+    if (state->status == F_data_not) return;
 
     if (state->status == F_none_eol) {
       ++range->start;
@@ -85,6 +86,7 @@ extern "C" {
 
     f_fss_skip_past_delimit(content, range, state);
     if (F_status_is_error(state->status)) return;
+    if (state->status == F_data_not) return;
 
     if (range->start > range->stop || range->start >= content.used) {
 
index 9bdbb62b89bdfa143770f2c9f4a8070334ba06a8..f1a45ab95c81b1a1d6332dfd6b544af104ad1a45 100644 (file)
@@ -55,23 +55,24 @@ extern "C" {
  *   Error bit designates an error but must be passed along with F_interrupt.
  *   All other statuses are ignored.
  *
- * @return
- *   F_fss_found_content on success and content was found (start location is at end of content).
- *   F_fss_found_content_not on success and no content was found (start location is after character designating this is not a content).
- *   F_none_eos on success after reaching the end of the buffer (a valid object is not yet confirmed).
- *   F_none_stop on success after reaching stopping point (a valid object is not yet confirmed).
- *   F_data_not_eos no objects found after reaching the end of the buffer (essentially only comments are found).
- *   F_data_not_stop no data found after reaching stopping point (essentially only comments are found).
- *   F_end_not_group_eos if EOS was reached before the a group termination was reached.
- *   F_end_not_group_stop if stop point was reached before the a group termination was reached.
- *
- *   F_interrupt (with error bit) if stopping due to an interrupt.
- *   F_parameter (with error bit) if a parameter is invalid.
- *
- *   Errors (with error bit) from: f_fss_skip_past_delimit().
- *   Errors (with error bit) from: f_fss_skip_past_space().
- *   Errors (with error bit) from: f_string_ranges_increase().
- *   Errors (with error bit) from: f_utf_buffer_increment().
+ *   This alters state.status:
+ *     F_fss_found_content on success and content was found (start location is at end of content).
+ *     F_fss_found_content_not on success and no content was found (start location is after character designating this is not a content).
+ *     F_none_eos on success after reaching the end of the buffer (a valid object is not yet confirmed).
+ *     F_none_stop on success after reaching stopping point (a valid object is not yet confirmed).
+ *     F_data_not if buffer is empty (buffer.used is 0).
+ *     F_data_not_eos no objects found after reaching the end of the buffer (essentially only comments are found).
+ *     F_data_not_stop no data found after reaching stopping point (essentially only comments are found).
+ *     F_end_not_group_eos if EOS was reached before the a group termination was reached.
+ *     F_end_not_group_stop if stop point was reached before the a group termination was reached.
+ *
+ *     F_interrupt (with error bit) if stopping due to an interrupt.
+ *     F_parameter (with error bit) if a parameter is invalid.
+ *
+ *     Errors (with error bit) from: f_fss_skip_past_delimit().
+ *     Errors (with error bit) from: f_fss_skip_past_space().
+ *     Errors (with error bit) from: f_string_ranges_increase().
+ *     Errors (with error bit) from: f_utf_buffer_increment().
  *
  * @see f_fss_skip_past_delimit()
  * @see f_fss_skip_past_space()
@@ -111,20 +112,21 @@ extern "C" {
  *   When state.interrupt() returns, only F_interrupt and F_interrupt_not are processed.
  *   Error bit designates an error but must be passed along with F_interrupt.
  *
- * @return
- *   F_none on success.
- *   F_none_eos on success after reaching the end of the buffer.
- *   F_none_stop on success after reaching the range stop.
- *   F_data_not_stop no data to write due start location being greater than stop location.
- *   F_data_not_eos no data to write due start location being greater than or equal to buffer size.
+ *   This alters state.status:
+ *     F_none on success.
+ *     F_none_eos on success after reaching the end of the buffer.
+ *     F_none_stop on success after reaching the range stop.
+ *     F_data_not if content is empty (content.used is 0).
+ *     F_data_not_eos no data to write due start location being greater than or equal to buffer size.
+ *     F_data_not_stop no data to write due start location being greater than stop location.
  *
- *   F_interrupt (with error bit) if stopping due to an interrupt.
- *   F_none_eol (with error bit) after reaching an EOL, which is not supported by the standard.
- *   F_parameter (with error bit) if a parameter is invalid.
+ *     F_interrupt (with error bit) if stopping due to an interrupt.
+ *     F_none_eol (with error bit) after reaching an EOL, which is not supported by the standard.
+ *     F_parameter (with error bit) if a parameter is invalid.
  *
- *   Errors (with error bit) from: f_fss_skip_past_delimit().
- *   Errors (with error bit) from: f_string_dynamic_increase().
- *   Errors (with error bit) from: f_string_dynamic_increase_by().
+ *     Errors (with error bit) from: f_fss_skip_past_delimit().
+ *     Errors (with error bit) from: f_string_dynamic_increase().
+ *     Errors (with error bit) from: f_string_dynamic_increase_by().
  *
  * @see f_fss_skip_past_delimit()
  * @see f_string_dynamic_increase()
@@ -163,29 +165,30 @@ extern "C" {
  *   Error bit designates an error but must be passed along with F_interrupt.
  *   All other statuses are ignored.
  *
- * @return
- *   F_fss_found_object on success and object was found (start location is at end of object).
- *   F_fss_found_object_content_not on success but object ended at the line so there can be no content.
- *   F_fss_found_object_not on success and no object was found (start location is after character designating this is not an object).
- *   F_none_eos on success after reaching the end of the buffer (a valid object is not yet confirmed).
- *   F_none_stop on success after reaching stopping point (a valid object is not yet confirmed).
- *   F_data_not_eos no objects found after reaching the end of the buffer (essentially only comments are found).
- *   F_data_not_stop no data found after reaching stopping point (essentially only comments are found).
- *   F_end_not_group_eos if EOS was reached before the a group termination was reached.
- *   F_end_not_group_stop if stop point was reached before the a group termination was reached.
- *
- *   F_interrupt (with error bit) if stopping due to an interrupt.
- *   F_parameter (with error bit) if a parameter is invalid.
- *
- *   Errors (with error bit) from: f_array_lengths_increase().
- *   Errors (with error bit) from: f_array_lengths_increase_by().
- *   Errors (with error bit) from: f_fss_is_graph().
- *   Errors (with error bit) from: f_fss_is_space().
- *   Errors (with error bit) from: f_fss_is_zero_width().
- *   Errors (with error bit) from: f_fss_seek_to_eol().
- *   Errors (with error bit) from: f_fss_skip_past_delimit().
- *   Errors (with error bit) from: f_fss_skip_past_space().
- *   Errors (with error bit) from: f_utf_buffer_increment().
+ *   This alters state.status:
+ *     F_fss_found_object on success and object was found (start location is at end of object).
+ *     F_fss_found_object_content_not on success but object ended at the line so there can be no content.
+ *     F_fss_found_object_not on success and no object was found (start location is after character designating this is not an object).
+ *     F_none_eos on success after reaching the end of the buffer (a valid object is not yet confirmed).
+ *     F_none_stop on success after reaching stopping point (a valid object is not yet confirmed).
+ *     F_data_not if buffer is empty (buffer.used is 0).
+ *     F_data_not_eos no objects found after reaching the end of the buffer (essentially only comments are found).
+ *     F_data_not_stop no data found after reaching stopping point (essentially only comments are found).
+ *     F_end_not_group_eos if EOS was reached before the a group termination was reached.
+ *     F_end_not_group_stop if stop point was reached before the a group termination was reached.
+ *
+ *     F_interrupt (with error bit) if stopping due to an interrupt.
+ *     F_parameter (with error bit) if a parameter is invalid.
+ *
+ *     Errors (with error bit) from: f_array_lengths_increase().
+ *     Errors (with error bit) from: f_array_lengths_increase_by().
+ *     Errors (with error bit) from: f_fss_is_graph().
+ *     Errors (with error bit) from: f_fss_is_space().
+ *     Errors (with error bit) from: f_fss_is_zero_width().
+ *     Errors (with error bit) from: f_fss_seek_to_eol().
+ *     Errors (with error bit) from: f_fss_skip_past_delimit().
+ *     Errors (with error bit) from: f_fss_skip_past_space().
+ *     Errors (with error bit) from: f_utf_buffer_increment().
  *
  * @see f_array_lengths_increase()
  * @see f_array_lengths_increase_by()
@@ -235,22 +238,23 @@ extern "C" {
  *   Error bit designates an error but must be passed along with F_interrupt.
  *   All other statuses are ignored.
  *
- * @return
- *   F_none on success.
- *   F_none_eos on success after reaching the end of the buffer.
- *   F_none_stop on success after reaching the range stop.
- *   F_data_not_stop no data to write due start location being greater than stop location.
- *   F_data_not_eos no data to write due start location being greater than or equal to buffer size.
- *
- *   F_interrupt (with error bit) if stopping due to an interrupt.
- *   F_none_eol (with error bit) after reaching an EOL, which is not supported by the standard.
- *   F_parameter (with error bit) if a parameter is invalid.
- *
- *   Errors (with error bit) from: f_fss_is_space().
- *   Errors (with error bit) from: f_fss_skip_past_delimit().
- *   Errors (with error bit) from: f_fss_skip_past_space().
- *   Errors (with error bit) from: f_string_dynamic_increase().
- *   Errors (with error bit) from: f_string_dynamic_increase_by().
+ *   This alters state.status:
+ *     F_none on success.
+ *     F_none_eos on success after reaching the end of the buffer.
+ *     F_none_stop on success after reaching the range stop.
+ *     F_data_not if object is empty (object.used is 0).
+ *     F_data_not_eos no data to write due start location being greater than or equal to buffer size.
+ *     F_data_not_stop no data to write due start location being greater than stop location.
+ *
+ *     F_interrupt (with error bit) if stopping due to an interrupt.
+ *     F_none_eol (with error bit) after reaching an EOL, which is not supported by the standard.
+ *     F_parameter (with error bit) if a parameter is invalid.
+ *
+ *     Errors (with error bit) from: f_fss_is_space().
+ *     Errors (with error bit) from: f_fss_skip_past_delimit().
+ *     Errors (with error bit) from: f_fss_skip_past_space().
+ *     Errors (with error bit) from: f_string_dynamic_increase().
+ *     Errors (with error bit) from: f_string_dynamic_increase_by().
  *
  * @see f_fss_is_space()
  * @see f_fss_skip_past_delimit()
index 17d720da6100cb707aba5c886c8a15be1d1943f4..558d6262d9a19f870f8e8f28a02133e1969693ee 100644 (file)
@@ -22,6 +22,7 @@ extern "C" {
 
     f_fss_skip_past_delimit(buffer, range, state);
     if (F_status_is_error(state->status)) return;
+    if (state->status == F_data_not) return;
 
     if (range->start >= buffer.used || range->start > range->stop) {
       delimits->used = delimits_used;
@@ -303,6 +304,7 @@ extern "C" {
 
     f_fss_skip_past_delimit(content, range, state);
     if (F_status_is_error(state->status)) return;
+    if (state->status == F_data_not) return;
 
     if (state->status == F_none_stop || state->status == F_none_eos) {
       if (complete == f_fss_complete_full_e || complete == f_fss_complete_full_trim_e || complete == f_fss_complete_end_e) {
@@ -553,6 +555,7 @@ extern "C" {
 
     f_fss_skip_past_space(buffer, range, state);
     if (F_status_is_error(state->status)) return;
+    if (state->status == F_data_not) return;
 
     if (state->status == F_none_eol) {
 
@@ -856,6 +859,7 @@ extern "C" {
 
     f_fss_skip_past_delimit(object, range, state);
     if (F_status_is_error(state->status)) return;
+    if (state->status == F_data_not) return;
 
     if (state->status == F_none_stop || state->status == F_none_eos) {
       if (complete == f_fss_complete_partial_e || complete == f_fss_complete_partial_trim_e || complete == f_fss_complete_full_e || complete == f_fss_complete_full_trim_e) {
index c396bb74a027d9baf5b6ac24f3e24abfff24863e..0b2d75b6854b2e077f682f1cd100ad446f5dd8d9 100644 (file)
@@ -60,26 +60,27 @@ extern "C" {
  *   Error bit designates an error but must be passed along with F_interrupt.
  *   All other statuses are ignored.
  *
- * @return
- *   F_fss_found_content on success and content was found (start location is at end of content).
- *   F_fss_found_content_not on success and no content was found (start location is after character designating this is not a content).
- *   F_none_eos on success after reaching the end of the buffer (a valid object is not yet confirmed).
- *   F_none_stop on success after reaching stopping point (a valid object is not yet confirmed).
- *   F_data_not_eos no objects found after reaching the end of the buffer (essentially only comments are found).
- *   F_data_not_stop no data found after reaching stopping point (essentially only comments are found).
- *   F_end_not_group_eos if EOS was reached before the a group termination was reached.
- *   F_end_not_group_stop if stop point was reached before the a group termination was reached.
- *
- *   F_interrupt (with error bit) if stopping due to an interrupt.
- *   F_parameter (with error bit) if a parameter is invalid.
- *
- *   Errors (with error bit) from: f_array_lengths_increase().
- *   Errors (with error bit) from: f_array_lengths_increase_by().
- *   Errors (with error bit) from: f_fss_is_space().
- *   Errors (with error bit) from: f_fss_seek_to_eol().
- *   Errors (with error bit) from: f_fss_skip_past_delimit().
- *   Errors (with error bit) from: f_string_ranges_increase().
- *   Errors (with error bit) from: f_utf_buffer_increment().
+ *   This alters state.status:
+ *     F_fss_found_content on success and content was found (start location is at end of content).
+ *     F_fss_found_content_not on success and no content was found (start location is after character designating this is not a content).
+ *     F_none_eos on success after reaching the end of the buffer (a valid object is not yet confirmed).
+ *     F_none_stop on success after reaching stopping point (a valid object is not yet confirmed).
+ *     F_data_not if buffer is empty (buffer.used is 0).
+ *     F_data_not_eos no objects found after reaching the end of the buffer (essentially only comments are found).
+ *     F_data_not_stop no data found after reaching stopping point (essentially only comments are found).
+ *     F_end_not_group_eos if EOS was reached before the a group termination was reached.
+ *     F_end_not_group_stop if stop point was reached before the a group termination was reached.
+ *
+ *     F_interrupt (with error bit) if stopping due to an interrupt.
+ *     F_parameter (with error bit) if a parameter is invalid.
+ *
+ *     Errors (with error bit) from: f_array_lengths_increase().
+ *     Errors (with error bit) from: f_array_lengths_increase_by().
+ *     Errors (with error bit) from: f_fss_is_space().
+ *     Errors (with error bit) from: f_fss_seek_to_eol().
+ *     Errors (with error bit) from: f_fss_skip_past_delimit().
+ *     Errors (with error bit) from: f_string_ranges_increase().
+ *     Errors (with error bit) from: f_utf_buffer_increment().
  *
  * @see f_array_lengths_increase()
  * @see f_array_lengths_increase_by()
@@ -127,24 +128,25 @@ extern "C" {
  *   Error bit designates an error but must be passed along with F_interrupt.
  *   All other statuses are ignored.
  *
- * @return
- *   F_none on success.
- *   F_none_eol on success after reaching the end of the line.
- *   F_none_eos on success after reaching the end of the buffer.
- *   F_data_not_stop no data to write due start location being greater than stop location.
- *   F_data_not_eos no data to write due start location being greater than or equal to buffer size.
- *   F_none_stop on success after reaching stopping point.
- *
- *   F_interrupt (with error bit) if stopping due to an interrupt.
- *   F_parameter (with error bit) if a parameter is invalid.
- *
- *   Errors (with error bit) from: f_fss_is_graph().
- *   Errors (with error bit) from: f_fss_skip_past_delimit().
- *   Errors (with error bit) from: f_fss_skip_past_space().
- *   Errors (with error bit) from: f_string_dynamic_append().
- *   Errors (with error bit) from: f_string_dynamic_increase().
- *   Errors (with error bit) from: f_string_dynamic_increase_by().
- *   Errors (with error bit) from: f_utf_buffer_increment().
+ *   This alters state.status:
+ *     F_none on success.
+ *     F_none_eol on success after reaching the end of the line.
+ *     F_none_eos on success after reaching the end of the buffer.
+ *     F_data_not if content is empty (content.used is 0).
+ *     F_data_not_eos no data to write due start location being greater than or equal to buffer size.
+ *     F_data_not_stop no data to write due start location being greater than stop location.
+ *     F_none_stop on success after reaching stopping point.
+ *
+ *     F_interrupt (with error bit) if stopping due to an interrupt.
+ *     F_parameter (with error bit) if a parameter is invalid.
+ *
+ *     Errors (with error bit) from: f_fss_is_graph().
+ *     Errors (with error bit) from: f_fss_skip_past_delimit().
+ *     Errors (with error bit) from: f_fss_skip_past_space().
+ *     Errors (with error bit) from: f_string_dynamic_append().
+ *     Errors (with error bit) from: f_string_dynamic_increase().
+ *     Errors (with error bit) from: f_string_dynamic_increase_by().
+ *     Errors (with error bit) from: f_utf_buffer_increment().
  *
  * @see f_fss_is_graph()
  * @see f_fss_skip_past_delimit()
@@ -184,27 +186,28 @@ extern "C" {
  *   Error bit designates an error but must be passed along with F_interrupt.
  *   All other statuses are ignored.
  *
- * @return
- *   F_fss_found_object on success and object was found (start location is at end of object).
- *   F_fss_found_object_not on success and no object was found (start location is after character designating this is not an object).
- *   F_none_eos on success after reaching the end of the buffer (a valid object is not yet confirmed).
- *   F_none_stop on success after reaching stopping point (a valid object is not yet confirmed).
- *   F_data_not_eos no objects found after reaching the end of the buffer (essentially only comments are found).
- *   F_data_not_stop no data found after reaching stopping point (essentially only comments are found).
- *   F_end_not_group_eos if EOS was reached before the a group termination was reached.
- *   F_end_not_group_stop if stop point was reached before the a group termination was reached.
- *
- *   F_interrupt (with error bit) if stopping due to an interrupt.
- *   F_parameter (with error bit) if a parameter is invalid.
- *
- *   Errors (with error bit) from: f_array_lengths_increase_by().
- *   Errors (with error bit) from: f_fss_is_graph().
- *   Errors (with error bit) from: f_fss_is_space().
- *   Errors (with error bit) from: f_fss_is_zero_width().
- *   Errors (with error bit) from: f_fss_seek_to_eol().
- *   Errors (with error bit) from: f_fss_skip_past_delimit().
- *   Errors (with error bit) from: f_fss_skip_past_space().
- *   Errors (with error bit) from: f_utf_buffer_increment().
+ *   This alters state.status:
+ *     F_fss_found_object on success and object was found (start location is at end of object).
+ *     F_fss_found_object_not on success and no object was found (start location is after character designating this is not an object).
+ *     F_none_eos on success after reaching the end of the buffer (a valid object is not yet confirmed).
+ *     F_none_stop on success after reaching stopping point (a valid object is not yet confirmed).
+ *     F_data_not if buffer is empty (buffer.used is 0).
+ *     F_data_not_eos no objects found after reaching the end of the buffer (essentially only comments are found).
+ *     F_data_not_stop no data found after reaching stopping point (essentially only comments are found).
+ *     F_end_not_group_eos if EOS was reached before the a group termination was reached.
+ *     F_end_not_group_stop if stop point was reached before the a group termination was reached.
+ *
+ *     F_interrupt (with error bit) if stopping due to an interrupt.
+ *     F_parameter (with error bit) if a parameter is invalid.
+ *
+ *     Errors (with error bit) from: f_array_lengths_increase_by().
+ *     Errors (with error bit) from: f_fss_is_graph().
+ *     Errors (with error bit) from: f_fss_is_space().
+ *     Errors (with error bit) from: f_fss_is_zero_width().
+ *     Errors (with error bit) from: f_fss_seek_to_eol().
+ *     Errors (with error bit) from: f_fss_skip_past_delimit().
+ *     Errors (with error bit) from: f_fss_skip_past_space().
+ *     Errors (with error bit) from: f_utf_buffer_increment().
  *
  * @see f_array_lengths_increase_by()
  * @see f_fss_is_graph()
@@ -250,23 +253,24 @@ extern "C" {
  *   Error bit designates an error but must be passed along with F_interrupt.
  *   All other statuses are ignored.
  *
- * @return
- *   F_none on success.
- *   F_none_eos on success after reaching the end of the buffer.
- *   F_data_not_stop no data to write due start location being greater than stop location.
- *   F_data_not_eos no data to write due start location being greater than or equal to buffer size.
- *   F_none_stop on success after reaching stopping point.
- *
- *   F_interrupt (with error bit) if stopping due to an interrupt.
- *   F_none_eol (with error bit) after reaching an EOL, which is not supported by the standard.
- *   F_parameter (with error bit) if a parameter is invalid.
- *
- *   Errors (with error bit) from: f_fss_is_graph().
- *   Errors (with error bit) from: f_fss_is_space().
- *   Errors (with error bit) from: f_fss_skip_past_delimit().
- *   Errors (with error bit) from: f_string_dynamic_increase().
- *   Errors (with error bit) from: f_string_dynamic_increase_by().
- *   Errors (with error bit) from: f_utf_buffer_increment().
+ *   This alters state.status:
+ *     F_none on success.
+ *     F_none_eos on success after reaching the end of the buffer.
+ *     F_data_not if object is empty (object.used is 0).
+ *     F_data_not_eos no data to write due start location being greater than or equal to buffer size.
+ *     F_data_not_stop no data to write due start location being greater than stop location.
+ *     F_none_stop on success after reaching stopping point.
+ *
+ *     F_interrupt (with error bit) if stopping due to an interrupt.
+ *     F_none_eol (with error bit) after reaching an EOL, which is not supported by the standard.
+ *     F_parameter (with error bit) if a parameter is invalid.
+ *
+ *     Errors (with error bit) from: f_fss_is_graph().
+ *     Errors (with error bit) from: f_fss_is_space().
+ *     Errors (with error bit) from: f_fss_skip_past_delimit().
+ *     Errors (with error bit) from: f_string_dynamic_increase().
+ *     Errors (with error bit) from: f_string_dynamic_increase_by().
+ *     Errors (with error bit) from: f_utf_buffer_increment().
  *
  * @see f_fss_is_graph()
  * @see f_fss_is_space()
index 817e8ad4967513def8d81fa432a578d81340021e..6dfb271e7bd3e61a20ae28dd4ec91501a265d2e6 100644 (file)
@@ -19,6 +19,7 @@ extern "C" {
 
     f_fss_skip_past_delimit(buffer, range, state);
     if (F_status_is_error(state->status)) return;
+    if (state->status == F_data_not) return;
     if (state->status == F_none_eos || state->status == F_none_stop) return;
 
     state->status = f_fss_nest_increase(state->step_small, found);
@@ -805,6 +806,7 @@ extern "C" {
 
     f_fss_skip_past_delimit(content, range, state);
     if (F_status_is_error(state->status)) return;
+    if (state->status == F_data_not) return;
 
     if (state->status == F_none_eos) {
       state->status = F_data_not_eos;
@@ -1100,6 +1102,7 @@ extern "C" {
 
     f_fss_skip_past_space(buffer, range, state);
     if (F_status_is_error(state->status)) return;
+    if (state->status == F_data_not) return;
 
     if (state->status == F_none_eol) {
 
@@ -1439,6 +1442,7 @@ extern "C" {
 
     f_fss_skip_past_delimit(object, range, state);
     if (F_status_is_error(state->status)) return;
+    if (state->status == F_data_not) return;
 
     if (state->status == F_none_eos) {
       state->status = F_data_not_eos;
index 0b6a5c66e0209381e8aeaea2f78ccb8bcc4be88c..380a5b93b0d3af64b6f6490087209f9654eb2db3 100644 (file)
@@ -64,27 +64,28 @@ extern "C" {
  *   Error bit designates an error but must be passed along with F_interrupt.
  *   All other statuses are ignored.
  *
- * @return
- *   F_fss_found_content on success and content was found (start location is at end of content).
- *   F_fss_found_content_not on success and no content was found (start location is after character designating this is not a content).
- *   F_none_eos on success after reaching the end of the buffer (a valid object is not yet confirmed).
- *   F_none_stop on success after reaching stopping point (a valid object is not yet confirmed).
- *   F_data_not_eos no objects found after reaching the end of the buffer (essentially only comments are found).
- *   F_data_not_stop no data found after reaching stopping point (essentially only comments are found).
- *   F_end_not_group_eos if EOS was reached before the a group termination was reached.
- *   F_end_not_group_stop if stop point was reached before the a group termination was reached.
- *
- *   F_interrupt (with error bit) if stopping due to an interrupt.
- *   F_parameter (with error bit) if a parameter is invalid.
- *
- *   Errors (with error bit) from: f_array_lengths_increase().
- *   Errors (with error bit) from: f_array_lengths_increase_by().
- *   Errors (with error bit) from: f_fss_is_space().
- *   Errors (with error bit) from: f_fss_nest_increase().
- *   Errors (with error bit) from: f_fss_seek_to_eol().
- *   Errors (with error bit) from: f_fss_skip_past_delimit().
- *   Errors (with error bit) from: f_string_ranges_increase().
- *   Errors (with error bit) from: f_utf_buffer_increment().
+ *   This alters state.status:
+ *     F_fss_found_content on success and content was found (start location is at end of content).
+ *     F_fss_found_content_not on success and no content was found (start location is after character designating this is not a content).
+ *     F_none_eos on success after reaching the end of the buffer (a valid object is not yet confirmed).
+ *     F_none_stop on success after reaching stopping point (a valid object is not yet confirmed).
+ *     F_data_not if buffer is empty (buffer.used is 0).
+ *     F_data_not_eos no objects found after reaching the end of the buffer (essentially only comments are found).
+ *     F_data_not_stop no data found after reaching stopping point (essentially only comments are found).
+ *     F_end_not_group_eos if EOS was reached before the a group termination was reached.
+ *     F_end_not_group_stop if stop point was reached before the a group termination was reached.
+ *
+ *     F_interrupt (with error bit) if stopping due to an interrupt.
+ *     F_parameter (with error bit) if a parameter is invalid.
+ *
+ *     Errors (with error bit) from: f_array_lengths_increase().
+ *     Errors (with error bit) from: f_array_lengths_increase_by().
+ *     Errors (with error bit) from: f_fss_is_space().
+ *     Errors (with error bit) from: f_fss_nest_increase().
+ *     Errors (with error bit) from: f_fss_seek_to_eol().
+ *     Errors (with error bit) from: f_fss_skip_past_delimit().
+ *     Errors (with error bit) from: f_string_ranges_increase().
+ *     Errors (with error bit) from: f_utf_buffer_increment().
  *
  * @see f_array_lengths_increase()
  * @see f_array_lengths_increase_by()
@@ -138,23 +139,24 @@ extern "C" {
  *   Error bit designates an error but must be passed along with F_interrupt.
  *   All other statuses are ignored.
  *
- * @return
- *   F_none on success.
- *   F_none_eos on success after reaching the end of the buffer.
- *   F_data_not_stop no data to write due start location being greater than stop location.
- *   F_data_not_eos no data to write due start location being greater than or equal to buffer size.
- *   F_none_stop on success after reaching stopping point.
- *
- *   F_interrupt (with error bit) if stopping due to an interrupt.
- *   F_parameter (with error bit) if a parameter is invalid.
- *
- *   Errors (with error bit) from: f_fss_is_graph().
- *   Errors (with error bit) from: f_fss_skip_past_delimit().
- *   Errors (with error bit) from: f_fss_skip_past_space().
- *   Errors (with error bit) from: f_string_dynamic_append().
- *   Errors (with error bit) from: f_string_dynamic_increase().
- *   Errors (with error bit) from: f_string_dynamic_increase_by().
- *   Errors (with error bit) from: f_utf_buffer_increment().
+ *   This alters state.status:
+ *     F_none on success.
+ *     F_none_eos on success after reaching the end of the buffer.
+ *     F_data_not if content is empty (content.used is 0).
+ *     F_data_not_eos no data to write due start location being greater than or equal to buffer size.
+ *     F_data_not_stop no data to write due start location being greater than stop location.
+ *     F_none_stop on success after reaching stopping point.
+ *
+ *     F_interrupt (with error bit) if stopping due to an interrupt.
+ *     F_parameter (with error bit) if a parameter is invalid.
+ *
+ *     Errors (with error bit) from: f_fss_is_graph().
+ *     Errors (with error bit) from: f_fss_skip_past_delimit().
+ *     Errors (with error bit) from: f_fss_skip_past_space().
+ *     Errors (with error bit) from: f_string_dynamic_append().
+ *     Errors (with error bit) from: f_string_dynamic_increase().
+ *     Errors (with error bit) from: f_string_dynamic_increase_by().
+ *     Errors (with error bit) from: f_utf_buffer_increment().
  *
  * @see f_fss_is_graph()
  * @see f_fss_skip_past_delimit()
@@ -194,27 +196,28 @@ extern "C" {
  *   Error bit designates an error but must be passed along with F_interrupt.
  *   All other statuses are ignored.
  *
- * @return
- *   F_fss_found_object on success and object was found (start location is at end of object).
- *   F_fss_found_object_not on success and no object was found (start location is after character designating this is not an object).
- *   F_none_eos on success after reaching the end of the buffer (a valid object is not yet confirmed).
- *   F_none_stop on success after reaching stopping point (a valid object is not yet confirmed).
- *   F_data_not_eos no objects found after reaching the end of the buffer (essentially only comments are found).
- *   F_data_not_stop no data found after reaching stopping point (essentially only comments are found).
- *   F_end_not_group_eos if EOS was reached before the a group termination was reached.
- *   F_end_not_group_stop if stop point was reached before the a group termination was reached.
- *
- *   F_interrupt (with error bit) if stopping due to an interrupt.
- *   F_parameter (with error bit) if a parameter is invalid.
- *
- *   Errors (with error bit) from: f_array_lengths_increase_by().
- *   Errors (with error bit) from: f_fss_is_graph().
- *   Errors (with error bit) from: f_fss_is_space().
- *   Errors (with error bit) from: f_fss_is_zero_width().
- *   Errors (with error bit) from: f_fss_seek_to_eol().
- *   Errors (with error bit) from: f_fss_skip_past_delimit().
- *   Errors (with error bit) from: f_fss_skip_past_space().
- *   Errors (with error bit) from: f_utf_buffer_increment().
+ *   This alters state.status:
+ *     F_fss_found_object on success and object was found (start location is at end of object).
+ *     F_fss_found_object_not on success and no object was found (start location is after character designating this is not an object).
+ *     F_none_eos on success after reaching the end of the buffer (a valid object is not yet confirmed).
+ *     F_none_stop on success after reaching stopping point (a valid object is not yet confirmed).
+ *     F_data_not if buffer is empty (buffer.used is 0).
+ *     F_data_not_eos no objects found after reaching the end of the buffer (essentially only comments are found).
+ *     F_data_not_stop no data found after reaching stopping point (essentially only comments are found).
+ *     F_end_not_group_eos if EOS was reached before the a group termination was reached.
+ *     F_end_not_group_stop if stop point was reached before the a group termination was reached.
+ *
+ *     F_interrupt (with error bit) if stopping due to an interrupt.
+ *     F_parameter (with error bit) if a parameter is invalid.
+ *
+ *     Errors (with error bit) from: f_array_lengths_increase_by().
+ *     Errors (with error bit) from: f_fss_is_graph().
+ *     Errors (with error bit) from: f_fss_is_space().
+ *     Errors (with error bit) from: f_fss_is_zero_width().
+ *     Errors (with error bit) from: f_fss_seek_to_eol().
+ *     Errors (with error bit) from: f_fss_skip_past_delimit().
+ *     Errors (with error bit) from: f_fss_skip_past_space().
+ *     Errors (with error bit) from: f_utf_buffer_increment().
  *
  * @see f_array_lengths_increase_by()
  * @see f_fss_is_graph()
@@ -260,23 +263,24 @@ extern "C" {
  *   Error bit designates an error but must be passed along with F_interrupt.
  *   All other statuses are ignored.
  *
- * @return
- *   F_none on success.
- *   F_none_eos on success after reaching the end of the buffer.
- *   F_data_not_stop no data to write due start location being greater than stop location.
- *   F_data_not_eos no data to write due start location being greater than or equal to buffer size.
- *   F_none_stop on success after reaching stopping point.
- *
- *   F_interrupt (with error bit) if stopping due to an interrupt.
- *   F_none_eol (with error bit) after reaching an EOL, which is not supported by the standard.
- *   F_parameter (with error bit) if a parameter is invalid.
- *
- *   Errors (with error bit) from: f_fss_is_graph().
- *   Errors (with error bit) from: f_fss_is_space().
- *   Errors (with error bit) from: f_fss_skip_past_delimit().
- *   Errors (with error bit) from: f_string_dynamic_increase().
- *   Errors (with error bit) from: f_string_dynamic_increase_by().
- *   Errors (with error bit) from: f_utf_buffer_increment().
+ *   This alters state.status:
+ *     F_none on success.
+ *     F_none_eos on success after reaching the end of the buffer.
+ *     F_data_not if object is empty (object.used is 0).
+ *     F_data_not_eos no data to write due start location being greater than or equal to buffer size.
+ *     F_data_not_stop no data to write due start location being greater than stop location.
+ *     F_none_stop on success after reaching stopping point.
+ *
+ *     F_interrupt (with error bit) if stopping due to an interrupt.
+ *     F_none_eol (with error bit) after reaching an EOL, which is not supported by the standard.
+ *     F_parameter (with error bit) if a parameter is invalid.
+ *
+ *     Errors (with error bit) from: f_fss_is_graph().
+ *     Errors (with error bit) from: f_fss_is_space().
+ *     Errors (with error bit) from: f_fss_skip_past_delimit().
+ *     Errors (with error bit) from: f_string_dynamic_increase().
+ *     Errors (with error bit) from: f_string_dynamic_increase_by().
+ *     Errors (with error bit) from: f_utf_buffer_increment().
  *
  * @see f_fss_is_graph()
  * @see f_fss_is_space()
index 9d4924c154ff3724bfb6e23d58c355c3774a64b6..c8dd35117149de4a5066a2f0a08999d0a72cb141 100644 (file)
@@ -19,6 +19,7 @@ extern "C" {
 
     f_fss_skip_past_space(buffer, range, state);
     if (F_status_is_error(state->status)) return;
+    if (state->status == F_data_not) return;
 
     if (state->status == F_none_eol) {
       ++range->start;
index b70667f88de5f1a1289a97b8a43e09b205ec8a47..d974c48a93d124f16af2de04ee95088c5fd1e04c 100644 (file)
@@ -58,27 +58,28 @@ extern "C" {
  *   Error bit designates an error but must be passed along with F_interrupt.
  *   All other statuses are ignored.
  *
- * @return
- *   F_fss_found_content on success and content was found (start location is at end of content).
- *   F_fss_found_content_not on success and no content was found (start location is after character designating this is not a content).
- *   F_none_eos on success after reaching the end of the buffer (a valid object is not yet confirmed).
- *   F_none_stop on success after reaching stopping point (a valid object is not yet confirmed).
- *   F_data_not_eos no objects found after reaching the end of the buffer (essentially only comments are found).
- *   F_data_not_stop no data found after reaching stopping point (essentially only comments are found).
- *   F_end_not_group_eos if EOS was reached before the a group termination was reached.
- *   F_end_not_group_stop if stop point was reached before the a group termination was reached.
- *
- *   F_interrupt (with error bit) if stopping due to an interrupt.
- *   F_parameter (with error bit) if a parameter is invalid.
- *
- *   Errors (with error bit) from: f_array_lengths_increase().
- *   Errors (with error bit) from: f_array_lengths_increase_by().
- *   Errors (with error bit) from: f_fss_is_graph().
- *   Errors (with error bit) from: f_fss_is_space().
- *   Errors (with error bit) from: f_fss_is_zero_width().
- *   Errors (with error bit) from: f_fss_skip_past_delimit().
- *   Errors (with error bit) from: f_fss_skip_past_space().
- *   Errors (with error bit) from: f_utf_buffer_increment().
+ *   This alters state.status:
+ *     F_fss_found_content on success and content was found (start location is at end of content).
+ *     F_fss_found_content_not on success and no content was found (start location is after character designating this is not a content).
+ *     F_none_eos on success after reaching the end of the buffer (a valid object is not yet confirmed).
+ *     F_none_stop on success after reaching stopping point (a valid object is not yet confirmed).
+ *     F_data_not if buffer is empty (buffer.used is 0).
+ *     F_data_not_eos no objects found after reaching the end of the buffer (essentially only comments are found).
+ *     F_data_not_stop no data found after reaching stopping point (essentially only comments are found).
+ *     F_end_not_group_eos if EOS was reached before the a group termination was reached.
+ *     F_end_not_group_stop if stop point was reached before the a group termination was reached.
+ *
+ *     F_interrupt (with error bit) if stopping due to an interrupt.
+ *     F_parameter (with error bit) if a parameter is invalid.
+ *
+ *     Errors (with error bit) from: f_array_lengths_increase().
+ *     Errors (with error bit) from: f_array_lengths_increase_by().
+ *     Errors (with error bit) from: f_fss_is_graph().
+ *     Errors (with error bit) from: f_fss_is_space().
+ *     Errors (with error bit) from: f_fss_is_zero_width().
+ *     Errors (with error bit) from: f_fss_skip_past_delimit().
+ *     Errors (with error bit) from: f_fss_skip_past_space().
+ *     Errors (with error bit) from: f_utf_buffer_increment().
  *
  * @see f_array_lengths_increase()
  * @see f_array_lengths_increase_by()
@@ -129,23 +130,24 @@ extern "C" {
  *   Error bit designates an error but must be passed along with F_interrupt.
  *   All other statuses are ignored.
  *
- * @return
- *   F_none on success.
- *   F_none_eos on success after reaching the end of the buffer.
- *   F_none_stop on success after reaching the range stop.
- *   F_data_not_stop no data to write due start location being greater than stop location.
- *   F_data_not_eos no data to write due start location being greater than or equal to buffer size.
- *
- *   F_interrupt (with error bit) if stopping due to an interrupt.
- *   F_none_eol (with error bit) after reaching an EOL, which is not supported by the standard.
- *   F_parameter (with error bit) if a parameter is invalid.
- *
- *   Errors (with error bit) from: f_fss_is_space().
- *   Errors (with error bit) from: f_fss_skip_past_delimit().
- *   Errors (with error bit) from: f_fss_skip_past_space().
- *   Errors (with error bit) from: f_string_dynamic_increase().
- *   Errors (with error bit) from: f_string_dynamic_increase_by().
- *   Errors (with error bit) from: f_utf_buffer_increment().
+ *   This alters state.status:
+ *     F_none on success.
+ *     F_none_eos on success after reaching the end of the buffer.
+ *     F_none_stop on success after reaching the range stop.
+ *     F_data_not if content is empty (content.used is 0).
+ *     F_data_not_eos no data to write due start location being greater than or equal to buffer size.
+ *     F_data_not_stop no data to write due start location being greater than stop location.
+ *
+ *     F_interrupt (with error bit) if stopping due to an interrupt.
+ *     F_none_eol (with error bit) after reaching an EOL, which is not supported by the standard.
+ *     F_parameter (with error bit) if a parameter is invalid.
+ *
+ *     Errors (with error bit) from: f_fss_is_space().
+ *     Errors (with error bit) from: f_fss_skip_past_delimit().
+ *     Errors (with error bit) from: f_fss_skip_past_space().
+ *     Errors (with error bit) from: f_string_dynamic_increase().
+ *     Errors (with error bit) from: f_string_dynamic_increase_by().
+ *     Errors (with error bit) from: f_utf_buffer_increment().
  *
  * @see f_fss_is_space()
  * @see f_fss_skip_past_delimit()
@@ -190,30 +192,31 @@ extern "C" {
  *   Error bit designates an error but must be passed along with F_interrupt.
  *   All other statuses are ignored.
  *
- * @return
- *   F_fss_found_object on success and object was found (start location is at end of object).
- *   F_fss_found_object_content_not on success but object ended at the line so there can be no content.
- *   F_fss_found_object_not on success and no object was found (start location is after character designating this is not an object).
- *   F_none_eos on success after reaching the end of the buffer (a valid object is not yet confirmed).
- *   F_none_stop on success after reaching stopping point (a valid object is not yet confirmed).
- *   F_data_not_eos no objects found after reaching the end of the buffer (essentially only comments are found).
- *   F_data_not_stop no data found after reaching stopping point (essentially only comments are found).
- *   F_end_not_group_eos if EOS was reached before the a group termination was reached.
- *   F_end_not_group_stop if stop point was reached before the a group termination was reached.
- *
- *   F_interrupt (with error bit) if stopping due to an interrupt.
- *   F_parameter (with error bit) if a parameter is invalid.
- *
- *   Errors (with error bit) from: f_array_lengths_increase().
- *   Errors (with error bit) from: f_array_lengths_increase_by().
- *   Errors (with error bit) from: f_fss_is_graph().
- *   Errors (with error bit) from: f_fss_is_space().
- *   Errors (with error bit) from: f_fss_is_zero_width().
- *   Errors (with error bit) from: f_fss_skip_past_delimit().
- *   Errors (with error bit) from: f_fss_skip_past_space().
- *   Errors (with error bit) from: f_string_ranges_increase().
- *   Errors (with error bit) from: f_uint8s_increase().
- *   Errors (with error bit) from: f_utf_buffer_increment().
+ *   This alters state.status:
+ *     F_fss_found_object on success and object was found (start location is at end of object).
+ *     F_fss_found_object_content_not on success but object ended at the line so there can be no content.
+ *     F_fss_found_object_not on success and no object was found (start location is after character designating this is not an object).
+ *     F_none_eos on success after reaching the end of the buffer (a valid object is not yet confirmed).
+ *     F_none_stop on success after reaching stopping point (a valid object is not yet confirmed).
+ *     F_data_not if buffer is empty (buffer.used is 0).
+ *     F_data_not_eos no objects found after reaching the end of the buffer (essentially only comments are found).
+ *     F_data_not_stop no data found after reaching stopping point (essentially only comments are found).
+ *     F_end_not_group_eos if EOS was reached before the a group termination was reached.
+ *     F_end_not_group_stop if stop point was reached before the a group termination was reached.
+ *
+ *     F_interrupt (with error bit) if stopping due to an interrupt.
+ *     F_parameter (with error bit) if a parameter is invalid.
+ *
+ *     Errors (with error bit) from: f_array_lengths_increase().
+ *     Errors (with error bit) from: f_array_lengths_increase_by().
+ *     Errors (with error bit) from: f_fss_is_graph().
+ *     Errors (with error bit) from: f_fss_is_space().
+ *     Errors (with error bit) from: f_fss_is_zero_width().
+ *     Errors (with error bit) from: f_fss_skip_past_delimit().
+ *     Errors (with error bit) from: f_fss_skip_past_space().
+ *     Errors (with error bit) from: f_string_ranges_increase().
+ *     Errors (with error bit) from: f_uint8s_increase().
+ *     Errors (with error bit) from: f_utf_buffer_increment().
  *
  * @see f_array_lengths_increase()
  * @see f_array_lengths_increase_by()
@@ -265,22 +268,23 @@ extern "C" {
  *   Error bit designates an error but must be passed along with F_interrupt.
  *   All other statuses are ignored.
  *
- * @return
- *   F_none on success.
- *   F_none_eos on success after reaching the end of the buffer.
- *   F_none_stop on success after reaching the range stop.
- *   F_data_not_stop no data to write due start location being greater than stop location.
- *   F_data_not_eos no data to write due start location being greater than or equal to buffer size.
- *
- *   F_interrupt (with error bit) if stopping due to an interrupt.
- *   F_none_eol (with error bit) after reaching an EOL, which is not supported by the standard.
- *   F_parameter (with error bit) if a parameter is invalid.
- *
- *   Errors (with error bit) from: f_fss_is_space().
- *   Errors (with error bit) from: f_fss_skip_past_delimit().
- *   Errors (with error bit) from: f_fss_skip_past_space().
- *   Errors (with error bit) from: f_string_dynamic_increase().
- *   Errors (with error bit) from: f_string_dynamic_increase_by().
+ *   This alters state.status:
+ *     F_none on success.
+ *     F_none_eos on success after reaching the end of the buffer.
+ *     F_none_stop on success after reaching the range stop.
+ *     F_data_not if object is empty (object.used is 0).
+ *     F_data_not_eos no data to write due start location being greater than or equal to buffer size.
+ *     F_data_not_stop no data to write due start location being greater than stop location.
+ *
+ *     F_interrupt (with error bit) if stopping due to an interrupt.
+ *     F_none_eol (with error bit) after reaching an EOL, which is not supported by the standard.
+ *     F_parameter (with error bit) if a parameter is invalid.
+ *
+ *     Errors (with error bit) from: f_fss_is_space().
+ *     Errors (with error bit) from: f_fss_skip_past_delimit().
+ *     Errors (with error bit) from: f_fss_skip_past_space().
+ *     Errors (with error bit) from: f_string_dynamic_increase().
+ *     Errors (with error bit) from: f_string_dynamic_increase_by().
  *
  * @see f_fss_is_space()
  * @see f_fss_skip_past_delimit()
index f02e7b931930f35874c2ce78fb131734d1c6f8f6..df35735a46ec4d7dde1bd144647a1be3c7f88aba 100644 (file)
@@ -22,6 +22,7 @@ extern "C" {
 
     f_fss_skip_past_delimit(buffer, range, state);
     if (F_status_is_error(state->status)) return;
+    if (state->status == F_data_not) return;
 
     if (range->start >= buffer.used || range->start > range->stop) {
       delimits->used = delimits_used;
@@ -237,6 +238,7 @@ extern "C" {
 
     f_fss_skip_past_delimit(content, range, state);
     if (F_status_is_error(state->status)) return;
+    if (state->status == F_data_not) return;
 
     if (state->status == F_none_eos) {
       state->status = F_data_not_eos;
@@ -540,6 +542,7 @@ extern "C" {
 
     f_fss_skip_past_space(buffer, range, state);
     if (F_status_is_error(state->status)) return;
+    if (state->status == F_data_not) return;
 
     if (state->status == F_none_eol) {
 
@@ -878,6 +881,7 @@ extern "C" {
 
     f_fss_skip_past_delimit(object, range, state);
     if (F_status_is_error(state->status)) return;
+    if (state->status == F_data_not) return;
 
     if (state->status == F_none_eos) {
       state->status = F_data_not_eos;
index 914da768e68630b7f722e04aefdf645a3137b29c..b860a949bf1330fc78fa8cc8af3e5ff25ac3ba03 100644 (file)
@@ -62,26 +62,27 @@ extern "C" {
  *   Error bit designates an error but must be passed along with F_interrupt.
  *   All other statuses are ignored.
  *
- * @return
- *   F_fss_found_content on success and content was found (start location is at end of content).
- *   F_fss_found_content_not on success and no content was found (start location is after character designating this is not a content).
- *   F_none_eos on success after reaching the end of the buffer (a valid content is not yet confirmed).
- *   F_none_stop on success after reaching stopping point (a valid content is not yet confirmed).
- *   F_data_not_eos no content found after reaching the end of the buffer (essentially only comments are found).
- *   F_data_not_stop no content found after reaching stopping point (essentially only comments are found).
- *   F_end_not_group_eos if EOS was reached before the a group termination was reached.
- *   F_end_not_group_stop if stop point was reached before the a group termination was reached.
- *
- *   F_interrupt (with error bit) if stopping due to an interrupt.
- *   F_parameter (with error bit) if a parameter is invalid.
- *
- *   Errors (with error bit) from: f_array_lengths_increase().
- *   Errors (with error bit) from: f_array_lengths_increase_by().
- *   Errors (with error bit) from: f_fss_is_space().
- *   Errors (with error bit) from: f_fss_seek_to_eol().
- *   Errors (with error bit) from: f_fss_skip_past_delimit().
- *   Errors (with error bit) from: f_string_ranges_increase().
- *   Errors (with error bit) from: f_utf_buffer_increment().
+ *   This alters state.status:
+ *     F_fss_found_content on success and content was found (start location is at end of content).
+ *     F_fss_found_content_not on success and no content was found (start location is after character designating this is not a content).
+ *     F_none_eos on success after reaching the end of the buffer (a valid content is not yet confirmed).
+ *     F_none_stop on success after reaching stopping point (a valid content is not yet confirmed).
+ *     F_data_not if buffer is empty (buffer.used is 0).
+ *     F_data_not_eos no content found after reaching the end of the buffer (essentially only comments are found).
+ *     F_data_not_stop no content found after reaching stopping point (essentially only comments are found).
+ *     F_end_not_group_eos if EOS was reached before the a group termination was reached.
+ *     F_end_not_group_stop if stop point was reached before the a group termination was reached.
+ *
+ *     F_interrupt (with error bit) if stopping due to an interrupt.
+ *     F_parameter (with error bit) if a parameter is invalid.
+ *
+ *     Errors (with error bit) from: f_array_lengths_increase().
+ *     Errors (with error bit) from: f_array_lengths_increase_by().
+ *     Errors (with error bit) from: f_fss_is_space().
+ *     Errors (with error bit) from: f_fss_seek_to_eol().
+ *     Errors (with error bit) from: f_fss_skip_past_delimit().
+ *     Errors (with error bit) from: f_string_ranges_increase().
+ *     Errors (with error bit) from: f_utf_buffer_increment().
  *
  * @see f_array_lengths_increase()
  * @see f_array_lengths_increase_by()
@@ -134,23 +135,24 @@ extern "C" {
  *   Error bit designates an error but must be passed along with F_interrupt.
  *   All other statuses are ignored.
  *
- * @return
- *   F_none on success.
- *   F_none_eos on success after reaching the end of the buffer.
- *   F_data_not_stop no data to write due start location being greater than stop location.
- *   F_data_not_eos no data to write due start location being greater than or equal to buffer size.
- *   F_none_stop on success after reaching stopping point.
- *
- *   F_interrupt (with error bit) if stopping due to an interrupt.
- *   F_parameter (with error bit) if a parameter is invalid.
- *
- *   Errors (with error bit) from: f_fss_is_graph().
- *   Errors (with error bit) from: f_fss_skip_past_delimit().
- *   Errors (with error bit) from: f_fss_skip_past_space().
- *   Errors (with error bit) from: f_string_dynamic_append().
- *   Errors (with error bit) from: f_string_dynamic_increase().
- *   Errors (with error bit) from: f_string_dynamic_increase_by().
- *   Errors (with error bit) from: f_utf_buffer_increment().
+ *   This alters state.status:
+ *     F_none on success.
+ *     F_none_eos on success after reaching the end of the buffer.
+ *     F_data_not if content is empty (content.used is 0).
+ *     F_data_not_eos no data to write due start location being greater than or equal to buffer size.
+ *     F_data_not_stop no data to write due start location being greater than stop location.
+ *     F_none_stop on success after reaching stopping point.
+ *
+ *     F_interrupt (with error bit) if stopping due to an interrupt.
+ *     F_parameter (with error bit) if a parameter is invalid.
+ *
+ *     Errors (with error bit) from: f_fss_is_graph().
+ *     Errors (with error bit) from: f_fss_skip_past_delimit().
+ *     Errors (with error bit) from: f_fss_skip_past_space().
+ *     Errors (with error bit) from: f_string_dynamic_append().
+ *     Errors (with error bit) from: f_string_dynamic_increase().
+ *     Errors (with error bit) from: f_string_dynamic_increase_by().
+ *     Errors (with error bit) from: f_utf_buffer_increment().
  *
  * @see f_fss_is_graph()
  * @see f_fss_skip_past_delimit()
@@ -190,27 +192,28 @@ extern "C" {
  *   Error bit designates an error but must be passed along with F_interrupt.
  *   All other statuses are ignored.
  *
- * @return
- *   F_fss_found_object on success and object was found (start location is at end of object).
- *   F_fss_found_object_not on success and no object was found (start location is after character designating this is not an object).
- *   F_none_eos on success after reaching the end of the buffer (a valid object is not yet confirmed).
- *   F_none_stop on success after reaching stopping point (a valid object is not yet confirmed).
- *   F_data_not_eos no objects found after reaching the end of the buffer (essentially only comments are found).
- *   F_data_not_stop no data found after reaching stopping point (essentially only comments are found).
- *   F_end_not_group_eos if EOS was reached before the a group termination was reached.
- *   F_end_not_group_stop if stop point was reached before the a group termination was reached.
- *
- *   F_interrupt (with error bit) if stopping due to an interrupt.
- *   F_parameter (with error bit) if a parameter is invalid.
- *
- *   Errors (with error bit) from: f_array_lengths_increase_by().
- *   Errors (with error bit) from: f_fss_is_graph().
- *   Errors (with error bit) from: f_fss_is_space().
- *   Errors (with error bit) from: f_fss_is_zero_width().
- *   Errors (with error bit) from: f_fss_seek_to_eol().
- *   Errors (with error bit) from: f_fss_skip_past_delimit().
- *   Errors (with error bit) from: f_fss_skip_past_space().
- *   Errors (with error bit) from: f_utf_buffer_increment().
+ *   This alters state.status:
+ *     F_fss_found_object on success and object was found (start location is at end of object).
+ *     F_fss_found_object_not on success and no object was found (start location is after character designating this is not an object).
+ *     F_none_eos on success after reaching the end of the buffer (a valid object is not yet confirmed).
+ *     F_none_stop on success after reaching stopping point (a valid object is not yet confirmed).
+ *     F_data_not if buffer is empty (buffer.used is 0).
+ *     F_data_not_eos no objects found after reaching the end of the buffer (essentially only comments are found).
+ *     F_data_not_stop no data found after reaching stopping point (essentially only comments are found).
+ *     F_end_not_group_eos if EOS was reached before the a group termination was reached.
+ *     F_end_not_group_stop if stop point was reached before the a group termination was reached.
+ *
+ *     F_interrupt (with error bit) if stopping due to an interrupt.
+ *     F_parameter (with error bit) if a parameter is invalid.
+ *
+ *     Errors (with error bit) from: f_array_lengths_increase_by().
+ *     Errors (with error bit) from: f_fss_is_graph().
+ *     Errors (with error bit) from: f_fss_is_space().
+ *     Errors (with error bit) from: f_fss_is_zero_width().
+ *     Errors (with error bit) from: f_fss_seek_to_eol().
+ *     Errors (with error bit) from: f_fss_skip_past_delimit().
+ *     Errors (with error bit) from: f_fss_skip_past_space().
+ *     Errors (with error bit) from: f_utf_buffer_increment().
  *
  * @see f_array_lengths_increase_by()
  * @see f_fss_is_graph()
@@ -256,23 +259,24 @@ extern "C" {
  *   Error bit designates an error but must be passed along with F_interrupt.
  *   All other statuses are ignored.
  *
- * @return
- *   F_none on success.
- *   F_none_eos on success after reaching the end of the buffer.
- *   F_data_not_stop no data to write due start location being greater than stop location.
- *   F_data_not_eos no data to write due start location being greater than or equal to buffer size.
- *   F_none_stop on success after reaching stopping point.
- *
- *   F_interrupt (with error bit) if stopping due to an interrupt.
- *   F_none_eol (with error bit) after reaching an EOL, which is not supported by the standard.
- *   F_parameter (with error bit) if a parameter is invalid.
- *
- *   Errors (with error bit) from: f_fss_is_graph().
- *   Errors (with error bit) from: f_fss_is_space().
- *   Errors (with error bit) from: f_fss_skip_past_delimit().
- *   Errors (with error bit) from: f_string_dynamic_increase().
- *   Errors (with error bit) from: f_string_dynamic_increase_by().
- *   Errors (with error bit) from: f_utf_buffer_increment().
+ *   This alters state.status:
+ *     F_none on success.
+ *     F_none_eos on success after reaching the end of the buffer.
+ *     F_data_not if object is empty (object.used is 0).
+ *     F_data_not_eos no data to write due start location being greater than or equal to buffer size.
+ *     F_data_not_stop no data to write due start location being greater than stop location.
+ *     F_none_stop on success after reaching stopping point.
+ *
+ *     F_interrupt (with error bit) if stopping due to an interrupt.
+ *     F_none_eol (with error bit) after reaching an EOL, which is not supported by the standard.
+ *     F_parameter (with error bit) if a parameter is invalid.
+ *
+ *     Errors (with error bit) from: f_fss_is_graph().
+ *     Errors (with error bit) from: f_fss_is_space().
+ *     Errors (with error bit) from: f_fss_skip_past_delimit().
+ *     Errors (with error bit) from: f_string_dynamic_increase().
+ *     Errors (with error bit) from: f_string_dynamic_increase_by().
+ *     Errors (with error bit) from: f_utf_buffer_increment().
  *
  * @see f_fss_is_graph()
  * @see f_fss_is_space()
index 8b7a67939cf53e96262fb18c95ee414ee45af881..b880dc7d0c35347c817c38b266f333fa542326ab 100644 (file)
@@ -123,6 +123,7 @@ extern "C" {
  *     F_fss_found_object_not on success and no object was found (start location is after character designating this is not an object).
  *     F_none_eos on success after reaching the end of the buffer (a valid object is not yet confirmed).
  *     F_none_stop on success after reaching stopping point (a valid object is not yet confirmed).
+ *     F_data_not if buffer is empty (buffer.used is 0).
  *     F_data_not_eos no objects found after reaching the end of the buffer (essentially only comments are found).
  *     F_data_not_stop no data found after reaching stopping point (essentially only comments are found).
  *     F_end_not_group_eos if EOS was reached before the a group termination was reached.
@@ -194,6 +195,7 @@ extern "C" {
  *     F_none on success.
  *     F_none_eos on success after reaching the end of the buffer.
  *     F_none_stop on success after reaching the range stop.
+ *     F_data_not if object is empty (object.used is 0).
  *     F_data_not_stop no data to write due start location being greater than stop location.
  *     F_data_not_eos no data to write due start location being greater than or equal to buffer size.
  *
index e98b54c0908ddb595845caa87fe0397c95f7d5be..bbb8325b9d6120333b01342e970c9e8aef58635c 100644 (file)
@@ -66,6 +66,8 @@ extern "C" {
             return;
           }
 
+          if (state->status == F_data_not) return;
+
           if (found_data) {
             state->status = (range->start >= buffer.used) ? F_none_eos : F_none_stop;
 
@@ -114,16 +116,11 @@ extern "C" {
         return;
       }
 
-      if (state->status == F_data_not_eos || state->status == F_data_not_stop) {
+      if (state->status == F_data_not || state->status == F_data_not_eos || state->status == F_data_not_stop) {
 
         // If at least some valid object was found, then return F_none equivelents.
         if (objects->used > initial_used) {
-          if (state->status == F_data_not_eos) {
-            state->status = F_none_eos;
-          }
-          else if (state->status == F_data_not_stop) {
-            state->status = F_none_stop;
-          }
+          state->status = (state->status == F_data_not_eos) ? F_none_eos : F_none_stop;
         }
 
         return;
@@ -187,7 +184,7 @@ extern "C" {
 
     fl_fss_basic_object_write(object, quote, f_fss_complete_full_e, &range, destination, state);
 
-    if (F_status_is_error(state->status) || state->status == F_data_not_stop || state->status == F_data_not_eos) {
+    if (F_status_is_error(state->status) || state->status == F_data_not || state->status == F_data_not_stop || state->status == F_data_not_eos) {
       return;
     }
 
index 8d9c9274036896c479ff88cbc084b8b0c4d5e07b..49b82fc0c4cf4eaf689bb7ea88bb2d6520b6d68f 100644 (file)
@@ -61,6 +61,7 @@ extern "C" {
  *     F_none on success.
  *     F_none_eos on success after reaching the end of the buffer.
  *     F_none_stop on success after reaching stopping point.
+ *     F_data_not if buffer is empty (buffer.used is 0).
  *     F_data_not_eol if there is no data to write and EOL was reached.
  *     F_data_not_eos no data to write due start location being greater than or equal to buffer size.
  *     F_data_not_stop no data to write due start location being greater than stop location.
@@ -110,6 +111,7 @@ extern "C" {
  *     F_none on success.
  *     F_none_eos on success after reaching the end of the buffer.
  *     F_none_stop on success after reaching stopping point.
+ *     F_data_not if object or contents are empty (either object.used or contents.used is 0).
  *     F_data_not_eos no data to write due start location being greater than or equal to buffer size.
  *     F_data_not_stop no data to write due start location being greater than stop location.
  *
index f3ae43dff4d0bd84c0b7e0b189afa7e54f5cbff6..b210143f65ee3a43c0a24bf973d07248e6de263e 100644 (file)
@@ -52,6 +52,8 @@ extern "C" {
             return;
           }
 
+          if (state->status == F_data_not) return;
+
           if (found_data) {
             state->status = (range->start >= buffer.used) ? F_none_eos : F_none_stop;
           }
@@ -96,16 +98,11 @@ extern "C" {
         return;
       }
 
-      if (state->status == F_data_not_eos || state->status == F_data_not_stop) {
+      if (state->status == F_data_not || state->status == F_data_not_eos || state->status == F_data_not_stop) {
 
         // If at least some valid object was found, then return F_none equivalents.
         if (objects->used > initial_used) {
-          if (state->status == F_data_not_eos) {
-            state->status = F_none_eos;
-          }
-          else if (state->status == F_data_not_stop) {
-            state->status = F_none_stop;
-          }
+          state->status = (state->status == F_data_not_eos) ? F_none_eos : F_none_stop;
         }
 
         return;
@@ -156,7 +153,7 @@ extern "C" {
 
     fl_fss_basic_list_object_write(object, f_fss_complete_full_e, &range, destination, state);
 
-    if (F_status_is_error(state->status) || state->status == F_data_not_stop || state->status == F_data_not_eos) {
+    if (F_status_is_error(state->status) || state->status == F_data_not || state->status == F_data_not_stop || state->status == F_data_not_eos) {
       return;
     }
 
index e07594f3e6f1c5688a50834504f3b822e9490f0b..1cecc29ffa7339ba671eb51a4287e736584950e7 100644 (file)
@@ -61,6 +61,7 @@ extern "C" {
  *     F_none on success.
  *     F_none_eos on success after reaching the end of the buffer.
  *     F_none_stop on success after reaching stopping point.
+ *     F_data_not if buffer is empty (buffer.used is 0).
  *     F_data_not_eos no data to write due start location being greater than or equal to buffer size.
  *     F_data_not_stop no data to write due start location being greater than stop location.
  *
@@ -105,18 +106,19 @@ extern "C" {
  *   Error bit designates an error but must be passed along with F_interrupt.
  *   All other statuses are ignored.
  *
- * @return
- *   F_none on success.
- *   F_none_eos on success after reaching the end of the buffer.
- *   F_none_stop on success after reaching stopping point.
- *   F_data_not_eos no data to write due start location being greater than or equal to buffer size.
- *   F_data_not_stop no data to write due start location being greater than stop location
+ *   This alters state.status:
+ *     F_none on success.
+ *     F_none_eos on success after reaching the end of the buffer.
+ *     F_none_stop on success after reaching stopping point.
+ *     F_data_not if object or contents are empty (either object.used or contents.used is 0).
+ *     F_data_not_eos no data to write due start location being greater than or equal to buffer size.
+ *     F_data_not_stop no data to write due start location being greater than stop location
  *
- *   F_parameter (with error bit) if a parameter is invalid.
+ *     F_parameter (with error bit) if a parameter is invalid.
  *
- *   Errors (with error bit) from: f_string_dynamic_increase().
- *   Errors (with error bit) from: fl_fss_basic_list_content_write().
- *   Errors (with error bit) from: fl_fss_basic_list_object_write().
+ *     Errors (with error bit) from: f_string_dynamic_increase().
+ *     Errors (with error bit) from: fl_fss_basic_list_content_write().
+ *     Errors (with error bit) from: fl_fss_basic_list_object_write().
  *
  * @see f_string_dynamic_increase()
  * @see fl_fss_basic_list_content_write()
index 61cdc812297a060ae70ffa697e25df601e7bedf5..71d5a709d61308217c545e097449922a4879966b 100644 (file)
@@ -47,6 +47,8 @@ extern "C" {
             return;
           }
 
+          if (state->status == F_data_not) return;
+
           if (found_data) {
             state->status = (range->start >= buffer.used) ? F_none_eos : F_none_stop;
 
@@ -76,16 +78,11 @@ extern "C" {
 
       if (state->status == F_none_eos || state->status == F_none_stop) return;
 
-      if (state->status == F_data_not_eos || state->status == F_data_not_stop) {
+      if (state->status == F_data_not || state->status == F_data_not_eos || state->status == F_data_not_stop) {
 
         // If at least some valid object was found, then return F_none equivalents.
         if (nest->depth[0].used > initial_used) {
-          if (state->status == F_data_not_eos) {
-            state->status = F_none_eos;
-          }
-          else if (state->status == F_data_not_stop) {
-            state->status = F_none_stop;
-          }
+          state->status = (state->status == F_data_not_eos) ? F_none_eos : F_none_stop;
         }
 
         return;
@@ -95,12 +92,7 @@ extern "C" {
 
         // If at least some valid object was found, then return F_none equivalents.
         if (nest->depth[0].used > initial_used) {
-          if (state->status == F_data_not_eos) {
-            state->status = F_none_eos;
-          }
-          else if (state->status == F_data_not_stop) {
-            state->status = F_none_stop;
-          }
+          state->status = (state->status == F_data_not_eos) ? F_none_eos : F_data_not_stop;
         }
 
         return;
@@ -134,7 +126,7 @@ extern "C" {
 
     fl_fss_embedded_list_object_write(object, f_fss_complete_full_e, &range, destination, state);
 
-    if (F_status_is_error(state->status) || state->status == F_data_not_stop || state->status == F_data_not_eos) {
+    if (F_status_is_error(state->status) || state->status == F_data_not || state->status == F_data_not_stop || state->status == F_data_not_eos) {
       return;
     }
 
index 41aa3df8f0877234a88a7981202628d0b144a14e..5f8f6f031357cc2d26b7e206f61aea9a47e4caad 100644 (file)
@@ -59,6 +59,7 @@ extern "C" {
  *     F_none on success (both valid object and valid content found with start location is at end of content).
  *     F_none_eos on success after reaching the end of the buffer (both valid object and valid content found with start location is at end of buffer).
  *     F_none_stop on success after reaching stopping point (both valid object and valid content found with start location is at stop point).
+ *     F_data_not if buffer is empty (buffer.used is 0).
  *     F_data_not_eol if there is no data to write and EOL was reached.
  *     F_data_not_eos no data to write due start location being greater than or equal to buffer size.
  *     F_data_not_stop no data to write due start location being greater than stop location.
@@ -114,6 +115,7 @@ extern "C" {
  *     F_none on success.
  *     F_none_eos on success after reaching the end of the buffer.
  *     F_none_stop on success after reaching stopping point.
+ *     F_data_not if object or contents are empty (either object.used or contents.used is 0).
  *     F_data_not_eos no data to write due start location being greater than or equal to buffer size.
  *     F_data_not_stop no data to write due start location being greater than stop location.
  *
index f4c9ada512beab3f9299b4c68b6acd302c378cf8..7533be7d6298469048b4e20b2e0741ed3a7f1883 100644 (file)
@@ -78,6 +78,8 @@ extern "C" {
             return;
           }
 
+          if (state->status == F_data_not) return;
+
           if (found_data) {
             state->status = (range->start >= buffer.used) ? F_none_eos : F_none_stop;
           }
@@ -131,16 +133,11 @@ extern "C" {
         return;
       }
 
-      if (state->status == F_data_not_eos || state->status == F_data_not_stop || state->status == F_end_not_group_eos || state->status == F_end_not_group_stop) {
+      if (state->status == F_data_not || state->status == F_data_not_eos || state->status == F_data_not_stop || state->status == F_end_not_group_eos || state->status == F_end_not_group_stop) {
 
         // If at least some valid object was found, then return F_none equivelents.
         if (objects->used > initial_used) {
-          if (state->status == F_data_not_eos) {
-            state->status = F_none_eos;
-          }
-          else if (state->status == F_data_not_stop) {
-            state->status = F_none_stop;
-          }
+          state->status = (state->status == F_data_not_eos) ? F_none_eos : F_none_stop;
         }
 
         return;
@@ -213,7 +210,7 @@ extern "C" {
 
     fl_fss_extended_object_write(object, quote, f_fss_complete_full_e, &range, destination, state);
 
-    if (F_status_is_error(state->status) || state->status == F_data_not_stop || state->status == F_data_not_eos) {
+    if (F_status_is_error(state->status) || state->status == F_data_not || state->status == F_data_not_stop || state->status == F_data_not_eos) {
       return;
     }
 
index b64095f122449ab9a1a06e76f019f62bd7cd5b57..b704afbcdbb1af0b719503f7b1251b3b3691c3ed 100644 (file)
@@ -64,6 +64,7 @@ extern "C" {
  *     F_none on success.
  *     F_none_stop on success after reaching stopping point.
  *     F_none_eos on success after reaching the end of the buffer.
+ *     F_data_not if buffer is empty (buffer.used is 0).
  *     F_data_not_stop no data to write due start location being greater than stop location.
  *     F_data_not_eos no data to write due start location being greater than or equal to buffer size.
  *     F_data_not_eol if there is no data to write and EOL was reached.
@@ -113,6 +114,7 @@ extern "C" {
  *     F_none on success.
  *     F_none_eos on success after reaching the end of the buffer.
  *     F_none_stop on success after reaching stopping point.
+ *     F_data_not if object or contents are empty (either object.used or contents.used is 0).
  *     F_data_not_eos no data to write due start location being greater than or equal to buffer size.
  *     F_data_not_stop no data to write due start location being greater than stop location.
  *
index 2a5fe5c25283b6095d243d4b8cdce66865a7da1b..07f897990ca1a3f9d00b94b37a2dfc2a66a29355 100644 (file)
@@ -51,6 +51,8 @@ extern "C" {
             return;
           }
 
+          if (state->status == F_data_not) return;
+
           if (found_data) {
             state->status = (range->start >= buffer.used) ? F_none_eos : F_none_stop;
           }
@@ -94,16 +96,11 @@ extern "C" {
         return;
       }
 
-      if (state->status == F_data_not_eos || state->status == F_data_not_stop) {
+      if (state->status == F_data_not || state->status == F_data_not_eos || state->status == F_data_not_stop) {
 
         // If at least some valid object was found, then return F_none equivalents.
         if (objects->used > initial_used) {
-          if (state->status == F_data_not_eos) {
-            state->status = F_none_eos;
-          }
-          else if (state->status == F_data_not_stop) {
-            state->status = F_none_stop;
-          }
+          state->status = state->status == F_data_not_eos ? F_none_eos : F_none_stop;
         }
 
         return;
@@ -154,7 +151,7 @@ extern "C" {
 
     fl_fss_extended_list_object_write(object, f_fss_complete_full_e, &range, destination, state);
 
-    if (F_status_is_error(state->status) || state->status == F_data_not_stop || state->status == F_data_not_eos) {
+    if (F_status_is_error(state->status) || state->status == F_data_not || state->status == F_data_not_stop || state->status == F_data_not_eos) {
       return;
     }
 
index 18040504a52ae9148434e6f0b4fc3df3d077e731..0c3767c0566137b3f4d371d5ca42dd5b1a75ac9f 100644 (file)
@@ -63,6 +63,7 @@ extern "C" {
  *     F_none on success (both valid object and valid content found with start location is at end of content).
  *     F_none_eos on success after reaching the end of the buffer (both valid object and valid content found with start location is at end of buffer).
  *     F_none_stop on success after reaching stopping point (both valid object and valid content found with start location is at stop point).
+ *     F_data_not if buffer is empty (buffer.used is 0).
  *     F_data_not_eol if there is no data to write and EOL was reached.
  *     F_data_not_eos no data to write due start location being greater than or equal to buffer size.
  *     F_data_not_stop no data to write due start location being greater than stop location.
@@ -118,6 +119,7 @@ extern "C" {
  *     F_none on success.
  *     F_none_eos on success after reaching the end of the buffer.
  *     F_none_stop on success after reaching stopping point.
+ *     F_data_not if object or contents are empty (either object.used or contents.used is 0).
  *     F_data_not_eos no data to write due start location being greater than or equal to buffer size.
  *     F_data_not_stop no data to write due start location being greater than stop location.
  *
index 4f10d8c5471e390c490e6a9252db0aa4566d0e94..2b888624315cad7272bf6fb47e8d6f42ce7c93f0 100644 (file)
@@ -60,6 +60,12 @@ extern "C" {
           }
 
           // Returning without a "payload" is an error.
+          if (state->status == F_data_not) {
+            state->status = F_status_set_error(F_data_not);
+
+            return;
+          }
+
           if (found_data) {
             state->status = F_status_set_error((range->start >= buffer.used) ? F_none_eos : F_none_stop);
           }
@@ -155,18 +161,13 @@ extern "C" {
         return;
       }
 
-      if (state->status == F_data_not_eos || state->status == F_data_not_stop) {
+      if (state->status == F_data_not || state->status == F_data_not_eos || state->status == F_data_not_stop) {
 
         // If at least some valid object was found, then return F_none equivalents.
         if (objects->used > initial_used) {
 
           // Returning without a "payload" is an error.
-          if (state->status == F_data_not_eos) {
-            state->status = F_status_set_error(F_none_eos);
-          }
-          else if (state->status == F_data_not_stop) {
-            state->status = F_status_set_error(F_none_stop);
-          }
+          state->status = (state->status == F_data_not_eos) ? F_status_set_error(F_none_eos) : F_status_set_error(F_none_stop);
         }
         else {
           state->status = F_status_set_error(state->status);
@@ -227,7 +228,7 @@ extern "C" {
 
     fl_fss_basic_list_object_write(object, trim ? f_fss_complete_full_trim_e : f_fss_complete_full_e, &range, destination, state);
 
-    if (F_status_is_error(state->status) || state->status == F_data_not_stop || state->status == F_data_not_eos) {
+    if (F_status_is_error(state->status) || state->status == F_data_not || state->status == F_data_not_stop || state->status == F_data_not_eos) {
       return;
     }
 
index 48b59d44c0eec20827d9e450b5b6c767760e4c9e..c5d51e335cc5b417a866514fc2e45efcc76e1944 100644 (file)
@@ -67,6 +67,7 @@ extern "C" {
  *     F_none on success.
  *     F_none_eos on success after reaching the end of the buffer.
  *     F_none_stop on success after reaching stopping point.
+ *     F_data_not if buffer is empty (buffer.used is 0).
  *     F_data_not_eos no data to write due start location being greater than or equal to buffer size.
  *     F_data_not_stop no data to write due start location being greater than stop location.
  *
@@ -136,6 +137,7 @@ extern "C" {
  *     F_none on success.
  *     F_none_eos on success after reaching the end of the buffer.
  *     F_none_stop on success after reaching stopping point.
+ *     F_data_not if object or contents are empty (either object.used or contents.used is 0).
  *     F_data_not_eos no data to write due start location being greater than or equal to buffer size.
  *     F_data_not_stop no data to write due start location being greater than stop location.
  *