This is an automated email from the ASF dual-hosted git repository.

xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git


The following commit(s) were added to refs/heads/master by this push:
     new 62076fb7b9 ipv6_setsockopt: Merge similarity logic
62076fb7b9 is described below

commit 62076fb7b972716cd7fd68df3221dab498567a1a
Author: zhanghongyu <[email protected]>
AuthorDate: Fri May 12 15:44:27 2023 +0800

    ipv6_setsockopt: Merge similarity logic
    
    modify the assignment logic to make it easier to extend new options later
    
    Signed-off-by: zhanghongyu <[email protected]>
---
 net/inet/ipv6_setsockopt.c | 67 +++++++++++-----------------------------------
 1 file changed, 16 insertions(+), 51 deletions(-)

diff --git a/net/inet/ipv6_setsockopt.c b/net/inet/ipv6_setsockopt.c
index bb79cd2a2e..39abeb7528 100644
--- a/net/inet/ipv6_setsockopt.c
+++ b/net/inet/ipv6_setsockopt.c
@@ -73,6 +73,11 @@ int ipv6_setsockopt(FAR struct socket *psock, int option,
 
   ninfo("option: %d\n", option);
 
+  if (value == NULL || value_len == 0)
+    {
+      return -EINVAL;
+    }
+
   net_lock();
   switch (option)
     {
@@ -85,14 +90,7 @@ int ipv6_setsockopt(FAR struct socket *psock, int option,
           FAR const struct ipv6_mreq *mrec ;
 
           mrec = (FAR const struct ipv6_mreq *)value;
-          if (mrec == NULL)
-            {
-              ret = -EINVAL;
-            }
-          else
-            {
-              ret = mld_joingroup(mrec);
-            }
+          ret = mld_joingroup(mrec);
         }
         break;
 
@@ -101,32 +99,17 @@ int ipv6_setsockopt(FAR struct socket *psock, int option,
           FAR const struct ipv6_mreq *mrec ;
 
           mrec = (FAR const struct ipv6_mreq *)value;
-          if (mrec == NULL)
-            {
-              ret = -EINVAL;
-            }
-          else
-            {
-              ret = mld_leavegroup(mrec);
-            }
+          ret = mld_leavegroup(mrec);
         }
         break;
 
       case IPV6_MULTICAST_HOPS:   /* Multicast hop limit */
         {
           FAR struct socket_conn_s *conn;
-          uint8_t ttl;
 
-          if (value == NULL || value_len == 0)
-            {
-              ret = -EINVAL;
-              break;
-            }
-
-          ttl = (value_len >= sizeof(int)) ?
-            *(FAR int *)value : (int)*(FAR unsigned char *)value;
           conn = psock->s_conn;
-          conn->ttl = ttl;
+          conn->ttl = (value_len >= sizeof(int)) ?
+                      *(FAR int *)value : (int)*(FAR unsigned char *)value;
           ret = OK;
         }
         break;
@@ -147,18 +130,10 @@ int ipv6_setsockopt(FAR struct socket *psock, int option,
       case IPV6_UNICAST_HOPS:     /* Unicast hop limit */
         {
           FAR struct socket_conn_s *conn;
-          uint8_t ttl;
-
-          if (value == NULL || value_len == 0)
-            {
-              ret = -EINVAL;
-              break;
-            }
 
-          ttl = (value_len >= sizeof(int)) ?
-            *(FAR int *)value : (int)*(FAR unsigned char *)value;
           conn = psock->s_conn;
-          conn->ttl = ttl;
+          conn->ttl = (value_len >= sizeof(int)) ?
+                      *(FAR int *)value : (int)*(FAR unsigned char *)value;
           ret = OK;
         }
         break;
@@ -166,18 +141,10 @@ int ipv6_setsockopt(FAR struct socket *psock, int option,
       case IPV6_RECVPKTINFO:
       case IPV6_RECVHOPLIMIT:
         {
-          FAR struct socket_conn_s *conn;
-          int enable;
-
-          if (value == NULL || value_len == 0)
-            {
-              ret = -EINVAL;
-              break;
-            }
+          FAR struct socket_conn_s *conn = psock->s_conn;
+          int enable = (value_len >= sizeof(int)) ?
+                       *(FAR int *)value : (int)*(FAR unsigned char *)value;
 
-          enable = (value_len >= sizeof(int)) ?
-            *(FAR int *)value : (int)*(FAR unsigned char *)value;
-          conn = psock->s_conn;
           if (enable)
             {
               _SO_SETOPT(conn->s_options, option);
@@ -194,10 +161,8 @@ int ipv6_setsockopt(FAR struct socket *psock, int option,
       case IPV6_TCLASS:
         {
           FAR struct socket_conn_s *conn = psock->s_conn;
-          int tclass;
-
-          tclass = (value_len >= sizeof(int)) ?
-                   *(FAR int *)value : (int)*(FAR unsigned char *)value;
+          int tclass = (value_len >= sizeof(int)) ?
+                       *(FAR int *)value : (int)*(FAR unsigned char *)value;
 
           /* According to RFC3542 6.5, the interpretation of the integer
            * traffic class value is:

Reply via email to