mirror of
https://github.com/ipxe/ipxe
synced 2025-12-23 13:30:57 +03:00
[ipv4] Rewrite inet_aton()
The implementation of inet_aton() has an unknown provenance. Rewrite this code to avoid potential licensing uncertainty. Also move the code from core/misc.c to its logical home in net/ipv4.c, and add a few extra test cases. Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
@@ -10,29 +10,6 @@ FILE_LICENCE ( GPL2_OR_LATER );
|
||||
#include <ipxe/in.h>
|
||||
#include <ipxe/timer.h>
|
||||
|
||||
/**************************************************************************
|
||||
INET_ATON - Convert an ascii x.x.x.x to binary form
|
||||
**************************************************************************/
|
||||
int inet_aton ( const char *cp, struct in_addr *inp ) {
|
||||
const char *p = cp;
|
||||
const char *digits_start;
|
||||
unsigned long ip = 0;
|
||||
unsigned long val;
|
||||
int j;
|
||||
for(j = 0; j <= 3; j++) {
|
||||
digits_start = p;
|
||||
val = strtoul(p, ( char ** ) &p, 10);
|
||||
if ((p == digits_start) || (val > 255)) return 0;
|
||||
if ( ( j < 3 ) && ( *(p++) != '.' ) ) return 0;
|
||||
ip = (ip << 8) | val;
|
||||
}
|
||||
if ( *p == '\0' ) {
|
||||
inp->s_addr = htonl(ip);
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
unsigned int strtoul_charval ( unsigned int charval ) {
|
||||
|
||||
if ( charval >= 'a' ) {
|
||||
|
||||
Reference in New Issue
Block a user