]> Kevux Git Server - fll/commitdiff
Update: finish the @todo in errno handling of recent directory additions
authorKevin Day <thekevinday@gmail.com>
Mon, 11 May 2020 01:58:19 +0000 (20:58 -0500)
committerKevin Day <thekevinday@gmail.com>
Mon, 11 May 2020 01:58:19 +0000 (20:58 -0500)
level_0/f_directory/c/directory.c
level_0/f_directory/c/directory.h
level_2/fll_directory/c/directory.h

index 2dbc324aed3ea22545b335786059ab86d5015b93..6c245ba644d63e9a2452fed982b3c1ad7d0e636f 100644 (file)
@@ -82,8 +82,6 @@ extern "C" {
       result = remove(path);
     }
 
-    // @todo properly handle the correct error codes, this was simply copied over from f_file_remove().
-
     if (result < 0) {
       if (errno == EACCES) {
         return f_status_set_error(f_access_denied);
@@ -118,6 +116,18 @@ extern "C" {
       else if (errno == EROFS) {
         return f_status_set_error(f_read_only);
       }
+      else if (errno == EOVERFLOW) {
+        return f_status_set_error(f_number_overflow);
+      }
+      else if (errno == EMFILE) {
+        return f_status_set_error(f_file_max_descriptors);
+      }
+      else if (errno == ENFILE) {
+        return f_status_set_error(f_file_max_open);
+      }
+      else if (errno == EINVAL) {
+        return f_status_set_error(f_invalid_parameter);
+      }
 
       return f_status_set_error(f_failure);
     }
@@ -148,8 +158,6 @@ extern "C" {
       result = remove(path);
     }
 
-    // @todo properly handle the correct error codes, this was simply copied over from f_file_remove().
-
     if (result < 0) {
       if (errno == EACCES) {
         return f_status_set_error(f_access_denied);
@@ -184,6 +192,18 @@ extern "C" {
       else if (errno == EROFS) {
         return f_status_set_error(f_read_only);
       }
+      else if (errno == EOVERFLOW) {
+        return f_status_set_error(f_number_overflow);
+      }
+      else if (errno == EMFILE) {
+        return f_status_set_error(f_file_max_descriptors);
+      }
+      else if (errno == ENFILE) {
+        return f_status_set_error(f_file_max_open);
+      }
+      else if (errno == EINVAL) {
+        return f_status_set_error(f_invalid_parameter);
+      }
 
       return f_status_set_error(f_failure);
     }
index 82a16124a85e168da548aa911a40e7e0b75d763a..8f55a9af038717ead3371ae5f57f19ba73abca5d 100644 (file)
@@ -195,6 +195,9 @@ extern "C" {
  *   f_prohibited (with error bit) if filesystem does not allow for removing.
  *   f_read_only (with error bit) if file is read-only.
  *   f_failure (with error bit) for any other (unlink()) error.
+ *   f_number_overflow (with error bit) on integer overflow.
+ *   f_file_max_descriptors (with error bit) if max file descriptors was reached.
+ *   f_file_max_open (with error bit) too many open files.
  *
  * @see nftw()
  * @see remove()
index 8007d090e5dfaaf31b179e4a2c26501d0fabd9b5..e1b4af1e18beb1dfdcc6e271c72b1cee05f5129c 100644 (file)
@@ -60,6 +60,8 @@ extern "C" {
  *   f_directory_error_descriptor (with error bit) on directory file descriptor error.
  *   f_directory_error_stream (with error bit) on directory stream error.
  *   f_directory_error_unsupported (with error bit) on directory file descriptor not supported.
+ *   f_file_max_descriptors (with error bit) if max file descriptors was reached.
+ *   f_file_max_open (with error bit) too many open files.
  *
  * @see alphasort()
  * @see scandir()