]> Kevux Git Server - fll/commitdiff
Update: Add new return status codes: F_debug, F_error, F_fine, and F_warning.
authorKevin Day <thekevinday@gmail.com>
Thu, 7 Apr 2022 06:11:20 +0000 (01:11 -0500)
committerKevin Day <thekevinday@gmail.com>
Thu, 7 Apr 2022 06:11:20 +0000 (01:11 -0500)
Also add handling of F_error to the standard error handler.

level_0/f_file/c/file.c
level_0/f_file/c/file.h
level_0/f_status/c/status.h
level_2/fll_error/c/error.c
level_2/fll_error/c/private-error.c
level_2/fll_status_string/c/status_string.c

index 718a4fa733a89a03b15f796a2e7b0a8e74bae949..c0915d5df3f7fe7ecb7d51aff5f4bd91cff40bb2 100644 (file)
@@ -2075,7 +2075,7 @@ extern "C" {
     if (ferror(file.stream)) {
       funlockfile(file.stream);
 
-      return F_status_set_error(F_failure); // @todo create F_error and return F_error.
+      return F_status_set_error(F_error);
     }
 
     f_status_t status = F_none;
@@ -2129,7 +2129,7 @@ extern "C" {
     }
 
     if (ferror(file.stream)) {
-      return F_status_set_error(F_failure); // @todo create F_error and return F_error.
+      return F_status_set_error(F_error);
     }
 
     {
@@ -2182,7 +2182,7 @@ extern "C" {
     if (ferror(file.stream)) {
       funlockfile(file.stream);
 
-      return F_status_set_error(F_failure); // @todo create F_error and return F_error.
+      return F_status_set_error(F_error);
     }
 
     {
index 88147a014644252c71631012b7dfac798f8e9c36..98a9c0544ffb875433dbd8e46f53c77fe0c4d1a9 100644 (file)
@@ -2069,6 +2069,7 @@ extern "C" {
  *
  *   F_block (with error bit) if file descriptor is set to non-block and the read would result in a blocking operation.
  *   F_buffer (with error bit) if the buffer is invalid.
+ *   F_error (with error bit) if the file is already in the error state at the start of this function.
  *   F_file_closed (with error bit) if file is not open.
  *   F_file_descriptor (with error bit) if the file descriptor is invalid.
  *   F_file_type_directory (with error bit) if file descriptor represents a directory.
@@ -2103,6 +2104,7 @@ extern "C" {
  *
  *   F_block (with error bit) if file descriptor is set to non-block and the read would result in a blocking operation.
  *   F_buffer (with error bit) if the buffer is invalid.
+ *   F_error (with error bit) if the file is already in the error state at the start of this function.
  *   F_file_closed (with error bit) if file is not open.
  *   F_file_descriptor (with error bit) if the file descriptor is invalid.
  *   F_file_type_directory (with error bit) if file descriptor represents a directory.
@@ -2141,6 +2143,7 @@ extern "C" {
  *
  *   F_block (with error bit) if file descriptor is set to non-block and the read would result in a blocking operation.
  *   F_buffer (with error bit) if the buffer is invalid.
+ *   F_error (with error bit) if the file is already in the error state at the start of this function.
  *   F_file_closed (with error bit) if file is not open.
  *   F_file_descriptor (with error bit) if the file descriptor is invalid.
  *   F_file_type_directory (with error bit) if file descriptor represents a directory.
index 4b6a9383b743b7a41f6a9c60d2be6422b57621f1..b1d1d75deb1ef131e2fdd50246e0683ffa0f1981 100644 (file)
@@ -430,6 +430,17 @@ extern "C" {
       F_write_only,
     #endif // _di_f_status_basic_
 
+    #ifndef _di_f_status_return_
+      F_debug,
+      F_debug_not,
+      F_error,
+      F_error_not,
+      F_fine,
+      F_fine_not,
+      F_warning,
+      F_warning_not,
+    #endif // _di_f_status_return_
+
     #ifndef _di_f_status_array_
       F_array,
       F_array_not,
index 92b7ea444583b9b73d43669699690e3ec1bac55b..00b69f859a5711604a6655ad873ddb5b919bef4d 100644 (file)
@@ -100,6 +100,20 @@ extern "C" {
       return F_false;
     }
 
+    if (status == F_error) {
+      if (print.verbosity != f_console_verbosity_quiet_e) {
+        flockfile(print.to.stream);
+
+        fl_print_format("%r%[%QFailed to %Q %Q '%]", print.to.stream, f_string_eol_s, print.context, print.prefix, operation, type_name, print.context);
+        fl_print_format("%[%Q%]", print.to.stream, print.notable, name, print.notable);
+        fl_print_format("%[', already in an error state.%]%r", print.to.stream, print.context, print.context, f_string_eol_s);
+
+        funlockfile(print.to.stream);
+      }
+
+      return F_false;
+    }
+
     if (status == F_failure) {
       if (print.verbosity != f_console_verbosity_quiet_e) {
         flockfile(print.to.stream);
index 01563f07e497baefc1927b5fb47a2394c51f147c..cbbde446d52cca4960df498ff46ac67d72c1bf51 100644 (file)
@@ -56,6 +56,22 @@ extern "C" {
       return F_false;
     }
 
+    if (status == F_error) {
+      if (print.verbosity != f_console_verbosity_quiet_e) {
+        flockfile(print.to.stream);
+
+        fl_print_format("%r%[%QAn error has occurred", print.to.stream, f_string_eol_s, print.context, print.prefix);
+
+        private_fll_error_print_function(print, function);
+
+        fl_print_format(".%]%r", print.to.stream, print.context, f_string_eol_s);
+
+        funlockfile(print.to.stream);
+      }
+
+      return F_false;
+    }
+
     if (status == F_file_found_not) {
       if (print.verbosity != f_console_verbosity_quiet_e) {
         flockfile(print.to.stream);
index 749c23c27cc2fdf528cb6e3ceefa7fc3b8249af6..0d7fdc2dd5583a5e26e1eb230430949a41dd0231 100644 (file)
@@ -1969,6 +1969,56 @@ extern "C" {
       }
     #endif // _di_f_status_basic_
 
+    #ifndef _di_f_status_return_
+      if (fl_string_dynamic_compare(name, f_status_debug_s) == F_equal_to) {
+        *code = F_debug;
+
+        return F_none;
+      }
+
+      if (fl_string_dynamic_compare(name, f_status_debug_not_s) == F_equal_to) {
+        *code = F_debug_not;
+
+        return F_none;
+      }
+
+      if (fl_string_dynamic_compare(name, f_status_error_s) == F_equal_to) {
+        *code = F_error;
+
+        return F_none;
+      }
+
+      if (fl_string_dynamic_compare(name, f_status_error_not_s) == F_equal_to) {
+        *code = F_error_not;
+
+        return F_none;
+      }
+
+      if (fl_string_dynamic_compare(name, f_status_fine_s) == F_equal_to) {
+        *code = F_fine;
+
+        return F_none;
+      }
+
+      if (fl_string_dynamic_compare(name, f_status_fine_not_s) == F_equal_to) {
+        *code = F_fine_not;
+
+        return F_none;
+      }
+
+      if (fl_string_dynamic_compare(name, f_status_warning_s) == F_equal_to) {
+        *code = F_warning;
+
+        return F_none;
+      }
+
+      if (fl_string_dynamic_compare(name, f_status_warning_not_s) == F_equal_to) {
+        *code = F_warning_not;
+
+        return F_none;
+      }
+    #endif // _di_f_status_return_
+
     #ifndef _di_f_status_array_
       if (fl_string_dynamic_compare(name, f_status_array_s) == F_equal_to) {
         *code = F_array;