Fixed ZDE build - missing header file
[ZeXOS.git] / libc / socket / inet_addr.c
blob4b94bb4c6c489edee5636c66046beb6746a0ae5a
1 /*
2 * ZeX/OS
3 * Copyright (C) 2009 Tomas 'ZeXx86' Jedrzejek (zexx86@zexos.org)
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
20 #include <stdio.h>
21 #include <stdlib.h>
22 #include <string.h>
23 #include <arpa/inet.h>
24 #include <sys/socket.h>
25 #include <netinet/in.h>
27 #define NET_IPV4_TO_ADDR(a, b, c, d) \
28 (((unsigned)(d) << 24) | (((unsigned)(c) & 0xff) << 16) | (((unsigned)(b) & 0xff) << 8) | ((unsigned)(a) & 0xff))
30 in_addr_t inet_addr (const char *src)
32 if (!src)
33 return 0;
35 unsigned char a = 0;
36 unsigned char b = 0;
37 unsigned char c = 0;
38 unsigned char d = 0;
40 unsigned g = 0;
41 unsigned i = 0;
42 unsigned y = strlen (src);
44 if (!y)
45 return 0;
47 char *str = (char *) malloc (sizeof (char) * (y + 1));
49 if (!str)
50 return 0;
52 memcpy (str, src, y);
53 str[y] = '\0';
55 unsigned h[4];
57 while (i < y) {
58 if (str[i] == '.') {
59 str[i] = '\0';
60 h[g] = i+1;
61 g ++;
65 if (g != 3) {
66 free (str);
67 return -1;
70 a = atoi (str);
71 b = atoi (str+h[0]);
72 c = atoi (str+h[1]);
73 d = atoi (str+h[2]);
75 free (str);
77 g = NET_IPV4_TO_ADDR (a, b, c, d);
79 return (in_addr_t) g;