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
This commit is contained in:
Denis Vlasenko 2008-07-05 08:38:41 +00:00
parent 4cbffc0f34
commit fec8b42317

View File

@ -23,6 +23,10 @@ echo ".pl \n(nlu+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) static int run_pipe(const char *unpacker, const char *pager, char *man_filename, int cat)
{ {
char *cmd; char *cmd;
@ -61,7 +65,7 @@ static int show_manpage(const char *pager, char *man_filename, int cat)
return 1; return 1;
man_filename[len - 3] = '\0'; /* ".gz" -> "" */ 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 1;
return 0; return 0;
@ -147,28 +151,22 @@ int man_main(int argc ATTRIBUTE_UNUSED, char **argv)
char *next_sect = strchrnul(cur_sect, ':'); char *next_sect = strchrnul(cur_sect, ':');
int sect_len = next_sect - cur_sect; int sect_len = next_sect - cur_sect;
char *man_filename; char *man_filename;
int found_here; int cat0man1 = 0;
/* Search for cat page first */ /* Search for cat, then man page */
man_filename = xasprintf("%.*s/%s%.*s/%s.%.*s" ".bz2", while (cat0man1 < 2) {
path_len, cur_path, int found_here;
"cat",
sect_len, cur_sect,
*argv,
sect_len, cur_sect);
found_here = show_manpage(pager, man_filename, 1);
free(man_filename);
if (!found_here) {
man_filename = xasprintf("%.*s/%s%.*s/%s.%.*s" ".bz2", man_filename = xasprintf("%.*s/%s%.*s/%s.%.*s" ".bz2",
path_len, cur_path, path_len, cur_path,
"man", STR_catNULmanNUL + cat0man1 * 4,
sect_len, cur_sect, sect_len, cur_sect,
*argv, *argv,
sect_len, cur_sect); sect_len, cur_sect);
found_here = show_manpage(pager, man_filename, 0); found_here = show_manpage(pager, man_filename, cat0man1);
found |= found_here;
cat0man1 += found_here + 1;
free(man_filename); free(man_filename);
} }
found |= found_here;
if (found && !(opt & OPT_a)) if (found && !(opt & OPT_a))
goto next_arg; goto next_arg;