Date: 27 Aug 2007 12:22:29 +1000 From: Callum Gibson <callum@omma.gibson.athome> To: FreeBSD-gnats-submit@FreeBSD.org Subject: bin/115850: man can't handle compressed included files. Message-ID: <20070827022229.44419.qmail@omma.gibson.athome> Resent-Message-ID: <200708270600.l7R60648001924@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 115850 >Category: bin >Synopsis: man can't handle compressed included files. >Confidential: no >Severity: serious >Priority: medium >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: change-request >Submitter-Id: current-users >Arrival-Date: Mon Aug 27 06:00:06 GMT 2007 >Closed-Date: >Last-Modified: >Originator: Callum Gibson >Release: FreeBSD 6.2-STABLE i386 >Organization: >Environment: System: FreeBSD omma 6.2-STABLE FreeBSD 6.2-STABLE #4: Wed Aug 22 14:52:20 EST 2007 root@omma:/usr/obj/usr/src/sys/OMMA i386 >Description: Some ports will install with compressed manpages. man handles this by looking for the .gz version of a man source file. It is also common to include other files with the .so directive where commands or functions share a man page. Traditionally ports have had to handle this by either not compressing the manpages, or using the _MLINKS macro in the port makefile to create symlinks to the actual source file, rather than using .so versions. Notably, the current version of Xorg port breaks. See ports/113096 and ports/115845. >How-To-Repeat: In any current FreeBSD system with Xorg 7.2, try to call up a manpage which includes another. eg. man XMoveWindow (which includes >Fix: The attached patch extends the existing functionality of man's compressed file handling by allowing the processing of both .so directives which include a compressed file and testing for the compressed version of a file included with a .so directive so that it may be processed. The patch should be applied to /usr/src/gnu/usr.bin/man/man/man.c --- man.c.orig 2003-10-26 17:40:37.000000000 +1100 +++ man.c 2007-08-27 12:01:30.000000000 +1000 @@ -866,11 +866,26 @@ next: +#if HAVE_LIBZ > 0 + if ((fp = gzopen (ult, "r")) == NULL) + { + /* check for the compressed version too */ + strlcat(ult, ".gz", FILENAME_MAX); + if ((fp = gzopen (ult, "r")) == NULL) + return ult; /* we munged it, but it doesn't exist anyway */ + } +#else if ((fp = fopen (ult, "r")) == NULL) return ult; +#endif +#if HAVE_LIBZ > 0 + gzgets (fp, buf, BUFSIZ); + gzclose(fp); +#else end = fgets (buf, BUFSIZ, fp); fclose(fp); +#endif if (!end || strlen (buf) < 5) return ult; >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20070827022229.44419.qmail>