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