[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[tyndur-devel] [PATCH 4/4] libc: POSIX: IP-Adressen-Umwandlung String/Integer
+ libc: POSIX: inet_aton() / inet_ntoa()
---
src/modules/include/netinet/in.h | 20 +++++++++++++++++++-
src/modules/lib/posix/net.c | 29 +++++++++++++++++++++++++++++
2 files changed, 48 insertions(+), 1 deletions(-)
diff --git a/src/modules/include/netinet/in.h b/src/modules/include/netinet/in.h
index 5bf18d2..6638d7e 100644
--- a/src/modules/include/netinet/in.h
+++ b/src/modules/include/netinet/in.h
@@ -31,7 +31,6 @@
#include <sys/socket.h>
#include <stdint.h>
-#include <sys/socket.h>
/// Adresse fuer das INET-Protokol (IPv4)
struct sockaddr_in {
@@ -40,10 +39,29 @@ struct sockaddr_in {
uint32_t sin_port;
};
+typedef uint32_t in_addr_t;
+struct in_addr {
+ in_addr_t s_addr;
+};
+
unsigned long int htonl(unsigned long int hostlong);
unsigned short int htons(unsigned short int hostshort);
unsigned long int ntohl(unsigned long int netlong);
unsigned short int ntohs(unsigned short int netshort);
+/**
+ * Wandelt einen String, der eine IP-Adresse der Form a.b.c.d enthaelt in einen
+ * 32-Bit-Wert um.
+ *
+ * @return 0 im Fehlerfall; ungleich 0 bei Erfolg
+ */
+int inet_aton(const char *cp, struct in_addr *inp);
+
+/**
+ * Wandelt eine 32-Bit-Adresse in einen String um. Der String ist in einem
+ * statischen Puffer und wird beim naechsten Aufruf ueberschrieben.
+ */
+char *inet_ntoa(struct in_addr in);
+
#endif
diff --git a/src/modules/lib/posix/net.c b/src/modules/lib/posix/net.c
index c6fbdb8..a463790 100644
--- a/src/modules/lib/posix/net.c
+++ b/src/modules/lib/posix/net.c
@@ -55,6 +55,35 @@ unsigned short int ntohs(unsigned short int netshort)
return big_endian_dword(netshort);
}
+/**
+ * Wandelt einen String, der eine IP-Adresse der Form a.b.c.d enthaelt in einen
+ * 32-Bit-Wert um.
+ *
+ * @return 0 im Fehlerfall; ungleich 0 bei Erfolg
+ * FIXME 0.0.0.0 ist eine gueltige Adresse
+ */
+int inet_aton(const char *cp, struct in_addr *inp)
+{
+ inp->s_addr = string_to_ip((char*) cp);
+ return inp->s_addr;
+}
+
+/**
+ * Wandelt eine 32-Bit-Adresse in einen String um. Der String ist in einem
+ * statischen Puffer und wird beim naechsten Aufruf ueberschrieben.
+ */
+char *inet_ntoa(struct in_addr in)
+{
+ static char buf[16];
+ char* res;
+
+ res = ip_to_string(in.s_addr);
+ strncpy(buf, res, 16);
+ free(res);
+
+ return buf;
+}
+
struct hostent* gethostbyname(const char* name)
{
static struct hostent hostent;
--
1.6.0.2