mirror of
https://github.com/freebsd/freebsd-src
synced 2024-11-05 18:22:52 +00:00
- Add an OPTIONAL_MANPATH directive (same as MANDATORY_MANPATH,
except an absence of the directory is not considered an error and doesn't produce a warning). Put /usr/local/lib/perl5/*/man under OPTIONAL_MANPATH. - An order of directives in manpath.config is now irrelevant. - Get rid of infinite loop when PATH is unset or NULL, and MANDATORY_MANPATH directory doesn't exist. - mdoc(9)ify manpage. Reviewed by: des, markm, sheldonh
This commit is contained in:
parent
0f8c8396c5
commit
80e770cf63
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=49888
4 changed files with 65 additions and 46 deletions
|
@ -203,7 +203,8 @@ get_dirlist ()
|
|||
if (!strncmp ("MANBIN", bp, 6))
|
||||
continue;
|
||||
|
||||
if (!strncmp ("MANDATORY_MANPATH", bp, 17))
|
||||
if (!strncmp ("MANDATORY_MANPATH", bp, 17) ||
|
||||
!strncmp ("OPTIONAL_MANPATH", bp, 16))
|
||||
{
|
||||
if ((p = strchr (bp, ' ')) == NULL &&
|
||||
(p = strchr (bp, '\t')) == NULL) {
|
||||
|
@ -211,9 +212,9 @@ get_dirlist ()
|
|||
return -1;
|
||||
}
|
||||
|
||||
bp = p;
|
||||
dlp->type = *bp == 'M'? MANPATH_MANDATORY: MANPATH_OPTIONAL;
|
||||
|
||||
dlp->mandatory = 1;
|
||||
bp = p;
|
||||
|
||||
while (*bp && *bp != '\n' && (*bp == ' ' || *bp == '\t'))
|
||||
bp++;
|
||||
|
@ -224,7 +225,8 @@ get_dirlist ()
|
|||
dlp->mandir[i] = '\0';
|
||||
|
||||
if (debug)
|
||||
fprintf (stderr, "found mandatory man directory %s\n",
|
||||
fprintf (stderr, "found %s man directory %s\n",
|
||||
dlp->type == MANPATH_MANDATORY? "mandatory": "optional",
|
||||
dlp->mandir);
|
||||
}
|
||||
else if (!strncmp ("MANPATH_MAP", bp, 11))
|
||||
|
@ -237,7 +239,7 @@ get_dirlist ()
|
|||
|
||||
bp = p;
|
||||
|
||||
dlp->mandatory = 0;
|
||||
dlp->type = MANPATH_MAP;
|
||||
|
||||
while (*bp && *bp != '\n' && (*bp == ' ' || *bp == '\t'))
|
||||
bp++;
|
||||
|
@ -269,14 +271,14 @@ get_dirlist ()
|
|||
fclose(config);
|
||||
dlp->bin[0] = '\0';
|
||||
dlp->mandir[0] = '\0';
|
||||
dlp->mandatory = 0;
|
||||
dlp->type = MANPATH_NONE;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Construct the default manpath. This picks up mandatory manpaths
|
||||
* only.
|
||||
* Construct the default manpath. This picks up mandatory
|
||||
* and optional (if they exist) manpaths only.
|
||||
*/
|
||||
char *
|
||||
def_path (perrs)
|
||||
|
@ -288,11 +290,11 @@ def_path (perrs)
|
|||
|
||||
len = 0;
|
||||
dlp = list;
|
||||
while (dlp->mandatory != 0)
|
||||
{
|
||||
while (dlp->type != MANPATH_NONE) {
|
||||
if (dlp->type == MANPATH_MANDATORY || dlp->type == MANPATH_OPTIONAL)
|
||||
len += strlen (dlp->mandir) + 1;
|
||||
dlp++;
|
||||
}
|
||||
dlp++;
|
||||
}
|
||||
|
||||
manpathlist = (char *) malloc (len);
|
||||
if (manpathlist == NULL)
|
||||
|
@ -302,21 +304,20 @@ def_path (perrs)
|
|||
|
||||
dlp = list;
|
||||
p = manpathlist;
|
||||
while (dlp->mandatory != 0)
|
||||
{
|
||||
while (dlp->type != MANPATH_NONE) {
|
||||
if (dlp->type == MANPATH_MANDATORY || dlp->type == MANPATH_OPTIONAL) {
|
||||
int status;
|
||||
char *path = dlp->mandir;
|
||||
|
||||
status = is_directory(path);
|
||||
|
||||
if (status < 0 && perrs)
|
||||
if (status < 0 && perrs && dlp->type == MANPATH_MANDATORY)
|
||||
{
|
||||
fprintf (stderr, "Warning: couldn't stat file %s!\n", path);
|
||||
}
|
||||
else if (status == 0 && perrs)
|
||||
{
|
||||
fprintf (stderr, "Warning: standard directory %s doesn't exist!\n",
|
||||
path);
|
||||
fprintf (stderr, "Warning: %s isn't a directory!\n", path);
|
||||
}
|
||||
else if (status == 1)
|
||||
{
|
||||
|
@ -324,9 +325,10 @@ def_path (perrs)
|
|||
memcpy (p, path, len);
|
||||
p += len;
|
||||
*p++ = ':';
|
||||
dlp++;
|
||||
}
|
||||
}
|
||||
dlp++;
|
||||
}
|
||||
|
||||
p[-1] = '\0';
|
||||
|
||||
|
@ -363,7 +365,7 @@ get_manpath (perrs, path)
|
|||
|
||||
for (p = tmppath; ; p = end+1)
|
||||
{
|
||||
if (end = strchr(p, ':'))
|
||||
if ((end = strchr(p, ':')) != NULL)
|
||||
*end = '\0';
|
||||
|
||||
if (debug)
|
||||
|
@ -416,11 +418,12 @@ get_manpath (perrs, path)
|
|||
fprintf (stderr, "\nadding mandatory man directories\n\n");
|
||||
|
||||
dlp = list;
|
||||
while (dlp->mandatory != 0)
|
||||
{
|
||||
add_dir_to_list (tmplist, dlp->mandir, perrs);
|
||||
dlp++;
|
||||
}
|
||||
while (dlp->type != MANPATH_NONE) {
|
||||
if (dlp->type == MANPATH_MANDATORY || dlp->type == MANPATH_OPTIONAL)
|
||||
add_dir_to_list (tmplist, dlp->mandir,
|
||||
dlp->type == MANPATH_MANDATORY? perrs: 0);
|
||||
dlp++;
|
||||
}
|
||||
|
||||
len = 0;
|
||||
lp = tmplist;
|
||||
|
|
|
@ -1,11 +1,12 @@
|
|||
# $Id: manpath.config,v 1.10 1999/05/13 15:47:04 ache Exp $
|
||||
# $Id: manpath.config,v 1.11 1999/07/25 19:33:06 markm Exp $
|
||||
#
|
||||
# This file is read by manpath to configure the mandatory manpath, to
|
||||
# map each path element to a manpath element and to determine where the
|
||||
# "man" binary lives. The format is:
|
||||
# This file is read by manpath(1) to configure the mandatory and
|
||||
# optional manpath, to map each path element to a manpath element
|
||||
# and to determine where the "man" binary lives. The format is:
|
||||
#
|
||||
# MANBIN pathname
|
||||
# MANDATORY_MANPATH manpath_element
|
||||
# OPTIONAL_MANPATH manpath_element
|
||||
# MANPATH_MAP path_element manpath_element
|
||||
#
|
||||
# MANBIN is optional
|
||||
|
@ -16,9 +17,10 @@
|
|||
#
|
||||
MANDATORY_MANPATH /usr/share/man
|
||||
MANDATORY_MANPATH /usr/share/perl/man
|
||||
#MANDATORY_MANPATH /usr/local/man
|
||||
#MANDATORY_MANPATH /usr/local/lib/perl5/5.00503/man
|
||||
MANDATORY_MANPATH /usr/X11R6/man
|
||||
#
|
||||
# check if the directory exists and if it does, add it to MANPATH
|
||||
#
|
||||
OPTIONAL_MANPATH /usr/local/lib/perl5/5.00503/man
|
||||
#
|
||||
# set up PATH to MANPATH mapping
|
||||
#
|
||||
|
|
|
@ -18,9 +18,15 @@ typedef struct
|
|||
{
|
||||
char mandir[MAXPATHLEN];
|
||||
char bin[MAXPATHLEN];
|
||||
int mandatory;
|
||||
int type;
|
||||
} DIRLIST;
|
||||
|
||||
/* manpath types */
|
||||
#define MANPATH_NONE 0
|
||||
#define MANPATH_MANDATORY 1 /* manpath is mandatory */
|
||||
#define MANPATH_OPTIONAL 2 /* manpath is optional */
|
||||
#define MANPATH_MAP 3 /* maps path to manpath */
|
||||
|
||||
DIRLIST list[MAXDIRS];
|
||||
|
||||
char *tmplist[MAXDIRS];
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
.\"
|
||||
.\" You may distribute under the terms of the GNU General Public
|
||||
.\" License as specified in the README file that comes with the man 1.0
|
||||
.\" distribution.
|
||||
.\" distribution.
|
||||
.\"
|
||||
.\" John W. Eaton
|
||||
.\" jwe@che.utexas.edu
|
||||
|
@ -12,7 +12,8 @@
|
|||
.\" The University of Texas at Austin
|
||||
.\" Austin, Texas 78712
|
||||
.\"
|
||||
.Dd Jan 5, 1991
|
||||
.\" $Id$
|
||||
.Dd Aug 16, 1999
|
||||
.Dt MANPATH 1
|
||||
.Os
|
||||
.Sh NAME
|
||||
|
@ -22,27 +23,34 @@
|
|||
.Nm
|
||||
.Op Fl q
|
||||
.Sh DESCRIPTION
|
||||
.Nm manpath
|
||||
.Nm Manpath
|
||||
tries to determine the user's manpath from a set of system
|
||||
defaults and the user's
|
||||
.Ev PATH ,
|
||||
echoing the result to the standard output. Warnings and errors are
|
||||
written to the standard error.
|
||||
If a directory in the user's path is not listed in the manpath.config
|
||||
file, manpath looks for the subdirectories man or MAN. If they exist,
|
||||
they are added to the search path.
|
||||
.Pp
|
||||
echoing the result to the standard output.
|
||||
Warnings and errors are written to the standard error.
|
||||
If a directory in the user's path is not listed in the
|
||||
.Pa %manpath_config_file%
|
||||
file,
|
||||
.Nm
|
||||
looks for the subdirectories
|
||||
.Pa man
|
||||
or
|
||||
.Pa MAN .
|
||||
If they exist, they are added to the search path.
|
||||
.Pp
|
||||
.Nm Manpath
|
||||
is used by
|
||||
.Nm man
|
||||
to determine the search path, so user's normally don't need to set the
|
||||
.Xr man 1
|
||||
to determine the search path, so users normally don't need to set the
|
||||
.Ev MANPATH
|
||||
environment variable directly.
|
||||
.Pp
|
||||
The options are as follows:
|
||||
.Bl -tag -width Ds
|
||||
.Bl -tag -width Fl
|
||||
.It Fl q
|
||||
Operate quietly. Only echo the final manpath.
|
||||
Operate quietly.
|
||||
Only echo the final manpath.
|
||||
.El
|
||||
.Sh ENVIRONMENT
|
||||
.Bl -tag -width MANPATH -compact
|
||||
|
@ -50,7 +58,7 @@ Operate quietly. Only echo the final manpath.
|
|||
If
|
||||
.Ev MANPATH
|
||||
is set,
|
||||
.Nm manpath
|
||||
.Nm
|
||||
echoes its value on the standard output and issues a warning on the
|
||||
standard error.
|
||||
.El
|
||||
|
|
Loading…
Reference in a new issue