[augeas-devel] augeas: master - * src/internal.h (xstrerror): new function
David Lutterkort
lutter at fedoraproject.org
Thu Mar 12 18:08:25 UTC 2009
Gitweb: http://git.fedorahosted.org/git/augeas.git?p=augeas.git;a=commitdiff;h=22cb8ecc61abf08304762fd19bef3cf77207321a
Commit: 22cb8ecc61abf08304762fd19bef3cf77207321a
Parent: 544a86c4691182bd267ef1f17d99a27d83c035f6
Author: David Lutterkort <lutter at redhat.com>
AuthorDate: Mon Mar 9 14:59:12 2009 -0700
Committer: David Lutterkort <lutter at redhat.com>
CommitterDate: Mon Mar 9 15:38:12 2009 -0700
* src/internal.h (xstrerror): new function
---
configure.ac | 2 ++
src/internal.c | 16 ++++++++++++++++
src/internal.h | 5 +++++
3 files changed, 23 insertions(+), 0 deletions(-)
diff --git a/configure.ac b/configure.ac
index e335131..0520f09 100644
--- a/configure.ac
+++ b/configure.ac
@@ -82,6 +82,8 @@ AC_SUBST(VERSION_SCRIPT_FLAGS)
gl_INIT
+AC_CHECK_FUNCS([strerror_r])
+
AC_OUTPUT(Makefile \
gnulib/lib/Makefile \
gnulib/tests/Makefile \
diff --git a/src/internal.c b/src/internal.c
index ca1df4e..86e64c2 100644
--- a/src/internal.c
+++ b/src/internal.c
@@ -361,6 +361,22 @@ char *path_of_tree(struct tree *tree) {
return path;
}
+const char *xstrerror(int errnum, char *buf, size_t len) {
+#ifdef HAVE_STRERROR_R
+# ifdef __USE_GNU
+ /* Annoying linux specific API contract */
+ return strerror_r(errnum, buf, len);
+# else
+ strerror_r(errnum, buf, len);
+ return buf;
+# endif
+#else
+ int n = snprintf(buf, len, "errno=%d", errnum);
+ return (0 < n && n < len
+ ? buf : "internal error: buffer too small in xstrerror");
+#endif
+}
+
/*
* Local variables:
* indent-tabs-mode: nil
diff --git a/src/internal.h b/src/internal.h
index 1b020c5..7844935 100644
--- a/src/internal.h
+++ b/src/internal.h
@@ -254,6 +254,11 @@ char *format_pos(const char *text, int pos);
*/
char* read_file(const char *path);
+/* Get the error message for ERRNUM in a threadsafe way. Based on libvirt's
+ * virStrError
+ */
+const char *xstrerror(int errnum, char *buf, size_t len);
+
/* Define: AUG_NO_DEFAULT_LOAD
* A hidden flag used by augparse to suppress loading of all the modules
* on the path */
More information about the augeas-devel
mailing list