<p dir="ltr">I'm not sure about chg, but for hg, adding a public symbol like this should be flagged as API.</p>
<div class="gmail_quote">On Apr 5, 2016 12:50 PM, "Jun Wu" <<a href="mailto:quark@fb.com">quark@fb.com</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"># HG changeset patch<br>
# User Jun Wu <<a href="mailto:quark@fb.com">quark@fb.com</a>><br>
# Date 1459873539 -3600<br>
#      Tue Apr 05 17:25:39 2016 +0100<br>
# Node ID ff4f30f94e7d54bd36ed4a8a06faa99a0ac44298<br>
# Parent  1e97bcbb87767e1a96909900595a0b6a7791407b<br>
chg: add util function abortmsgerrno to print error with errno<br>
<br>
It's common to abortmsg with the errno information. Let's make a utility<br>
function for it.<br>
<br>
diff --git a/contrib/chg/util.c b/contrib/chg/util.c<br>
--- a/contrib/chg/util.c<br>
+++ b/contrib/chg/util.c<br>
@@ -7,6 +7,7 @@<br>
  * GNU General Public License version 2 or any later version.<br>
  */<br>
<br>
+#include <errno.h><br>
 #include <signal.h><br>
 #include <stdarg.h><br>
 #include <stdio.h><br>
@@ -27,18 +28,33 @@<br>
        fprintf(fp, "\033[%sm", code);<br>
 }<br>
<br>
+static void vabortmsgerrno(int no, const char *fmt, va_list args)<br>
+{<br>
+       fsetcolor(stderr, "1;31");<br>
+       fputs("chg: abort: ", stderr);<br>
+       vfprintf(stderr, fmt, args);<br>
+       if (no != 0)<br>
+               fprintf(stderr, " (errno = %d, %s)", no, strerror(no));<br>
+       fsetcolor(stderr, "");<br>
+       fputc('\n', stderr);<br>
+       exit(255);<br>
+}<br>
+<br>
 void abortmsg(const char *fmt, ...)<br>
 {<br>
        va_list args;<br>
        va_start(args, fmt);<br>
-       fsetcolor(stderr, "1;31");<br>
-       fputs("chg: abort: ", stderr);<br>
-       vfprintf(stderr, fmt, args);<br>
-       fsetcolor(stderr, "");<br>
-       fputc('\n', stderr);<br>
+       vabortmsgerrno(0, fmt, args);<br>
        va_end(args);<br>
+}<br>
<br>
-       exit(255);<br>
+void abortmsgerrno(const char *fmt, ...)<br>
+{<br>
+       int no = errno;<br>
+       va_list args;<br>
+       va_start(args, fmt);<br>
+       vabortmsgerrno(no, fmt, args);<br>
+       va_end(args);<br>
 }<br>
<br>
 static int debugmsgenabled = 0;<br>
diff --git a/contrib/chg/util.h b/contrib/chg/util.h<br>
--- a/contrib/chg/util.h<br>
+++ b/contrib/chg/util.h<br>
@@ -17,6 +17,7 @@<br>
 #endif<br>
<br>
 void abortmsg(const char *fmt, ...) PRINTF_FORMAT_;<br>
+void abortmsgerrno(const char *fmt, ...) PRINTF_FORMAT_;<br>
<br>
 void enablecolor(void);<br>
 void enabledebugmsg(void);<br>
_______________________________________________<br>
Mercurial-devel mailing list<br>
<a href="mailto:Mercurial-devel@mercurial-scm.org">Mercurial-devel@mercurial-scm.org</a><br>
<a href="https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel" rel="noreferrer" target="_blank">https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel</a><br>
</blockquote></div>