Ticket #981: new pj_perror() utility API


git-svn-id: https://svn.pjsip.org/repos/pjproject/trunk@2965 74dad513-b988-da41-8d7b-12977e46ad98
diff --git a/pjlib/include/pj/errno.h b/pjlib/include/pj/errno.h
index 07cdcf8..8b536c4 100644
--- a/pjlib/include/pj/errno.h
+++ b/pjlib/include/pj/errno.h
@@ -112,6 +112,27 @@
 			       char *buf, pj_size_t bufsize);
 
 /**
+ * Print the error message pertaining to the specified error code to
+ * the log.
+ *
+ * @param log_level The log will be printed at this log level.
+ * @param sender    The log sender string.
+ * @param status    The error code which error message will be printed.
+ * @param title	    String to be printed before the error message. Note
+ *		    that a colon will be added automatically between
+ *		    this string and the error message.
+ * @param options   Options, currently must be zero.
+ */
+#if PJ_LOG_MAX_LEVEL >= 1
+PJ_DECL(void) pj_perror(int log_level, const char *sender, 
+			pj_status_t status, const char *title,
+			int options);
+#else
+#   define pj_perror(level, sender, status, title, options)
+#endif	/* #if PJ_LOG_MAX_LEVEL >= 1 */
+
+
+/**
  * Type of callback to be specified in #pj_register_strerror()
  *
  * @param e	    The error code to lookup.
diff --git a/pjlib/src/pj/errno.c b/pjlib/src/pj/errno.c
index 9aca83d..652b809 100644
--- a/pjlib/src/pj/errno.c
+++ b/pjlib/src/pj/errno.c
@@ -18,8 +18,10 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
  */
 #include <pj/errno.h>
+#include <pj/log.h>
 #include <pj/string.h>
 #include <pj/compat/string.h>
+#include <pj/compat/stdarg.h>
 #include <pj/assert.h>
 
 /* Prototype for platform specific error message, which will be defined 
@@ -196,3 +198,30 @@
     return errstr;
 }
 
+#if PJ_LOG_MAX_LEVEL >= 1
+static void call_logger(const char *sender, int level, const char *format, ...)
+{
+    va_list arg;
+    va_start(arg, format);
+    pj_log(sender, level, format, arg);
+    va_end(arg);
+}
+
+/*
+ * perror()
+ */
+PJ_DEF(void) pj_perror(int log_level, const char *sender, 
+		       pj_status_t status, const char *title,
+		       int options)
+{
+    char errmsg[PJ_ERR_MSG_SIZE];
+
+    PJ_ASSERT_ON_FAIL(options==0, return);
+    PJ_UNUSED_ARG(options);
+
+    pj_strerror(status, errmsg, sizeof(errmsg));
+    call_logger(sender, log_level, "%s: %s", title, errmsg);
+}
+#endif	/* #if PJ_LOG_MAX_LEVEL >= 1 */
+
+