[PATCH 1 of 3 V2] chg: add util function abortmsgerrno to print error with errno
Jun Wu
quark at fb.com
Tue Apr 5 16:47:54 UTC 2016
# HG changeset patch
# User Jun Wu <quark at fb.com>
# Date 1459873539 -3600
# Tue Apr 05 17:25:39 2016 +0100
# Node ID ff4f30f94e7d54bd36ed4a8a06faa99a0ac44298
# Parent 1e97bcbb87767e1a96909900595a0b6a7791407b
chg: add util function abortmsgerrno to print error with errno
It's common to abortmsg with the errno information. Let's make a utility
function for it.
diff --git a/contrib/chg/util.c b/contrib/chg/util.c
--- a/contrib/chg/util.c
+++ b/contrib/chg/util.c
@@ -7,6 +7,7 @@
* GNU General Public License version 2 or any later version.
*/
+#include <errno.h>
#include <signal.h>
#include <stdarg.h>
#include <stdio.h>
@@ -27,18 +28,33 @@
fprintf(fp, "\033[%sm", code);
}
+static void vabortmsgerrno(int no, const char *fmt, va_list args)
+{
+ fsetcolor(stderr, "1;31");
+ fputs("chg: abort: ", stderr);
+ vfprintf(stderr, fmt, args);
+ if (no != 0)
+ fprintf(stderr, " (errno = %d, %s)", no, strerror(no));
+ fsetcolor(stderr, "");
+ fputc('\n', stderr);
+ exit(255);
+}
+
void abortmsg(const char *fmt, ...)
{
va_list args;
va_start(args, fmt);
- fsetcolor(stderr, "1;31");
- fputs("chg: abort: ", stderr);
- vfprintf(stderr, fmt, args);
- fsetcolor(stderr, "");
- fputc('\n', stderr);
+ vabortmsgerrno(0, fmt, args);
va_end(args);
+}
- exit(255);
+void abortmsgerrno(const char *fmt, ...)
+{
+ int no = errno;
+ va_list args;
+ va_start(args, fmt);
+ vabortmsgerrno(no, fmt, args);
+ va_end(args);
}
static int debugmsgenabled = 0;
diff --git a/contrib/chg/util.h b/contrib/chg/util.h
--- a/contrib/chg/util.h
+++ b/contrib/chg/util.h
@@ -17,6 +17,7 @@
#endif
void abortmsg(const char *fmt, ...) PRINTF_FORMAT_;
+void abortmsgerrno(const char *fmt, ...) PRINTF_FORMAT_;
void enablecolor(void);
void enabledebugmsg(void);
More information about the Mercurial-devel
mailing list