[Openvas-commits] r5804 - in trunk/openvas-manager: . src

scm-commit@wald.intevation.org scm-commit at wald.intevation.org
Fri Nov 6 08:45:36 CET 2009


Author: felix
Date: 2009-11-06 08:45:35 +0100 (Fri, 06 Nov 2009)
New Revision: 5804

Modified:
   trunk/openvas-manager/ChangeLog
   trunk/openvas-manager/src/omp.c
Log:
* src/omp.c (latex_print_text): New, extracted from latex_escape_text.
Writes to file directly (bufferless) in contrast to memory.
(latex_escape_text): Added todo, function might be obsolete.
(print_report_latex): Use (new) latex_print_text.


Modified: trunk/openvas-manager/ChangeLog
===================================================================
--- trunk/openvas-manager/ChangeLog	2009-11-06 07:22:42 UTC (rev 5803)
+++ trunk/openvas-manager/ChangeLog	2009-11-06 07:45:35 UTC (rev 5804)
@@ -1,3 +1,10 @@
+2009-11-06  Felix Wolfsteller <felix.wolfsteller at intevation.de>
+
+	* src/omp.c (latex_print_text): New, extracted from latex_escape_text.
+	Writes to file directly (bufferless) in contrast to memory.
+	(latex_escape_text): Added todo, function might be obsolete.
+	(print_report_latex): Use (new) latex_print_text.
+
 2009-11-05  Matthew Mundell <matthew.mundell at intevation.de>
 
 	* src/omp.c (init_result_iterator): Include all levels if levels is NULL.
@@ -33,8 +40,7 @@
 	(omp_xml_handle_end_element): For the XML report, include the filtering
 	and sorting info in the response, add a port summary section.  Pass
 	sorting and filtering attributes to init_result_iterator.
-
-omp_xml_handle_end_element): In CLIENT_GET_CONFIGS send OID
+	(omp_xml_handle_end_element): In CLIENT_GET_CONFIGS send OID
 	with NVT in PREFERENCE.
 
 2009-11-04  Felix Wolfsteller <felix.wolfsteller at intevation.de>

Modified: trunk/openvas-manager/src/omp.c
===================================================================
--- trunk/openvas-manager/src/omp.c	2009-11-06 07:22:42 UTC (rev 5803)
+++ trunk/openvas-manager/src/omp.c	2009-11-06 07:45:35 UTC (rev 5804)
@@ -2119,6 +2119,8 @@
  * Replace LaTeX special characters with LaTeX equivalents.
  *
  * @return A newly allocated version of text.
+ *
+ * @todo Evaluate whether there will be use for this function.
  */
 static gchar*
 latex_escape_text (const char *text)
@@ -2196,6 +2198,81 @@
 }
 
 /**
+ * @brief Writes \ref text to \ref file, escaping characters on the fly.
+ *
+ * @param[in]   file  File descriptor to write to.
+ * @param[out]  text  Text to write to file, while escaping 'special'
+ *                    characters.
+ */
+static void
+latex_print_text (FILE* file, const char* text)
+{
+  const char* pos = text;
+  while (*pos)
+    {
+      switch (*pos)
+        {
+          case '\\':
+            // Look ahead
+            ++pos;
+            // Skip "\r"
+            if (*pos && *pos == 'r')
+              break; /* skip */
+            // Replace "\n" by '\n''\n'
+            else if (*pos && *pos == 'n')
+              {
+                fputc ('\n', file);
+                fputc ('\n', file);
+                break;
+              }
+            --pos;
+            // No escaped special char. 
+            fputs ("$\\backslash$", file);
+            break;
+          /** @todo following cases simply place a backslash ('\') in front of
+           *        the character to be escaped. simplification possible?
+           *        case '%':
+           *        //...
+           *        case '$':
+           *          fputc ('&', file);
+           *          fputc (*pos, file);
+           *          break;
+           *        default: //...
+           */
+          case '#':
+            fputs ("\\#", file);
+            break;
+          case '$':
+            fputs ("\\$", file);
+            break;
+          case '%':
+            fputs ("\\%", file);
+            break;
+          case '&':
+            fputs ("\\&", file);
+            break;
+          case '{':
+            fputs ("\\{", file);
+            break;
+          case '}':
+            fputs ("\\}", file);
+            break;
+          case '_':
+            fputs ("\\_", file);
+            break;
+          case '^':
+            fputs ("\\^", file);
+            break;
+          default:
+            fputc (*pos, file);
+            break;
+        }
+      ++pos;
+    }
+}
+
+
+/**
  * @brief Convert \n's to real newline's.
  *
  * @return A newly allocated version of text.
@@ -2544,11 +2621,8 @@
       // FIX severity ordering is alphabetical on severity name
       while (next (&results))
         {
-          gchar *descr;
           const char *severity;
 
-          descr = latex_escape_text (result_iterator_descr (&results));
-
           if (last_port == NULL
               || strcmp (last_port, result_iterator_port (&results)))
             {
@@ -2580,8 +2654,12 @@
           fprintf (out,
                    "\\hline\n"
                    "\\rowcolor%s%s\\\\\n"
-                   "\\hline\n"
-                   "%s\\\\\n"
+                   "\\hline\n",
+                   latex_severity_colour (severity),
+                   latex_severity_heading (severity));
+          latex_print_text (out, result_iterator_descr (&results));
+          fprintf (out,
+                   "\\\\\n"
                    "OID of test routine: %s\\\\\n"
                    "\\hline\n"
                    "\\end{tabularx}\n"
@@ -2589,12 +2667,8 @@
                    "\n"
                    "\\begin{tabular}{l}\n"
                    "\\begin{tabularx}{\\textwidth * 1}{|X|}\n",
-                   latex_severity_colour (severity),
-                   latex_severity_heading (severity),
-                   descr,
                    result_iterator_nvt (&results));
 
-          g_free (descr);
         }
       if (last_port)
         {



More information about the Openvas-commits mailing list