Author: bdubbs
Date: 2010-05-07 19:16:13 -0600 (Fri, 07 May 2010)
New Revision: 2193

Added:
   trunk/man-db/man-db-2.5.7-fix_man_assertion-1.patch
Log:
Fixes the assertion error when Man-DB tries to display certan man pages

Added: trunk/man-db/man-db-2.5.7-fix_man_assertion-1.patch
===================================================================
--- trunk/man-db/man-db-2.5.7-fix_man_assertion-1.patch                         
(rev 0)
+++ trunk/man-db/man-db-2.5.7-fix_man_assertion-1.patch 2010-05-08 01:16:13 UTC 
(rev 2193)
@@ -0,0 +1,137 @@
+Submited by: William Immendorf <[email protected]>
+Date: 2010-05-07
+Inital Package Version: 2.5.7
+Origin: Upstream commit 1199, 
http://bazaar.launchpad.net/~cjwatson/man-db/trunk/revision/1199
+Upstream Status: From Upstream Bazaar
+
+Description: This fixes a issue in when you try to view certan man pages with
+man (I've seen this happen with ifort's man page, this acually happend to me
+when I was trying to test out various forigen language man pages), man errors
+out with this message:
+
+man: man.c:2393: display: Assertion `decomp->ncommands == 1' failed. Aborted
+Aborted
+
+and then quits. This is a issue specific to Man-DB-2.5.7, 2.5.6 diddn't have
+this issue. This is a well known issue and will be fixed with the release of
+Man-DB-2.5.8.
+
+diff -Naur man-db-2.5.7.orig/lib/pipeline.c man-db-2.5.7/lib/pipeline.c
+--- man-db-2.5.7.orig/lib/pipeline.c   2010-05-07 19:31:50.784188731 -0500
++++ man-db-2.5.7/lib/pipeline.c        2010-05-07 19:32:45.275061944 -0500
+@@ -329,6 +329,25 @@
+       return cmd;
+ }
+ 
++static void passthrough (void *data ATTRIBUTE_UNUSED)
++{
++      for (;;) {
++              char buffer[4096];
++              int r = read (STDIN_FILENO, buffer, 4096);
++              if (r <= 0)
++                      break;
++              if (fwrite (buffer, 1, (size_t) r, stdout) < (size_t) r)
++                      break;
++      }
++
++      return;
++}
++
++command *command_new_passthrough (void)
++{
++      return command_new_function ("cat", &passthrough, NULL, NULL);
++}
++
+ command *command_dup (command *cmd)
+ {
+       command *newcmd = XMALLOC (command);
+@@ -831,20 +850,6 @@
+       return p;
+ }
+ 
+-static void passthrough (void *data ATTRIBUTE_UNUSED)
+-{
+-      for (;;) {
+-              char buffer[4096];
+-              int r = read (STDIN_FILENO, buffer, 4096);
+-              if (r <= 0)
+-                      break;
+-              if (fwrite (buffer, 1, (size_t) r, stdout) < (size_t) r)
+-                      break;
+-      }
+-
+-      return;
+-}
+-
+ void pipeline_connect (pipeline *source, pipeline *sink, ...)
+ {
+       va_list argv;
+@@ -876,11 +881,8 @@
+                * because it has nowhere to send output. Until this is
+                * fixed, this kludge is necessary.
+                */
+-              if (arg->ncommands == 0) {
+-                      command *cmd = command_new_function
+-                              ("cat", &passthrough, NULL, NULL);
+-                      pipeline_command (arg, cmd);
+-              }
++              if (arg->ncommands == 0)
++                      pipeline_command (arg, command_new_passthrough ());
+       }
+       va_end (argv);
+ }
+diff -Naur man-db-2.5.7.orig/lib/pipeline.h man-db-2.5.7/lib/pipeline.h
+--- man-db-2.5.7.orig/lib/pipeline.h   2010-05-07 19:31:50.785191356 -0500
++++ man-db-2.5.7/lib/pipeline.h        2010-05-07 19:32:45.275061944 -0500
+@@ -172,6 +172,9 @@
+  */
+ command *command_new_sequence (const char *name, ...) ATTRIBUTE_SENTINEL;
+ 
++/* Return a new command that just passes data from its input to its output. */
++command *command_new_passthrough (void);
++
+ /* Return a duplicate of a command. */
+ command *command_dup (command *cmd);
+ 
+diff -Naur man-db-2.5.7.orig/NEWS man-db-2.5.7/NEWS
+--- man-db-2.5.7.orig/NEWS     2010-05-07 19:31:50.779187160 -0500
++++ man-db-2.5.7/NEWS  2010-05-07 19:32:45.275061944 -0500
+@@ -1,3 +1,15 @@
++man-db 2.5.8
++============
++
++Major changes since man-db 2.5.7:
++
++      Fixes:
++      ------
++
++      o Fix assertion failure on 'man -l' with an uncompressed page and
++        any of --no-hyphenation, --no-justification, or a non-English
++        page.
++
+ man-db 2.5.7 (16 February 2010)
+ ===============================
+ 
+diff -Naur man-db-2.5.7.orig/src/man.c man-db-2.5.7/src/man.c
+--- man-db-2.5.7.orig/src/man.c        2010-05-07 19:31:50.746062788 -0500
++++ man-db-2.5.7/src/man.c     2010-05-07 19:32:45.277061513 -0500
+@@ -2390,9 +2390,16 @@
+ #endif /* TROFF_IS_GROFF */
+ 
+               if (seq->u.sequence.ncommands) {
+-                      assert (decomp->ncommands == 1);
+-                      command_sequence_command (seq, decomp->commands[0]);
+-                      decomp->commands[0] = seq;
++                      assert (decomp->ncommands <= 1);
++                      if (decomp->ncommands) {
++                              command_sequence_command
++                                      (seq, decomp->commands[0]);
++                              decomp->commands[0] = seq;
++                      } else {
++                              command_sequence_command
++                                      (seq, command_new_passthrough ());
++                              pipeline_command (decomp, seq);
++                      }
+               } else
+                       command_free (seq);
+       }

-- 
http://linuxfromscratch.org/mailman/listinfo/patches
FAQ: http://www.linuxfromscratch.org/faq/
Unsubscribe: See the above information page

Reply via email to