From c286c2518398616a718814f7c6f57a22f02f54d1 Mon Sep 17 00:00:00 2001 From: Gunnar Beutner Date: Fri, 21 Mar 2014 15:51:55 +0100 Subject: [PATCH] Show additional lines for config errors. Refs #5825 --- lib/config/debuginfo.cpp | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/lib/config/debuginfo.cpp b/lib/config/debuginfo.cpp index b100c34f0..ac809a625 100644 --- a/lib/config/debuginfo.cpp +++ b/lib/config/debuginfo.cpp @@ -51,6 +51,8 @@ DebugInfo icinga::DebugInfoRange(const DebugInfo& start, const DebugInfo& end) return result; } +#define EXTRA_LINES 2 + void icinga::ShowCodeFragment(std::ostream& out, const DebugInfo& di) { if (di.Path.IsEmpty()) @@ -62,34 +64,36 @@ void icinga::ShowCodeFragment(std::ostream& out, const DebugInfo& di) int lineno = 1; char line[1024]; - while (ifs.good() && lineno <= di.LastLine) { + while (ifs.good() && lineno <= di.LastLine + EXTRA_LINES) { ifs.getline(line, sizeof(line)); for (int i = 0; line[i]; i++) if (line[i] == '\t') line[i] = ' '; - if (lineno >= di.FirstLine && lineno <= di.LastLine) { + if (lineno >= di.FirstLine - EXTRA_LINES && lineno <= di.LastLine + EXTRA_LINES) { String pathInfo = di.Path + "(" + Convert::ToString(lineno) + "): "; out << pathInfo; out << line << "\n"; - int start, end; + if (lineno >= di.FirstLine && lineno <= di.LastLine) { + int start, end; - start = 0; - end = strlen(line); + start = 0; + end = strlen(line); - if (lineno == di.FirstLine) - start = di.FirstColumn - 1; + if (lineno == di.FirstLine) + start = di.FirstColumn - 1; - if (lineno == di.LastLine) - end = di.LastColumn; + if (lineno == di.LastLine) + end = di.LastColumn; - out << String(pathInfo.GetLength(), ' '); - out << String(start, ' '); - out << String(end - start, '^'); + out << String(pathInfo.GetLength(), ' '); + out << String(start, ' '); + out << String(end - start, '^'); - out << "\n"; + out << "\n"; + } } lineno++;