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

Re: [tyndur-devel] [PATCH 2/3] libc: POSIX: herror() und hstrerror()



On Tue, Aug 11 19:35, Kevin Wolf wrote:
> + libc: POSIX: herror() und hstrerror(). Diese Funktionen zu haben
>   überzeugen git davon, dass er kein -lresolv benutzen sollte.
> 
> Signed-off-by: Kevin Wolf <kevin@xxxxxxxxxx>
> ---
>  src/modules/include/netdb.h |   14 +++++++++++++-
>  src/modules/lib/posix/net.c |   34 ++++++++++++++++++++++++++++++++++
>  2 files changed, 47 insertions(+), 1 deletions(-)
> 
> diff --git a/src/modules/include/netdb.h b/src/modules/include/netdb.h
> index 88cd98c..feb0ba2 100644
> --- a/src/modules/include/netdb.h
> +++ b/src/modules/include/netdb.h
> @@ -78,7 +78,7 @@ struct protoent* getprotobyname(const char* name);
>  /** Fehlerstatus fuer gethostbyaddr() und gethostbyname() */
>  extern int h_errno;
>  
> -/** Werte fuer h_error */
> +/** Werte fuer h_errno */
>  enum {
>      HOST_NOT_FOUND,
>      NO_DATA,
> @@ -86,5 +86,17 @@ enum {
>      TRY_AGAIN,
>  };
>  
> +/**
> + * Gibt den Fehlerstring fuer einen gegebenen Wert von h_errno zurueck
> + */
> +const char* hstrerror(int error);
> +
> +/**
> + * Gibt str gefolgt vom String fuer h_errno auf stderr aus. Wenn str NULL oder
> + * ein leerer String ist, wird nur der Fehlerstring ausgegeben.
> + */
> +void herror(const char* str);
> +
> +
>  #endif
>  
> diff --git a/src/modules/lib/posix/net.c b/src/modules/lib/posix/net.c
> index 44b45b5..f747da6 100644
> --- a/src/modules/lib/posix/net.c
> +++ b/src/modules/lib/posix/net.c
> @@ -57,6 +57,40 @@ unsigned short int ntohs(unsigned short int netshort)
>  }
>  
>  /**
> + * Gibt den Fehlerstring fuer einen gegebenen Wert von h_errno zurueck
> + */
> +const char* hstrerror(int error)
> +{
> +    static const char* errors[] = {
> +        [HOST_NOT_FOUND]    = "Unbekannter Rechner",
> +        [NO_DATA]           = "Der gesuchte Name hat keine IP-Adresse",
> +        [NO_RECOVERY]       = "Ein DNS-Fehler ist aufgetreten",
> +        [TRY_AGAIN]         = "Zeitweiliger DNS-Fehler; erneut versuchen",
> +    };

Hm sowas wie "Fehler: Erfolg" ist hier nicht vorgesehen?

> +
> +    if ((error < HOST_NOT_FOUND) || (error > TRY_AGAIN)) {
> +        return NULL;
> +    }
> +
> +    return errors[error];
> +}
> +
> +/**
> + * Gibt str gefolgt vom String fuer h_errno auf stderr aus. Wenn str NULL oder
> + * ein leerer String ist, wird nur der Fehlerstring ausgegeben.
> + */
> +void herror(const char* str)
> +{
> +    if (str && *str) {
> +        fprintf(stderr, "%s: %s\n", str, hstrerror(h_errno));

Das finde ich dann auch ein bisschen 0xd00f, wenn das rot wird.... bei
einem Fehler der noch nicht in hstrerror implementiert ist, oder so. Die
alternative wäre natürlich printf fixen. *g*

> +    } else {
> +        fprintf(stderr, "%s\n", hstrerror(h_errno));
> +    }
> +}
> +
> +
> +
> +/**
>   * Wandelt einen String, der eine IP-Adresse der Form a.b.c.d enthaelt in einen
>   * 32-Bit-Wert um.
>   *

-- 
Antoine Kaufmann
<toni@xxxxxxxxxxxxxxxx>

Attachment: pgpwtARvFutOx.pgp
Description: PGP signature