Squashed 'third_party/rawrtc/re/' content from commit f3163ce8b
Change-Id: I6a235e6ac0f03269d951026f9d195da05c40fdab
git-subtree-dir: third_party/rawrtc/re
git-subtree-split: f3163ce8b526a13b35ef71ce4dd6f43585064d8a
diff --git a/src/fmt/str_error.c b/src/fmt/str_error.c
new file mode 100644
index 0000000..fd345c1
--- /dev/null
+++ b/src/fmt/str_error.c
@@ -0,0 +1,51 @@
+/**
+ * @file str_error.c System error messages
+ *
+ * Copyright (C) 2010 Creytiv.com
+ */
+#define _GNU_SOURCE 1
+#define __EXTENSIONS__ 1
+#include <string.h>
+#include <re_types.h>
+#include <re_fmt.h>
+
+
+/**
+ * Look up an error message string corresponding to an error number.
+ *
+ * @param errnum Error Code
+ * @param buf Buffer for storing error message
+ * @param sz Buffer size
+ *
+ * @return Error message string
+ */
+const char *str_error(int errnum, char *buf, size_t sz)
+{
+ const char *s;
+
+ if (!buf || !sz)
+ return NULL;
+
+ buf[0] = '\0';
+#ifdef HAVE_STRERROR_R
+
+#ifdef __GLIBC__
+ s = strerror_r(errnum, buf, sz);
+#else
+ (void)strerror_r(errnum, buf, sz);
+ s = buf;
+#endif
+
+#elif defined (WIN32) & !defined (__MINGW32__)
+ (void)strerror_s(buf, sz, errnum);
+ s = buf;
+#else
+ /* fallback */
+ (void)errnum;
+ s = "unknown error";
+#endif
+
+ buf[sz - 1] = '\0';
+
+ return s;
+}