nuttx-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From GitBox <...@apache.org>
Subject [GitHub] [incubator-nuttx] anpaza commented on a change in pull request #524: inetaddr() more compliant with standards (especially error handling).
Date Tue, 10 Mar 2020 13:47:31 GMT
anpaza commented on a change in pull request #524: inetaddr() more compliant with standards
(especially error handling).
URL: https://github.com/apache/incubator-nuttx/pull/524#discussion_r390324008
 
 

 ##########
 File path: libs/libc/net/lib_inetaddr.c
 ##########
 @@ -56,19 +56,65 @@
  *   standard IPv4 dotted decimal notation, to an integer value suitable for
  *   use as an Internet address.
  *
+ *   inet_aton() returns nonzero if the address is valid, zero if not.
+ *   The address supplied in cp can have one of the following forms:
+ *
+ *   a.b.c.d Each of the four numeric parts specifies a byte of the address;
+ *           the bytes are assigned in left-to-right order to produce the binary address.
+ *
+ *   a.b.c   Parts a and b specify the first two bytes of the binary address.
+ *           Part c is interpreted as a 16-bit value that defines the rightmost
+ *           two bytes of the binary address. This notation is suitable for specifying
+ *           (outmoded) Class B network addresses.
+ *
+ *   a.b     Part a specifies the first byte of the binary address. Part b is
+ *           interpreted as a 24-bit value that defines the rightmost three bytes
+ *           of the binary address. This notation is suitable for specifying
+ *           (outmoded) Class A network addresses.
+ *
+ *   a       The value a is interpreted as a 32-bit value that is stored directly
+ *           into the binary address without any byte rearrangement.
+ *
+ * Returned Value:
+ *   If input string cannot be recognized as a valid IPv4 number, function
+ *   returns zero.
+ *
  ****************************************************************************/
 
 in_addr_t inet_addr(FAR const char *cp)
 {
   unsigned int a, b, c, d;
-  uint32_t result;
+  uint32_t result = 0;
+
+  switch (sscanf(cp, "%u.%u.%u.%u", &a, &b, &c, &d))
+    {
+      case 1:
+        {
+          result = a;
+          break;
+        }
+
+      case 2:
+        {
+          if (a < 0x100 && b < 0x1000000)
+            result = (a << 24) | b;
 
 Review comment:
   Sorry, I got you wrong.
   Fixed.

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services

Mime
View raw message