Last change
on this file was
e16e8f2,
checked in by Edwin Eefting <edwin@datux.nl>, 3 years ago
|
bootstuff
|
-
Property mode set to
100644
|
File size:
1.7 KB
|
Line | |
---|
1 | /************************************************************************** |
---|
2 | MISC Support Routines |
---|
3 | **************************************************************************/ |
---|
4 | |
---|
5 | FILE_LICENCE ( GPL2_OR_LATER ); |
---|
6 | |
---|
7 | #include <stdlib.h> |
---|
8 | #include <ctype.h> |
---|
9 | #include <byteswap.h> |
---|
10 | #include <gpxe/in.h> |
---|
11 | #include <gpxe/timer.h> |
---|
12 | |
---|
13 | /************************************************************************** |
---|
14 | INET_ATON - Convert an ascii x.x.x.x to binary form |
---|
15 | **************************************************************************/ |
---|
16 | int inet_aton ( const char *cp, struct in_addr *inp ) { |
---|
17 | const char *p = cp; |
---|
18 | const char *digits_start; |
---|
19 | unsigned long ip = 0; |
---|
20 | unsigned long val; |
---|
21 | int j; |
---|
22 | for(j = 0; j <= 3; j++) { |
---|
23 | digits_start = p; |
---|
24 | val = strtoul(p, ( char ** ) &p, 10); |
---|
25 | if ((p == digits_start) || (val > 255)) return 0; |
---|
26 | if ( ( j < 3 ) && ( *(p++) != '.' ) ) return 0; |
---|
27 | ip = (ip << 8) | val; |
---|
28 | } |
---|
29 | if ( *p == '\0' ) { |
---|
30 | inp->s_addr = htonl(ip); |
---|
31 | return 1; |
---|
32 | } |
---|
33 | return 0; |
---|
34 | } |
---|
35 | |
---|
36 | unsigned long strtoul ( const char *p, char **endp, int base ) { |
---|
37 | unsigned long ret = 0; |
---|
38 | unsigned int charval; |
---|
39 | |
---|
40 | while ( isspace ( *p ) ) |
---|
41 | p++; |
---|
42 | |
---|
43 | if ( base == 0 ) { |
---|
44 | base = 10; |
---|
45 | if ( *p == '0' ) { |
---|
46 | p++; |
---|
47 | base = 8; |
---|
48 | if ( ( *p | 0x20 ) == 'x' ) { |
---|
49 | p++; |
---|
50 | base = 16; |
---|
51 | } |
---|
52 | } |
---|
53 | } |
---|
54 | |
---|
55 | while ( 1 ) { |
---|
56 | charval = *p; |
---|
57 | if ( charval >= 'a' ) { |
---|
58 | charval = ( charval - 'a' + 10 ); |
---|
59 | } else if ( charval >= 'A' ) { |
---|
60 | charval = ( charval - 'A' + 10 ); |
---|
61 | } else if ( charval <= '9' ) { |
---|
62 | charval = ( charval - '0' ); |
---|
63 | } |
---|
64 | if ( charval >= ( unsigned int ) base ) |
---|
65 | break; |
---|
66 | ret = ( ( ret * base ) + charval ); |
---|
67 | p++; |
---|
68 | } |
---|
69 | |
---|
70 | if ( endp ) |
---|
71 | *endp = ( char * ) p; |
---|
72 | |
---|
73 | return ( ret ); |
---|
74 | } |
---|
75 | |
---|
76 | /* |
---|
77 | * Local variables: |
---|
78 | * c-basic-offset: 8 |
---|
79 | * End: |
---|
80 | */ |
---|
Note: See
TracBrowser
for help on using the repository browser.