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

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



+ 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",
+    };
+
+    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));
+    } 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.
  *
-- 
1.6.0.2