#include "c.h"
#include <netinet/in.h>
#include <ctype.h>
#include "port/pg_bswap.h"
Go to the source code of this file.
|
int | inet_aton (const char *cp, struct in_addr *addr) |
|
◆ inet_aton()
int inet_aton |
( |
const char * |
cp, |
|
|
struct in_addr * |
addr |
|
) |
| |
Definition at line 56 of file inet_aton.c.
57{
59 int base,
60 n;
62 u_int parts[4];
63 u_int *pp = parts;
64
65 for (;;)
66 {
67
68
69
70
72 base = 10;
73 if (*cp == '0')
74 {
75 if (*++cp == 'x' || *cp == 'X')
76 base = 16, cp++;
77 else
78 base = 8;
79 }
80 while ((
c = *cp) !=
'\0')
81 {
82 if (isdigit((
unsigned char)
c))
83 {
85 cp++;
86 continue;
87 }
88 if (base == 16 && isxdigit((
unsigned char)
c))
89 {
91 (
c + 10 - (islower((
unsigned char)
c) ?
'a' :
'A'));
92 cp++;
93 continue;
94 }
95 break;
96 }
97 if (*cp == '.')
98 {
99
100
101
102
103 if (pp >= parts + 3 ||
val > 0xff)
104 return 0;
106 }
107 else
108 break;
109 }
110
111
112
113
114 while (*cp)
115 if (!isspace((unsigned char) *cp++))
116 return 0;
117
118
119
120
121 n = pp - parts + 1;
122 switch (n)
123 {
124
125 case 1:
126 break;
127
128 case 2:
130 return 0;
131 val |= parts[0] << 24;
132 break;
133
134 case 3:
136 return 0;
137 val |= (parts[0] << 24) | (parts[1] << 16);
138 break;
139
140 case 4:
142 return 0;
143 val |= (parts[0] << 24) | (parts[1] << 16) | (parts[2] << 8);
144 break;
145 }
146 if (addr)
148 return 1;
149}
References pg_hton32, and val.
Referenced by is_ip_address(), and pq_verify_peer_name_matches_certificate_ip().