3535 * inet_pton4(src, dst)
3636 * like inet_aton() but without all the hexadecimal and shorthand.
3737 * return:
38- * 1 if `src' is a valid dotted quad, else 0.
38+ * length if `src' is a valid dotted quad, else 0.
3939 * notice:
40- * does not touch `dst' unless it's returning 1 .
40+ * does not touch `dst' unless it's returning !0 .
4141 * author:
4242 * Paul Vixie, 1996.
4343 */
@@ -59,11 +59,11 @@ inet_pton4(const char *src, uint8_t *dst)
5959 uint32_t new = * tp * 10 + (uint32_t )(pch - digits );
6060
6161 if (new > 255 )
62- return -1 ;
62+ return ( 0 ) ;
6363 * tp = (uint8_t )new ;
6464 if (! saw_digit ) {
6565 if (++ octets > 4 )
66- return -1 ;
66+ return ( 0 ) ;
6767 saw_digit = 1 ;
6868 }
6969 } else if (ch == '.' && saw_digit ) {
@@ -75,7 +75,7 @@ inet_pton4(const char *src, uint8_t *dst)
7575 break ;
7676 }
7777 if (octets < 4 )
78- return -1 ;
78+ return ( 0 ) ;
7979
8080 memcpy (dst , tmp , NS_INADDRSZ );
8181 return (int )(src - start );
@@ -85,9 +85,9 @@ inet_pton4(const char *src, uint8_t *dst)
8585 * inet_pton6(src, dst)
8686 * convert presentation level address to network order binary form.
8787 * return:
88- * 1 if `src' is a valid [RFC1884 2.2] address, else 0.
88+ * length if `src' is a valid [RFC1884 2.2] address, else 0.
8989 * notice:
90- * (1) does not touch `dst' unless it's returning 1 .
90+ * (1) does not touch `dst' unless it's returning !0 .
9191 * (2) :: in a full address is silently ignored.
9292 * credit:
9393 * inspired by Mark Andrews.
@@ -112,7 +112,7 @@ inet_pton6(const char *src, uint8_t *dst)
112112 /* Leading :: requires some special handling. */
113113 if (* src == ':' )
114114 if (* ++ src != ':' )
115- return -1 ;
115+ return ( 0 ) ;
116116 curtok = src ;
117117 saw_xdigit = 0 ;
118118 val = 0 ;
@@ -125,7 +125,7 @@ inet_pton6(const char *src, uint8_t *dst)
125125 val <<= 4 ;
126126 val |= (pch - xdigits );
127127 if (val > 0xffff )
128- return -1 ;
128+ return ( 0 ) ;
129129 saw_xdigit = 1 ;
130130 continue ;
131131 }
@@ -156,7 +156,7 @@ inet_pton6(const char *src, uint8_t *dst)
156156 }
157157 if (saw_xdigit ) {
158158 if (tp + NS_INT16SZ > endp )
159- return -1 ;
159+ return ( 0 ) ;
160160 * tp ++ = (uint8_t ) (val >> 8 ) & 0xff ;
161161 * tp ++ = (uint8_t ) val & 0xff ;
162162 }
@@ -175,20 +175,15 @@ inet_pton6(const char *src, uint8_t *dst)
175175 tp = endp ;
176176 }
177177 if (tp != endp )
178- return -1 ;
178+ return ( 0 ) ;
179179 memcpy (dst , tmp , NS_IN6ADDRSZ );
180180 return (int )(src - start );
181181}
182182
183183nonnull_all
184- static really_inline int32_t scan_ip6 (
185- const char * text , uint8_t * wire , size_t * length )
184+ static really_inline int32_t scan_ip6 (const char * text , uint8_t * wire )
186185{
187- int len = inet_pton6 (text , wire );
188- if (len == -1 )
189- return -1 ;
190- * length = (size_t )len ;
191- return 16 ;
186+ return inet_pton6 (text , wire );
192187}
193188
194189nonnull_all
@@ -199,12 +194,10 @@ static really_inline int32_t parse_ip6(
199194 rdata_t * rdata ,
200195 const token_t * token )
201196{
202- if (inet_pton6 (token -> data , rdata -> octets ) != -1 ) {
203- rdata -> octets += 16 ;
204- return 0 ;
205- }
206-
207- SYNTAX_ERROR (parser , "Invalid %s in %s" , NAME (item ), NAME (type ));
197+ if ((size_t )inet_pton6 (token -> data , rdata -> octets ) != token -> length )
198+ SYNTAX_ERROR (parser , "Invalid %s in %s" , NAME (item ), NAME (type ));
199+ rdata -> octets += 16 ;
200+ return 0 ;
208201}
209202
210203#endif // IP6_H
0 commit comments