diff options
author | Mystery Man <unknown@mandriva.org> | 2002-08-01 19:39:26 +0000 |
---|---|---|
committer | Mystery Man <unknown@mandriva.org> | 2002-08-01 19:39:26 +0000 |
commit | 3652ec5a73e3863215bcd87c4994fdbf55299300 (patch) | |
tree | 57c2dc33aed5c59a080bd5da7bf5b8125b4a2aef /mdk-stage1/dietlibc/libcruft/inet_pton.c | |
parent | af0430510356c70ea497fc108466c6236c1afcc1 (diff) | |
download | drakx-3652ec5a73e3863215bcd87c4994fdbf55299300.tar drakx-3652ec5a73e3863215bcd87c4994fdbf55299300.tar.gz drakx-3652ec5a73e3863215bcd87c4994fdbf55299300.tar.bz2 drakx-3652ec5a73e3863215bcd87c4994fdbf55299300.tar.xz drakx-3652ec5a73e3863215bcd87c4994fdbf55299300.zip |
This commit was manufactured by cvs2svn to create tag 'V1_1_9_2mdk'.V1_1_9_2mdk
Diffstat (limited to 'mdk-stage1/dietlibc/libcruft/inet_pton.c')
-rw-r--r-- | mdk-stage1/dietlibc/libcruft/inet_pton.c | 97 |
1 files changed, 0 insertions, 97 deletions
diff --git a/mdk-stage1/dietlibc/libcruft/inet_pton.c b/mdk-stage1/dietlibc/libcruft/inet_pton.c deleted file mode 100644 index d5c17509c..000000000 --- a/mdk-stage1/dietlibc/libcruft/inet_pton.c +++ /dev/null @@ -1,97 +0,0 @@ -#include <stdlib.h> -#include <arpa/inet.h> -#include <errno.h> - -static unsigned int scan_ip6(const char *s,char ip[16]) -{ - unsigned int i; - unsigned int len=0; - unsigned long u; - - char suffix[16]; - int prefixlen=0; - int suffixlen=0; - - for (i=0; i<16; i++) ip[i]=0; - - for (;;) { - if (*s == ':') { - len++; - if (s[1] == ':') { /* Found "::", skip to part 2 */ - s+=2; - len++; - break; - } - s++; - } - { - char *tmp; - u=strtol(s,&tmp,16); - i=tmp-s; - } - - if (!i) return 0; - if (prefixlen==12 && s[i]=='.') { - /* the last 4 bytes may be written as IPv4 address */ - if (inet_aton(s,(struct in_addr*)(ip+12))) - return i+len; - else - return 0; - } - ip[prefixlen++] = (u >> 8); - ip[prefixlen++] = (u & 255); - s += i; len += i; - if (prefixlen==16) - return len; - } - -/* part 2, after "::" */ - for (;;) { - if (*s == ':') { - if (suffixlen==0) - break; - s++; - len++; - } else if (suffixlen!=0) - break; - { - char *tmp; - u=strtol(s,&tmp,16); - i=tmp-s; - } - if (!i) { - len--; - break; - } - if (suffixlen+prefixlen<=12 && s[i]=='.') { - if (inet_aton(s,(struct in_addr*)(suffix+suffixlen))) { - suffixlen+=4; - len+=strlen(s); - break; - } else - prefixlen=12-suffixlen; /* make end-of-loop test true */ - } - suffix[suffixlen++] = (u >> 8); - suffix[suffixlen++] = (u & 255); - s += i; len += i; - if (prefixlen+suffixlen==16) - break; - } - for (i=0; i<suffixlen; i++) - ip[16-suffixlen+i] = suffix[i]; - return len; -} - -int inet_pton(int AF, const char *CP, void *BUF) { - if (AF==AF_INET) { - if (!inet_aton(CP,(struct in_addr*)BUF)) - return 0; - } else if (AF==AF_INET6) { - if (CP[scan_ip6(CP,BUF)]) - return 0; - } else { - errno=EAFNOSUPPORT; - return -1; - } - return 1; -} |