1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

error.c: moved

* error.c (preface_dump, postscript_dump): moved from
  rb_vm_bugreport to place the last important message at the very
  last after [NOTE].

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57317 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2017-01-13 02:57:45 +00:00
parent a51cf13429
commit 81cb9aa574
3 changed files with 75 additions and 71 deletions

71
error.c
View file

@ -336,6 +336,72 @@ bug_report_file(const char *file, int line)
return NULL;
}
FUNC_MINIMIZED(static void bug_important_message(FILE *out, const char *const msg, size_t len));
static void
bug_important_message(FILE *out, const char *const msg, size_t len)
{
const char *const endmsg = msg + len;
const char *p = msg;
if (!len) return;
if (isatty(fileno(out))) {
static const char red[] = "\033[;31;1;7m";
static const char green[] = "\033[;32;7m";
static const char reset[] = "\033[m";
const char *e = strchr(p, '\n');
const int w = (int)(e - p);
do {
int i = (int)(e - p);
fputs(*p == ' ' ? green : red, out);
fwrite(p, 1, e - p, out);
for (; i < w; ++i) fputc(' ', out);
fputs(reset, out);
fputc('\n', out);
} while ((p = e + 1) < endmsg && (e = strchr(p, '\n')) != 0 && e > p + 1);
}
fwrite(p, 1, endmsg - p, out);
}
static void
preface_dump(FILE *out)
{
#if defined __APPLE__
static const char msg[] = ""
"-- Crash Report log information "
"--------------------------------------------\n"
" See Crash Report log file under the one of following:\n"
" * ~/Library/Logs/CrashReporter\n"
" * /Library/Logs/CrashReporter\n"
" * ~/Library/Logs/DiagnosticReports\n"
" * /Library/Logs/DiagnosticReports\n"
" for more details.\n"
"Don't forget to include the above Crash Report log file in bug reports.\n"
"\n";
const size_t msglen = sizeof(msg) - 1;
#else
const char *msg = NULL;
const size_t msglen = 0;
#endif
bug_important_message(out, msg, msglen);
}
static void
postscript_dump(FILE *out)
{
#if defined __APPLE__
static const char msg[] = ""
"[IMPORTANT]\n"
"Don't forget to include the Crash Report log file in bug reports.\n"
"\n";
const size_t msglen = sizeof(msg) - 1;
#else
const char *msg = NULL;
const size_t msglen = 0;
#endif
bug_important_message(out, msg, msglen);
}
static void
bug_report_begin_valist(FILE *out, const char *fmt, va_list args)
{
@ -346,6 +412,7 @@ bug_report_begin_valist(FILE *out, const char *fmt, va_list args)
fputs(buf, out);
snprintf(buf, sizeof(buf), "\n%s\n\n", ruby_description);
fputs(buf, out);
preface_dump(out);
}
#define bug_report_begin(out, fmt) do { \
@ -366,7 +433,8 @@ bug_report_end(FILE *out)
(*reporter->func)(out, reporter->data);
}
}
fprintf(out, REPORTBUG_MSG);
fputs(REPORTBUG_MSG, out);
postscript_dump(out);
}
#define report_bug(file, line, fmt, ctx) do { \
@ -487,6 +555,7 @@ rb_assert_failure(const char *file, int line, const char *name, const char *expr
fprintf(out, "Assertion Failed: %s:%d:", file, line);
if (name) fprintf(out, "%s:", name);
fprintf(out, "%s\n%s\n\n", expr, ruby_description);
preface_dump(out);
rb_vm_bugreport(NULL);
bug_report_end(out);
die();

View file

@ -587,6 +587,11 @@ class TestRubyOptions < Test::Unit::TestCase
(?:.*\n)?
For\sdetails:\shttp:\/\/.*\.ruby-lang\.org/.*\n
\n
(?:
\[IMPORTANT\]\n
.*\n
\n
)?
)x,
]
ExpectedStderrList << additional if additional

View file

@ -922,72 +922,6 @@ rb_dump_machine_register(const ucontext_t *ctx)
# define rb_dump_machine_register(ctx) ((void)0)
#endif /* HAVE_PRINT_MACHINE_REGISTERS */
FUNC_MINIMIZED(static void bug_important_message(FILE *out, const char *const msg, size_t len));
static void
bug_important_message(FILE *out, const char *const msg, size_t len)
{
const char *const endmsg = msg + len;
const char *p = msg;
if (!len) return;
if (isatty(fileno(out))) {
static const char red[] = "\033[;31;1;7m";
static const char green[] = "\033[;32;7m";
static const char reset[] = "\033[m";
const char *e = strchr(p, '\n');
const int w = (int)(e - p);
do {
int i = (int)(e - p);
fputs(*p == ' ' ? green : red, out);
fwrite(p, 1, e - p, out);
for (; i < w; ++i) fputc(' ', out);
fputs(reset, out);
fputc('\n', out);
} while ((p = e + 1) < endmsg && (e = strchr(p, '\n')) != 0 && e > p + 1);
}
fwrite(p, 1, endmsg - p, out);
}
static void
preface_dump(void)
{
#if defined __APPLE__
static const char msg[] = ""
"-- Crash Report log information "
"--------------------------------------------\n"
" See Crash Report log file under the one of following:\n"
" * ~/Library/Logs/CrashReporter\n"
" * /Library/Logs/CrashReporter\n"
" * ~/Library/Logs/DiagnosticReports\n"
" * /Library/Logs/DiagnosticReports\n"
" for more details.\n"
"Don't forget to include the above Crash Report log file in bug reports.\n"
"\n";
const size_t msglen = sizeof(msg) - 1;
#else
const char *msg = NULL;
const size_t msglen = 0;
#endif
bug_important_message(stderr, msg, msglen);
}
static void
postscript_dump(void)
{
#if defined __APPLE__
static const char msg[] = ""
"[IMPORTANT]\n"
"Don't forget to include the Crash Report log file in bug reports.\n"
"\n";
const size_t msglen = sizeof(msg) - 1;
#else
const char *msg = NULL;
const size_t msglen = 0;
#endif
bug_important_message(stderr, msg, msglen);
}
void
rb_vm_bugreport(const void *ctx)
{
@ -1001,8 +935,6 @@ rb_vm_bugreport(const void *ctx)
#endif
const rb_vm_t *const vm = GET_VM();
preface_dump();
if (vm) {
SDR();
rb_backtrace_print_as_bugreport();
@ -1109,6 +1041,4 @@ rb_vm_bugreport(const void *ctx)
}
#endif /* __FreeBSD__ */
}
postscript_dump();
}