@@ -150,7 +150,7 @@ bool IPAddress::fromString4(const char *address)
150
150
151
151
bool IPAddress::fromString6 (const char *address) {
152
152
uint32_t acc = 0 ; // Accumulator
153
- int dots = 0 , doubledots = -1 ;
153
+ int colons = 0 , double_colons = -1 ;
154
154
155
155
while (*address)
156
156
{
@@ -165,7 +165,7 @@ bool IPAddress::fromString6(const char *address) {
165
165
}
166
166
else if (c == ' :' ) {
167
167
if (*address == ' :' ) {
168
- if (doubledots >= 0 ) {
168
+ if (double_colons >= 0 ) {
169
169
// :: allowed once
170
170
return false ;
171
171
}
@@ -174,41 +174,41 @@ bool IPAddress::fromString6(const char *address) {
174
174
return false ;
175
175
}
176
176
// remember location
177
- doubledots = dots + !!acc;
177
+ double_colons = colons + !!acc;
178
178
address++;
179
179
} else if (*address == ' \0 ' ) {
180
180
// can't end with a single colon
181
181
return false ;
182
182
}
183
- if (dots == 7 )
183
+ if (colons == 7 )
184
184
// too many separators
185
185
return false ;
186
- _address.bytes [dots * 2 ] = acc >> 8 ;
187
- _address.bytes [dots * 2 + 1 ] = acc & 0xff ;
188
- dots ++;
186
+ _address.bytes [colons * 2 ] = acc >> 8 ;
187
+ _address.bytes [colons * 2 + 1 ] = acc & 0xff ;
188
+ colons ++;
189
189
acc = 0 ;
190
190
}
191
191
else
192
192
// Invalid char
193
193
return false ;
194
194
}
195
195
196
- if (doubledots == -1 && dots != 7 ) {
196
+ if (double_colons == -1 && colons != 7 ) {
197
197
// Too few separators
198
198
return false ;
199
199
}
200
- if (doubledots > -1 && dots > 6 ) {
201
- // Too many segments
200
+ if (double_colons > -1 && colons > 6 ) {
201
+ // Too many segments (double colon must be at least one zero field)
202
202
return false ;
203
203
}
204
- _address.bytes [dots * 2 ] = acc >> 8 ;
205
- _address.bytes [dots * 2 + 1 ] = acc & 0xff ;
206
- dots ++;
207
-
208
- if (doubledots != -1 ) {
209
- for (int i = dots * 2 - doubledots * 2 - 1 ; i >= 0 ; i--)
210
- _address.bytes [16 - dots * 2 + doubledots * 2 + i] = _address.bytes [doubledots * 2 + i];
211
- for (int i = doubledots * 2 ; i < 16 - dots * 2 + doubledots * 2 ; i++)
204
+ _address.bytes [colons * 2 ] = acc >> 8 ;
205
+ _address.bytes [colons * 2 + 1 ] = acc & 0xff ;
206
+ colons ++;
207
+
208
+ if (double_colons != -1 ) {
209
+ for (int i = colons * 2 - double_colons * 2 - 1 ; i >= 0 ; i--)
210
+ _address.bytes [16 - colons * 2 + double_colons * 2 + i] = _address.bytes [double_colons * 2 + i];
211
+ for (int i = double_colons * 2 ; i < 16 - colons * 2 + double_colons * 2 ; i++)
212
212
_address.bytes [i] = 0 ;
213
213
}
214
214
0 commit comments