On Mon, Apr 13 18:21, Kevin Wolf wrote: > + 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); Diese Sternchen entsprechen so aber nicht unserer Konvention, kommt davon wenn man aus den Manpages kopiert, dann haben die Parameter auch immer so sprechende Namen. ;-) > + > +/** > + * 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); Auch hier noch ein * am falschen Ort. > + > #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; Aber sonst sieht das gut aus. -- Antoine Kaufmann <toni@xxxxxxxxxxxxxxxx>
Attachment:
pgp84mmFmDd7E.pgp
Description: PGP signature