# HG changeset patch # User Jun Wu # Date 1459873539 -3600 # Node ID 57a78a64de44f1f841e997d1caa90deb9c319802 # Parent ea86cdcd9b50bf38c6b9dd7bbaa04b9c8cc0aefb 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 -r ea86cdcd9b50 -r 57a78a64de44 contrib/chg/util.c --- a/contrib/chg/util.c Tue Apr 05 14:48:09 2016 +0100 +++ b/contrib/chg/util.c Tue Apr 05 17:25:39 2016 +0100 @@ -7,6 +7,7 @@ * GNU General Public License version 2 or any later version. */ +#include #include #include #include @@ -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 -r ea86cdcd9b50 -r 57a78a64de44 contrib/chg/util.h --- a/contrib/chg/util.h Tue Apr 05 14:48:09 2016 +0100 +++ b/contrib/chg/util.h Tue Apr 05 17:25:39 2016 +0100 @@ -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);