MCPcopy Create free account
hub / github.com/deathkiller/jazz2-native / inet_pton

Function inet_pton

Sources/Dependencies/ixwebsocket/IXNetSystem.cpp:377–447  ·  view source on GitHub ↗

mingw does not have inet_pton, which were taken as is from the musl C library.

Source from the content-addressed store, hash-verified

375 // mingw does not have inet_pton, which were taken as is from the musl C library.
376 //
377 int inet_pton(int af, const char* s, void* a0)
378 {
379#if defined(_WIN32) && defined(__GNUC__)
380 uint16_t ip[8];
381 unsigned char* a = (unsigned char*) a0;
382 int i, j, v, d, brk = -1, need_v4 = 0;
383
384 if (af == AF_INET)
385 {
386 for (i = 0; i < 4; i++)
387 {
388 for (v = j = 0; j < 3 && isdigit(s[j]); j++)
389 v = 10 * v + s[j] - '0';
390 if (j == 0 || (j > 1 && s[0] == '0') || v > 255) return 0;
391 a[i] = v;
392 if (s[j] == 0 && i == 3) return 1;
393 if (s[j] != '.') return 0;
394 s += j + 1;
395 }
396 return 0;
397 }
398 else if (af != AF_INET6)
399 {
400 errno = EAFNOSUPPORT;
401 return -1;
402 }
403
404 if (*s == ':' && *++s != ':') return 0;
405
406 for (i = 0;; i++)
407 {
408 if (s[0] == ':' && brk < 0)
409 {
410 brk = i;
411 ip[i & 7] = 0;
412 if (!*++s) break;
413 if (i == 7) return 0;
414 continue;
415 }
416 for (v = j = 0; j < 4 && (d = hexval(s[j])) >= 0; j++)
417 v = 16 * v + d;
418 if (j == 0) return 0;
419 ip[i & 7] = v;
420 if (!s[j] && (brk >= 0 || i == 7)) break;
421 if (i == 7) return 0;
422 if (s[j] != ':')
423 {
424 if (s[j] != '.' || (i < 6 && brk < 0)) return 0;
425 need_v4 = 1;
426 i++;
427 break;
428 }
429 s += j + 1;
430 }
431 if (brk >= 0)
432 {
433 memmove(ip + brk + 7 - i, ip + brk, 2 * (i + 1 - brk));
434 for (j = 0; j < 7 - i; j++)

Callers 1

listenMethod · 0.70

Calls 1

hexvalFunction · 0.85

Tested by

no test coverage detected