svn commit: trunk/busybox/miscutils

vda at busybox.net vda at busybox.net
Sat Jul 5 01:38:42 PDT 2008


Author: vda
Date: 2008-07-05 01:38:41 -0700 (Sat, 05 Jul 2008)
New Revision: 22649

Log:
man: code shrink

function                                             old     new   delta
man_main                                             725     765     +40
show_manpage                                         112       -    -112
------------------------------------------------------------------------------
(add/remove: 0/1 grow/shrink: 1/0 up/down: 40/-112)           Total: -72 bytes



Modified:
   trunk/busybox/miscutils/man.c


Changeset:
Modified: trunk/busybox/miscutils/man.c
===================================================================
--- trunk/busybox/miscutils/man.c	2008-07-05 08:20:34 UTC (rev 22648)
+++ trunk/busybox/miscutils/man.c	2008-07-05 08:38:41 UTC (rev 22649)
@@ -23,6 +23,10 @@
 
 */
 
+/* Trick gcc to reuse "cat" string. */
+#define STR_catNULmanNUL "cat\0man"
+#define STR_cat          "cat\0man"
+
 static int run_pipe(const char *unpacker, const char *pager, char *man_filename, int cat)
 {
 	char *cmd;
@@ -61,7 +65,7 @@
 		return 1;
 
 	man_filename[len - 3] = '\0'; /* ".gz" -> "" */
-	if (run_pipe("cat", pager, man_filename, cat))
+	if (run_pipe(STR_cat, pager, man_filename, cat))
 		return 1;
 
 	return 0;
@@ -147,28 +151,22 @@
 					char *next_sect = strchrnul(cur_sect, ':');
 					int sect_len = next_sect - cur_sect;
 					char *man_filename;
-					int found_here;
+					int cat0man1 = 0;
 
-					/* Search for cat page first */
-					man_filename = xasprintf("%.*s/%s%.*s/%s.%.*s" ".bz2",
-							path_len, cur_path,
-							"cat",
-							sect_len, cur_sect,
-							*argv,
-							sect_len, cur_sect);
-					found_here = show_manpage(pager, man_filename, 1);
-					free(man_filename);
-					if (!found_here) {
+					/* Search for cat, then man page */
+					while (cat0man1 < 2) {
+						int found_here;
 						man_filename = xasprintf("%.*s/%s%.*s/%s.%.*s" ".bz2",
-							path_len, cur_path,
-							"man",
-							sect_len, cur_sect,
-							*argv,
-							sect_len, cur_sect);
-						found_here = show_manpage(pager, man_filename, 0);
+								path_len, cur_path,
+								STR_catNULmanNUL + cat0man1 * 4,
+								sect_len, cur_sect,
+								*argv,
+								sect_len, cur_sect);
+						found_here = show_manpage(pager, man_filename, cat0man1);
+						found |= found_here;
+						cat0man1 += found_here + 1;
 						free(man_filename);
 					}
-					found |= found_here;
 
 					if (found && !(opt & OPT_a))
 						goto next_arg;



More information about the busybox-cvs mailing list