On Saturday 05 July 2008 11:02, Jason Curl wrote: > I've checked your fix Denys and it also works (I don't get segfaults > anymore). I've taken the code from my second patch, checked it against > the latest snapshot and found I can reduce the size of man a bit more by > removing the two instances of the format string when generating the man > filename. I think the code is much more cryptic, but it's a small piece.
+ int mode = 0; - /* Search for cat page first */ - man_filename = xasprintf("%.*s/%s%.*s/%s.%.*s" ".bz2", Interesting patch format. char *man_filename; - int found_here; + int mode = 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) { + /* We search first for a cat page, then for a man page */ + while (mode < 2) { 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, + mode?"man":"cat", + sect_len, cur_sect, + *argv, + sect_len, cur_sect); + found = show_manpage(pager, man_filename, 1-mode); free(man_filename); + mode += found + 1; } - found |= found_here; if (found && !(opt & OPT_a)) goto next_arg; "found |= found_here;" was there for a reason: If no man page is found, we need to report that. With "man -a", we are getting false negative (found == 0) - man thinks that page is not found, whereas it's "page is not found _in last man directory_". But overall idea is good and I incorporated it in man.c now. Thanks. -- vda _______________________________________________ busybox mailing list busybox@busybox.net http://busybox.net/cgi-bin/mailman/listinfo/busybox