From 02e370b5db828bb445dc0bfe398f2342d010a7ee Mon Sep 17 00:00:00 2001 From: Rob Landley Date: Fri, 26 Apr 2019 19:35:54 -0500 Subject: Add -M and switch test suite to use it (so test doesn't need to run as root). --- tests/man.test | 119 +++++++++++++++++++++++++---------------------------- toys/pending/man.c | 26 ++++++------ 2 files changed, 71 insertions(+), 74 deletions(-) diff --git a/tests/man.test b/tests/man.test index 51c492a2..f261437c 100644 --- a/tests/man.test +++ b/tests/man.test @@ -5,25 +5,19 @@ #testing "name" "command" "result" "infile" "stdin" -x=$((RANDOM)) -echo $x | bzip2 >/usr/share/man/man1/toybox.1.bz2 -testing "curl_strequal" "man toybox" " $x\n\n" "" "" +mkdir -p banana/man{1,3,5} -x=$((RANDOM)) -echo $x | bzip2 >/usr/share/man/man1/toybox.1.bz2 -testing "curl_strequal.3" "man toybox.1" " $x\n\n" "" "" +# Can't/shouldn't write to /usr/share/man so use -M to change path +MAN="man -M banana" +echo one | bzip2 >banana/man1/numbers.1.bz2 +echo three | gzip >banana/man3/numbers.3.gz +echo five > banana/man5/numbers.5 -rm /usr/share/man/man1/toybox.1.bz2 +testing "man" "$MAN numbers" " one\n\n" "" "" +testing "man.section" "$MAN numbers.3" " three\n\n" "" "" +testing "section man" "$MAN 5 numbers" " five\n\n" "" "" -x=$((RANDOM)) -echo $x >/usr/share/man/man1/toybox.1 -testing "curl_strnequal" "man toybox" " $x\n\n" "" "" - -x=$((RANDOM)) -echo $x >/usr/share/man/man1/toybox.1 -testing "curl_strnequal.3" "man toybox.1" " $x\n\n" "" "" - -cat >/usr/share/man/man1/toybox.1 <banana/man1/toybox.1 </usr/share/man/man1/toybox.1 <banana/man1/toybox.1 </usr/share/man/man1/toybox.1 <banana/man1/toybox.1 </usr/share/man/man1/toybox.1 -testing "gawk quote" "man toybox" " \"--\"\n\n" "" "" +echo "\\*(lq\\-\\^\\-\\*(rq" >banana/man1/toybox.1 +testing "gawk quote" "$MAN toybox" " \"--\"\n\n" "" "" -cat >/usr/share/man/man1/toybox.1 <banana/man1/toybox.1 </usr/share/man/man1/toybox.1 <banana/man1/toybox.1 </usr/share/man/man1/toybox.1 <banana/man1/toybox.1 <= 1 EOF -testing "bash escape" "man toybox" " \"\C-x\C-r\": re-read must be >= 1\n\n" "" "" +testing "bash escape" "$MAN toybox" " \"\C-x\C-r\": re-read must be >= 1\n\n" "" "" -echo "\\*(AK language. The \\*(PX standard" >/usr/share/man/man1/toybox.1 -testing "gawk var" "man toybox" " #AK language. The #PX standard\n\n" "" "" +echo "\\*(AK language. The \\*(PX standard" >banana/man1/toybox.1 +testing "gawk var" "$MAN toybox" " #AK language. The #PX standard\n\n" "" "" -cat >/usr/share/man/man1/toybox.1 <banana/man1/toybox.1 </usr/share/man/man1/toybox.1 <banana/man1/toybox.1 </usr/share/man/man1/toybox.1 <banana/man1/toybox.1 </usr/share/man/man1/toybox.1 <banana/man1/toybox.1 </usr/share/man/man1/toybox.1 <banana/man1/toybox.1 </usr/share/man/man1/toybox.1 <banana/man1/toybox.1 </usr/share/man/man1/toybox.1 <banana/man1/toybox.1 </usr/share/man/man1/toybox.1 <banana/man1/toybox.1 </usr/share/man/man1/toybox.1 <banana/man1/toybox.1 </usr/share/man/man1/toybox.1 <banana/man1/toybox.1 </usr/share/man/man1/toybox.1 <banana/man1/toybox.1 </usr/share/man/man1/toybox.1 -testing "lastb" "man toybox" "See last.1\n\n" "" "" +echo ".so man1/last.1" >banana/man1/toybox.1 +testing "lastb" "$MAN toybox" "See last.1\n\n" "" "" -cat >/usr/share/man/man1/toybox.1 <banana/man1/toybox.1 </usr/share/man/man1/toybox.1 <banana/man1/toybox.1 </usr/share/man/man1/toybox.1 <banana/man1/toybox.1 <2k:", TOYFLAG_USR|TOYFLAG_BIN)) +USE_MAN(NEWTOY(man, "<1>2k:M:", TOYFLAG_USR|TOYFLAG_BIN)) config MAN bool "man" @@ -31,7 +31,7 @@ config MAN #include GLOBALS( - char *k; + char *M, *k; char any, cell, *f, *line; ) @@ -69,12 +69,16 @@ static void trim(char *x) if (start(x)) while (*x++) TT.line++; } -static void do_man(FILE *fp) +static void do_man(char **pline, long len) { - size_t len = 0; - char *line = 0; + char *line; + + if (!pline) { + newln(); + return; + } + line = *pline; - while (getline(&line, &len, fp) > 0) { TT.line = line; s("\\fB", ""), s("\\fI", ""), s("\\fP", ""), s("\\fR", ""); // bash bold,ita s("\\(aq", "'"), s("\\(cq", "'"), s("\\(dq", "\""); // bash,rsync quote @@ -106,17 +110,13 @@ static void do_man(FILE *fp) put(" "); put(TT.line); } - } - newln(); - free(line); - fclose(fp); } // Try opening all the possible file extensions. int tryfile(char *section, char *name) { char *suf[] = {".gz", ".bz2", ".xz", ""}, *end, - *s = xmprintf("/usr/share/man/man%s/%s.%s.bz2", section, name, section); + *s = xmprintf("%s/man%s/%s.%s.bz2", TT.M, section, name, section); int fd, i, and = 1; end = s+strlen(s); @@ -147,6 +147,8 @@ void man_main(void) char *order = "18325467"; int fd; + if (!TT.M) TT.M = "/usr/share/man"; + if (!toys.optc || FLAG(k)) error_exit("not yet"); if (toys.optc == 1) { @@ -161,5 +163,5 @@ void man_main(void) } else if (-1 == (fd = tryfile(toys.optargs[0], toys.optargs[1]))) error_exit("section %s no %s", toys.optargs[0], toys.optargs[1]); - do_man(fdopen(fd, "r")); + do_lines(fd, '\n', do_man); } -- cgit v1.2.3