[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