[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [tyndur-devel] [PATCH 4/4] libc: POSIX: IP-Adressen-Umwandlung String/Integer



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: pgprUiUjTpK7B.pgp
Description: PGP signature