--- busybox-1.11.0/miscutils/man.c	2008-06-25 14:51:35.000000000 +0200
+++ busybox-1.11.0_manpatch/miscutils/man.c	2008-07-04 09:47:58.000000000 +0200
@@ -23,7 +23,7 @@
 
 */
 
-static int run_pipe(const char *unpacker, const char *pager, char *man_filename)
+static int run_pipe(const char *unpacker, const char *pager, char *man_filename, int cat)
 {
 	char *cmd;
 
@@ -35,30 +35,34 @@
 		return 1;
 	}
 
-	cmd = xasprintf("%s '%s' | gtbl | nroff -Tlatin1 -mandoc | %s",
-			unpacker, man_filename, pager);
+        if (!cat) {
+            cmd = xasprintf("%s '%s' | gtbl | nroff -Tlatin1 -mandoc | %s",
+                            unpacker, man_filename, pager);
+        } else {
+            cmd = xasprintf("%s '%s' | %s", unpacker, man_filename, pager);
+        }
 	system(cmd);
 	free(cmd);
 	return 1;
 }
 
 /* man_filename is of the form "/dir/dir/dir/name.s.bz2" */
-static int show_manpage(const char *pager, char *man_filename)
+static int show_manpage(const char *pager, char *man_filename, int cat)
 {
 	int len;
 
-	if (run_pipe("bunzip2 -c", pager, man_filename))
+	if (run_pipe("bunzip2 -c", pager, man_filename, cat))
 		return 1;
 
 	len = strlen(man_filename) - 1;
 
 	man_filename[len] = '\0'; /* ".bz2" -> ".gz" */
 	man_filename[len - 2] = 'g';
-	if (run_pipe("gunzip -c", pager, man_filename))
+	if (run_pipe("gunzip -c", pager, man_filename, cat))
 		return 1;
 
 	man_filename[len - 3] = '\0'; /* ".gz" -> "" */
-	if (run_pipe("cat", pager, man_filename))
+	if (run_pipe("cat", pager, man_filename, cat))
 		return 1;
 
 	return 0;
@@ -134,14 +138,27 @@
 				do { /* for each section */
 					char *next_sect = strchrnul(cur_sect, ':');
 					int sect_len = next_sect - cur_sect;
+                                        char *man_filename;
+                                        int found;
 
-					char *man_filename = xasprintf("%.*s/man%.*s/%s.%.*s" ".bz2",
-								path_len, cur_path,
-								sect_len, cur_sect,
-								*argv,
-								sect_len, cur_sect);
-					int found = show_manpage(pager, man_filename);
+                                        /* Search for CAT page first */
+					man_filename = xasprintf("%.*s/cat%.*s/%s.%.*s" ".bz2",
+                                                                 path_len, cur_path,
+                                                                 sect_len, cur_sect,
+                                                                 *argv,
+                                                                 sect_len, cur_sect);
+                                        found = show_manpage(pager, man_filename, 1);
 					free(man_filename);
+
+                                        if (!found) {
+                                            man_filename = xasprintf("%.*s/man%.*s/%s.%.*s" ".bz2",
+                                                                     path_len, cur_path,
+                                                                     sect_len, cur_sect,
+                                                                     *argv,
+                                                                     sect_len, cur_sect);
+                                            found = show_manpage(pager, man_filename, 0);
+                                            free(man_filename);
+                                        }
 					if (found && !(opt & OPT_a))
 						goto next_arg;
 					cur_sect = next_sect;
