On Fri, Aug 14 23:01, Kevin Wolf wrote: > On Fri, Aug 14, 2009 at 10:41:08PM +0200, Antoine Kaufmann wrote: > > 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? > > man netdb.h > > Scheint sowas nicht zu geben, nein. Das ist die vollständige Aufzählung. Kaputte Sache sowas ;-) > > > > > > + > > > + 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* > > Naja, wenn NULL zurueckkommt, ist sowieso was kaputt. Und printf geht > unter Linux wie folgt: > > kevin@silvanus:/tmp> cat test.c > #include <stdio.h> > > int main(void) > { > printf("%s\n", NULL); > return 0; > } > kevin@silvanus:/tmp> gcc test.c -o test > kevin@silvanus:/tmp> ./test > Speicherzugriffsfehler > kevin@silvanus:/tmp> Nicht unbedingt, wie wir gesehen haben. ;-) Aber jo, pack halt rein. Acked-by: Antoine Kaufmann <toni@xxxxxxxxxx> -- Antoine Kaufmann <toni@xxxxxxxxxxxxxxxx>
Attachment:
pgpntQX5ZBKoK.pgp
Description: PGP signature