]> Kevux Git Server - fll/commitdiff
Bugfix: Problems exposed by unit tests.
authorKevin Day <thekevinday@gmail.com>
Tue, 24 May 2022 04:30:52 +0000 (23:30 -0500)
committerKevin Day <thekevinday@gmail.com>
Tue, 24 May 2022 04:30:52 +0000 (23:30 -0500)
Only call strncpy() if socket->name is defined.

Only set socket->id to -1 for f_socket_close_fast_e.
When received EINTR, do set socket->id to -1 for f_socket_close_fast_e.

Be consistent and make length parameter optional for the socket read and write functions.

level_0/f_socket/c/socket.c
level_0/f_socket/c/socket.h
level_0/f_socket/c/socket/common.h

index 47305ca1f89a02a19782caaec9d05c93867ebac4..e4d9410682a9873da2d3b06311c2fbff118a5f39 100644 (file)
@@ -89,7 +89,12 @@ extern "C" {
 
       address->sun_family = f_socket_domain_file_d;
 
-      strncpy(address->sun_path, socket->name, sizeof(address->sun_path) - 1);
+      if (socket->name) {
+        strncpy(address->sun_path, socket->name, sizeof(address->sun_path) - 1);
+      }
+      else {
+        address->sun_path[0] = 0;
+      }
     }
 
     if (bind(socket->id, socket->address, sizeof(struct sockaddr_un)) == -1) {
@@ -225,7 +230,7 @@ extern "C" {
     if (result == -1) {
 
       // According to man pages, retrying close() after another close on error is invalid on Linux because Linux releases the descriptor before stages that cause failures.
-      if (errno != EBADF && errno != EINTR) {
+      if (action == f_socket_close_fast_e && errno != EBADF) {
         socket->id = -1;
       }
 
@@ -342,7 +347,9 @@ extern "C" {
       return F_status_set_error(F_failure);
     }
 
-    *length = (size_t) result;
+    if (length) {
+      *length = (size_t) result;
+    }
 
     return F_none;
   }
@@ -376,7 +383,6 @@ extern "C" {
       if (errno == EPIPE) return F_status_set_error(F_pipe);
       if (errno == ETIMEDOUT) return F_status_set_error(F_time_out);
 
-
       return F_status_set_error(F_failure);
     }
 
@@ -422,7 +428,9 @@ extern "C" {
       return F_status_set_error(F_failure);
     }
 
-    *length = (size_t) result;
+    if (length) {
+      *length = (size_t) result;
+    }
 
     return F_none;
   }
index 7fdcf7cb481d9b4bf1f0d47edd44518b27fb0d08..357372d1ad0997d9fc7de108de7b055c679b0608 100644 (file)
@@ -187,7 +187,7 @@ extern "C" {
 /**
  * Create a new socket.
  *
- * @param socket_structure
+ * @param socket
  *   The socket structure.
  *   The socket.address may point to any valid structure, like "struct sockaddr", "struct sockaddr_un", or "struct sockaddr_in".
  *   The socket.domain must be assigned the desired domain.
@@ -195,8 +195,6 @@ extern "C" {
  *   The socket.protocol must be assigned the desired protocol.
  *   The socket.id will be updated with a file descriptor representing the created socket.
  *
- *   This is named "socket_structure" rather than "socket" due to a conflict with the function "socket()".
- *
  * @return
  *   F_none on success.
  *
@@ -215,7 +213,7 @@ extern "C" {
  * @see socket()
  */
 #ifndef _di_f_socket_create_
-  extern f_status_t f_socket_create(f_socket_t * const socket_structure);
+  extern f_status_t f_socket_create(f_socket_t * const socket);
 #endif // _di_f_socket_create_
 
 /**
@@ -453,6 +451,7 @@ extern "C" {
  * @param header
  *   The message header.
  * @param length
+ *   (optional) The length of the buffer.
  *   This gets replaced with the value of a positive ssize_t representing the length read.
  *   Data may be lost if the amount of data read is larger than given buffer length.
  *
@@ -544,6 +543,7 @@ extern "C" {
  * @param header
  *   The message header.
  * @param length
+ *   (optional) The length of the buffer.
  *   This gets replaced with the value of a positive ssize_t representing the length send.
  *   Data may be lost if the amount of data send is larger than given buffer length.
  *
index 978c8d54bac36308c22a3cfd7ed540b98bc3054f..41f2ccd37d9d01f635b8947f3c1b398d03028a06 100644 (file)
@@ -291,7 +291,7 @@ extern "C" {
  * domain:     The socket domain (protocol family).
  * flag:       Flags used for opening the file.
  * id:         File descriptor, with a value of -1 represents a closed file.
- * name:       The name of the socket, if a name is given (for UNIX sockets this represents the path).
+ * name:       The name of the socket, if a name is given (for UNIX sockets this represents the path) (Must be a NULL terminated string).
  * protocol:   The socket protocol.
  * size_read:  The default number of 1-byte characters to read at a time and is often used for the read buffer size.
  * size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.