summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 8692579)
raw | patch | inline | side by side (parent: 8692579)
author | Florian Forster <octo@leeloo.lan.home.verplant.org> | |
Tue, 5 May 2009 18:29:08 +0000 (20:29 +0200) | ||
committer | Florian Forster <octo@leeloo.lan.home.verplant.org> | |
Tue, 5 May 2009 18:29:08 +0000 (20:29 +0200) |
I don't want to simply include common.h, since that pulls in a lot of
other daemon-related headers..
other daemon-related headers..
src/libcollectdclient/client.c | patch | blob | history |
index 134a5c4d52cf012d2c570294e7eb6c59de00f390..2523eeaa677a0d3cc7a1afb2b9ae862bea870057 100644 (file)
/*
* Private functions
*/
+/* Even though Posix requires "strerror_r" to return an "int",
+ * some systems (e.g. the GNU libc) return a "char *" _and_
+ * ignore the second argument ... -tokkee */
+char *sstrerror (int errnum, char *buf, size_t buflen)
+{
+ buf[0] = 0;
+
+#if !HAVE_STRERROR_R
+ snprintf (buf, buflen "Error #%i; strerror_r is not available.", errnum);
+/* #endif !HAVE_STRERROR_R */
+
+#elif STRERROR_R_CHAR_P
+ {
+ char *temp;
+ temp = strerror_r (errnum, buf, buflen);
+ if (buf[0] == 0)
+ {
+ if ((temp != NULL) && (temp != buf) && (temp[0] != 0))
+ strncpy (buf, temp, buflen);
+ else
+ strncpy (buf, "strerror_r did not return "
+ "an error message", buflen);
+ }
+ }
+/* #endif STRERROR_R_CHAR_P */
+
+#else
+ if (strerror_r (errnum, buf, buflen) != 0)
+ {
+ snprintf (buf, buflen, "Error #%i; "
+ "Additionally, strerror_r failed.",
+ errnum);
+ }
+#endif /* STRERROR_R_CHAR_P */
+
+ buf[buflen - 1] = 0;
+
+ return (buf);
+} /* char *sstrerror */
+
static int lcc_set_errno (lcc_connection_t *c, int err) /* {{{ */
{
if (c == NULL)
return (-1);
- strerror_r (err, c->errbuf, sizeof (c->errbuf));
+ sstrerror (err, c->errbuf, sizeof (c->errbuf));
c->errbuf[sizeof (c->errbuf) - 1] = 0;
return (0);