]> Kevux Git Server - fll/commitdiff
Bugfix: Problems exposed by unit tests in f_file.
authorKevin Day <thekevinday@gmail.com>
Wed, 8 Jun 2022 01:11:45 +0000 (20:11 -0500)
committerKevin Day <thekevinday@gmail.com>
Wed, 8 Jun 2022 01:11:45 +0000 (20:11 -0500)
The stream functions do not populate errno.
In these cases return either F_file_read or F_file_write with the error bits set as appropriate.

Update the documentation comments.

level_0/f_file/c/file.c
level_0/f_file/c/file.h
level_0/f_file/c/private-file.c
level_0/f_file/c/private-file.h

index 51e8755ae366bdabe2a957f562657df2870ce76b..41d09b4ed6fa5825da0a6a41cb9cff45cf2f2363 100644 (file)
@@ -2211,15 +2211,7 @@ extern "C" {
       if (ferror_unlocked(file.stream)) {
         funlockfile(file.stream);
 
-        if (errno == EAGAIN || errno == EWOULDBLOCK) return F_status_set_error(F_block);
-        if (errno == EBADF) return F_status_set_error(F_file_descriptor);
-        if (errno == EFAULT) return F_status_set_error(F_buffer);
-        if (errno == EINTR) return F_status_set_error(F_interrupt);
-        if (errno == EINVAL) return F_status_set_error(F_parameter);
-        if (errno == EIO) return F_status_set_error(F_input_output);
-        if (errno == EISDIR) return F_status_set_error(F_file_type_directory);
-
-        return F_status_set_error(F_failure);
+        return F_status_set_error(F_file_read);
       }
 
       buffer->used += size_read;
@@ -2272,15 +2264,7 @@ extern "C" {
     if (ferror_unlocked(file.stream)) {
       funlockfile(file.stream);
 
-      if (errno == EAGAIN || errno == EWOULDBLOCK) return F_status_set_error(F_block);
-      if (errno == EBADF) return F_status_set_error(F_file_descriptor);
-      if (errno == EFAULT) return F_status_set_error(F_buffer);
-      if (errno == EINTR) return F_status_set_error(F_interrupt);
-      if (errno == EINVAL) return F_status_set_error(F_parameter);
-      if (errno == EIO) return F_status_set_error(F_input_output);
-      if (errno == EISDIR) return F_status_set_error(F_file_type_directory);
-
-      return F_status_set_error(F_failure);
+      return F_status_set_error(F_file_read);
     }
 
     if (size_read) {
@@ -2354,15 +2338,7 @@ extern "C" {
       if (ferror_unlocked(file.stream)) {
         funlockfile(file.stream);
 
-        if (errno == EAGAIN || errno == EWOULDBLOCK) return F_status_set_error(F_block);
-        if (errno == EBADF) return F_status_set_error(F_file_descriptor);
-        if (errno == EFAULT) return F_status_set_error(F_buffer);
-        if (errno == EINTR) return F_status_set_error(F_interrupt);
-        if (errno == EINVAL) return F_status_set_error(F_parameter);
-        if (errno == EIO) return F_status_set_error(F_input_output);
-        if (errno == EISDIR) return F_status_set_error(F_file_type_directory);
-
-        return F_status_set_error(F_failure);
+        return F_status_set_error(F_file_read);
       }
 
       buffer->used += size_read;
index e0a4dcf9bfab6f8fb7042b04967a46e91bfeb5ce..1b685e9ca9cf2d8233e6af71c768bf3828f6d368 100644 (file)
@@ -2206,6 +2206,8 @@ extern "C" {
  *   F_parameter (with error bit) if a parameter is invalid.
  *
  * @see flockfile()
+ * @see feof_unlocked()
+ * @see ferror_unlocked()
  * @see fread_unlocked()
  * @see funlockfile()
  */
@@ -2230,17 +2232,16 @@ extern "C" {
  *   F_none on success.
  *   F_none_eof on success and EOF was reached.
  *
- *   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.
- *   F_input_output (with error bit) on I/O error.
- *   F_interrupt (with error bit) if interrupt was received.
+ *   F_file_closed (with error bit) if the file is closed.
+ *   F_file_read (with error bit) on file read error.
  *   F_parameter (with error bit) if a parameter is invalid.
  *
+ * @see feof_unlocked()
+ * @see ferror_unlocked()
+ * @see flockfile()
  * @see fread()
+ * @see funlockfile()
  */
 #ifndef _di_f_file_stream_read_block_
   extern f_status_t f_file_stream_read_block(const f_file_t file, f_string_dynamic_t * const buffer);
@@ -2269,18 +2270,15 @@ extern "C" {
  *   F_none_eof on success and EOF was reached.
  *   F_none_stop on success and total was reached.
  *
- *   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.
- *   F_input_output (with error bit) on I/O error.
- *   F_interrupt (with error bit) if interrupt was received.
+ *   F_file_closed (with error bit) if the file is closed.
+ *   F_file_read (with error bit) on file read error.
  *   F_parameter (with error bit) if a parameter is invalid.
  *
  *   Errors (with error bit) from: f_string_dynamic_increase_by().
  *
+ * @see feof_unlocked()
+ * @see ferror_unlocked()
  * @see flockfile()
  * @see fread_unlocked()
  * @see funlockfile()
@@ -2355,23 +2353,18 @@ extern "C" {
  *
  * @return
  *   F_none on success.
+ *   F_none_eof when the file stream is at the end of the file.
  *   F_none_stop on success but no data was written (written == 0) (not an error and often happens if file type is not a regular file).
  *   F_data_not on success but buffer.used is 0.
  *
- *   F_block (with error bit) if file descriptor is set to non-block and the write would result in a blocking operation.
- *   F_buffer (with error bit) if the buffer is invalid.
- *   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.
- *   F_input_output (with error bit) on I/O error.
- *   F_interrupt (with error bit) if interrupt was received.
+ *   F_file_write (with error bit) on error during file write.
  *   F_parameter (with error bit) if a parameter is invalid.
  *
  *   F_file_write (with error bit) on any other error.
  *
+ * @see ferror_unlocked()
  * @see flockfile()
  * @see fwrite_unlocked()
- * @see ferror_unlocked()
  * @see funlockfile()
  */
 #ifndef _di_f_file_stream_write_
@@ -2395,16 +2388,11 @@ extern "C" {
  *
  * @return
  *   F_none on success.
+ *   F_none_eof when the file stream is at the end of the file.
  *   F_none_stop on success but no data was written (written == 0) (not an error and often happens if file type is not a regular file).
  *   F_data_not on success but buffer.used is 0.
  *
- *   F_block (with error bit) if file descriptor is set to non-block and the write would result in a blocking operation.
- *   F_buffer (with error bit) if the buffer is invalid.
- *   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.
- *   F_input_output (with error bit) on I/O error.
- *   F_interrupt (with error bit) if interrupt was received.
+ *   F_file_write (with error bit) on error during file write.
  *   F_parameter (with error bit) if a parameter is invalid.
  *
  *   F_file_write (with error bit) on any other error.
@@ -2435,17 +2423,12 @@ extern "C" {
  *
  * @return
  *   F_none on success.
- *   F_none_stop on success but no data was written (written == 0) (not an error and often happens if file type is not a regular file).
+ *   F_none_eof when the file stream is at the end of the file.
  *   F_none_eos on success but range.stop exceeded buffer.used (only wrote up to buffer.used).
+ *   F_none_stop on success but no data was written (written == 0) (not an error and often happens if file type is not a regular file).
  *   F_data_not on success but either buffer.used or total is 0.
  *
- *   F_block (with error bit) if file descriptor is set to non-block and the write would result in a blocking operation.
- *   F_buffer (with error bit) if the buffer is invalid.
- *   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.
- *   F_input_output (with error bit) on I/O error.
- *   F_interrupt (with error bit) if interrupt was received.
+ *   F_file_write (with error bit) on error during file write.
  *   F_parameter (with error bit) if a parameter is invalid.
  *
  *   F_file_write (with error bit) on any other error.
@@ -2479,12 +2462,7 @@ extern "C" {
  *   F_none_stop on success but no data was written (written == 0) (not an error and often happens if file type is not a regular file).
  *   F_none_eos on success but range.stop exceeded buffer.used (only wrote up to buffer.used).
  *
- *   F_block (with error bit) if file descriptor is set to non-block and the write would result in a blocking operation.
- *   F_buffer (with error bit) if the buffer is invalid.
- *   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.
- *   F_input_output (with error bit) on I/O error.
- *   F_interrupt (with error bit) if interrupt was received.
+ *   F_file_write (with error bit) on error during file write.
  *   F_parameter (with error bit) if a parameter is invalid.
  *
  * @see fwrite_unlocked()
index d2af685d2f509fbbbdebe514a588e859434eb139..b9e5b131a49e010d107398d398447c8b63376c29 100644 (file)
@@ -796,14 +796,6 @@ extern "C" {
       if (ferror_unlocked(file.stream)) {
         funlockfile(file.stream);
 
-        if (errno == EAGAIN || errno == EWOULDBLOCK) return F_status_set_error(F_block);
-        if (errno == EBADF) return F_status_set_error(F_file_descriptor);
-        if (errno == EFAULT) return F_status_set_error(F_buffer);
-        if (errno == EINTR) return F_status_set_error(F_interrupt);
-        if (errno == EINVAL) return F_status_set_error(F_parameter);
-        if (errno == EIO) return F_status_set_error(F_input_output);
-        if (errno == EISDIR) return F_status_set_error(F_file_type_directory);
-
         return F_status_set_error(F_file_write);
       }
 
index ae6edbe650a5b82e1b33c810f5b19a67f39e1cb4..1c38e9b2bacbe248481f4530beabb62142ad6784 100644 (file)
@@ -39,6 +39,9 @@ extern "C" {
  *   F_parameter (with error bit) if a parameter is invalid.
  *   F_space_not (with error bit) if file system is out of space (or file system quota is reached).
  *
+ * @see close()
+ * @see fsync()
+ *
  * @see f_file_close()
  * @see f_file_copy()
  * @see f_file_stream_close()
@@ -89,6 +92,8 @@ extern "C" {
  *   F_supported_not if copying a given type of file is unsupported.
  *   F_failure (with error bit) for any other error.
  *
+ * @see open()
+ *
  * @see f_file_copy()
  * @see f_file_clone()
  */
@@ -133,6 +138,8 @@ extern "C" {
  *   F_space_not (with error bit) if file system is out of space (or file system quota is reached).
  *   F_failure (with error bit) for any other error.
  *
+ * @see open()
+ *
  * @see f_file_copy()
  * @see f_file_create()
  */
@@ -179,6 +186,8 @@ extern "C" {
  *   F_space_not (with error bit) if file system is out of space (or file system quota is reached).
  *   F_failure (with error bit) for any other error.
  *
+ * @see openat()
+ *
  * @see f_file_create_at()
  */
 #if !defined(_di_f_file_create_at_)
@@ -214,6 +223,8 @@ extern "C" {
  *   F_space_not (with error bit) if file system is out of space (or file system quota is reached).
  *   F_failure (with error bit) for any other error.
  *
+ * @see mkdir()
+ *
  * @see f_file_copy()
  */
 #if !defined(_di_f_file_copy_)
@@ -252,6 +263,8 @@ extern "C" {
  *   F_space_not (with error bit) if file system is out of space (or file system quota is reached).
  *   F_failure (with error bit) for any other error.
  *
+ * @see mkdirat()
+ *
  * @see f_file_copy_at()
  */
 #if !defined(_di_f_file_copy_at_)
@@ -284,6 +297,8 @@ extern "C" {
  *   F_supported_not (with error bit) for unsupported file types.
  *   F_failure (with error bit) for any other error.
  *
+ * @see mkfifo()
+ *
  * @see f_file_create_fifo()
  * @see f_file_copy()
  */
@@ -320,6 +335,8 @@ extern "C" {
  *   F_supported_not (with error bit) for unsupported file types.
  *   F_failure (with error bit) for any other error.
  *
+ * @see mkfifoat()
+ *
  * @see f_file_create_fifo_at()
  * @see f_file_copy_at()
  */
@@ -359,6 +376,8 @@ extern "C" {
  *   F_supported_not (with error bit) for unsupported file types.
  *   F_failure (with error bit) for any other error.
  *
+ * @see mknod()
+ *
  * @see f_file_copy()
  * @see f_file_create_device()
  * @see f_file_create_node()
@@ -402,6 +421,8 @@ extern "C" {
  *   F_failure (with error bit) for any other error.
  *   F_supported_not (with error bit) for unsupported file types.
  *
+ * @see mknodat()
+ *
  * @see f_file_copy_at()
  * @see f_file_create_device_at()
  * @see f_file_create_node_at()
@@ -429,6 +450,8 @@ extern "C" {
  *   F_supported_not (with error bit) if the file system or file type does not support flushing.
  *   F_file_synchronize (with error bit) on any other failure.
  *
+ * @see fsync()
+ *
  * @see f_file_close()
  * @see f_file_copy()
  * @see f_file_flush()
@@ -467,6 +490,8 @@ extern "C" {
  *   F_read_only (with error bit) if file system is read-only.
  *   F_failure (with error bit) for any other error.
  *
+ * @see symlink()
+ *
  * @see f_file_copy()
  * @see f_file_link()
  */
@@ -507,6 +532,8 @@ extern "C" {
  *   F_read_only (with error bit) if file system is read-only.
  *   F_failure (with error bit) for any other error.
  *
+ * @see symlinkat()
+ *
  * @see f_file_link_at()
  */
 #if !defined(_di_f_file_link_at_)
@@ -541,6 +568,8 @@ extern "C" {
  *   F_string_too_large (with error bit) if link target path is too large for string buffer size.
  *   F_failure (with error bit) for any other error.
  *
+ * @see readlink()
+ *
  * @see f_file_copy()
  * @see f_file_link_read()
  * @see f_string_dynamic_increase_by()
@@ -581,6 +610,8 @@ extern "C" {
  *   F_string_too_large (with error bit) if link target path is too large for string buffer size.
  *   F_failure (with error bit) for any other error.
  *
+ * @see readlinkat()
+ *
  * @see f_file_copy_at()
  * @see f_file_link_read_at()
  * @see f_string_dynamic_increase_by()
@@ -615,6 +646,8 @@ extern "C" {
  *   F_read_only (with error bit) if file is read-only.
  *   F_failure (with error bit) for any other error.
  *
+ * @see chmod()
+ *
  * @see f_file_copy()
  * @see f_file_mode_set()
  */
@@ -649,6 +682,8 @@ extern "C" {
  *   F_read_only (with error bit) if file is read-only.
  *   F_failure (with error bit) for any other error.
  *
+ * @see fchmodat()
+ *
  * @see f_file_mode_set_at()
  */
 #if !defined(_di_f_file_mode_set_at_)
@@ -677,6 +712,8 @@ extern "C" {
  *   F_file_open (with error bit) if the file is already open.
  *   F_parameter (with error bit) if a parameter is invalid.
  *
+ * @see open()
+ *
  * @see f_file_copy()
  * @see f_file_open()
  */
@@ -708,6 +745,8 @@ extern "C" {
  *   F_file_open (with error bit) if the file is already open.
  *   F_parameter (with error bit) if a parameter is invalid.
  *
+ * @see openat()
+ *
  * @see f_file_open_at()
  */
 #if !defined(_di_f_file_open_at_)
@@ -746,6 +785,9 @@ extern "C" {
  *   F_read_only (with error bit) if file is read-only.
  *   F_failure (with error bit) for any other error.
  *
+ * @see chown()
+ * @see lchown()
+ *
  * @see f_file_copy()
  * @see f_file_role_change()
  */
@@ -787,6 +829,8 @@ extern "C" {
  *   F_read_only (with error bit) if file is read-only.
  *   F_failure (with error bit) for any other error.
  *
+ * @see fchownat()
+ *
  * @see f_file_role_change_at()
  */
 #if !defined(_di_f_file_role_change_at_)
@@ -818,6 +862,9 @@ extern "C" {
  *   F_number_overflow (with error bit) on overflow error.
  *   F_parameter (with error bit) if a parameter is invalid.
  *
+ * @see lstat()
+ * @see stat()
+ *
  * @see f_file_copy()
  * @see f_file_exists()
  * @see f_file_is()
@@ -854,6 +901,8 @@ extern "C" {
  *   F_number_overflow (with error bit) on overflow error.
  *   F_parameter (with error bit) if a parameter is invalid.
  *
+ * @see fstatat()
+ *
  * @see f_file_stat_at()
  * @see f_file_exists_at()
  * @see f_file_touch_at()
@@ -884,6 +933,8 @@ extern "C" {
  *   F_number_overflow (with error bit) on overflow error.
  *   F_parameter (with error bit) if a parameter is invalid.
  *
+ * @see fstat()
+ *
  * @see f_file_size_by_id()
  * @see f_file_stat_by_id()
  */
@@ -929,16 +980,13 @@ extern "C" {
  *   F_none on success.
  *   F_none_stop on success but no data was written (written == 0) (not an error and often happens if file type is not a regular file).
  *
- *   F_block (with error bit) if file descriptor is set to non-block and the write would result in a blocking operation.
- *   F_buffer (with error bit) if the buffer is invalid.
- *   F_file (with error bit) if file descriptor is in an error state.
- *   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.
- *   F_input_output (with error bit) on I/O error.
- *   F_interrupt (with error bit) if interrupt was received.
+ *   F_file_write (with error bit) on error during file write.
  *   F_parameter (with error bit) if a parameter is invalid.
  *
+ * @see flockfile()
+ * @see fwrite_unlocked()
+ * @see funlockfile()
+ *
  * @see f_file_stream_write()
  * @see f_file_stream_write_block()
  * @see f_file_stream_write_range()
@@ -977,6 +1025,8 @@ extern "C" {
  *   F_interrupt (with error bit) if interrupt was received.
  *   F_parameter (with error bit) if a parameter is invalid.
  *
+ * @see write()
+ *
  * @see f_file_write()
  * @see f_file_write_block()
  * @see f_file_write_range()