|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* main.c - common main function for lsof
|
|
Packit Service |
603f59 |
*
|
|
Packit Service |
603f59 |
* V. Abell, Purdue University
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* Copyright 1994 Purdue Research Foundation, West Lafayette, Indiana
|
|
Packit Service |
603f59 |
* 47907. All rights reserved.
|
|
Packit Service |
603f59 |
*
|
|
Packit Service |
603f59 |
* Written by Victor A. Abell
|
|
Packit Service |
603f59 |
*
|
|
Packit Service |
603f59 |
* This software is not subject to any license of the American Telephone
|
|
Packit Service |
603f59 |
* and Telegraph Company or the Regents of the University of California.
|
|
Packit Service |
603f59 |
*
|
|
Packit Service |
603f59 |
* Permission is granted to anyone to use this software for any purpose on
|
|
Packit Service |
603f59 |
* any computer system, and to alter it and redistribute it freely, subject
|
|
Packit Service |
603f59 |
* to the following restrictions:
|
|
Packit Service |
603f59 |
*
|
|
Packit Service |
603f59 |
* 1. Neither the authors nor Purdue University are responsible for any
|
|
Packit Service |
603f59 |
* consequences of the use of this software.
|
|
Packit Service |
603f59 |
*
|
|
Packit Service |
603f59 |
* 2. The origin of this software must not be misrepresented, either by
|
|
Packit Service |
603f59 |
* explicit claim or by omission. Credit to the authors and Purdue
|
|
Packit Service |
603f59 |
* University must appear in documentation and sources.
|
|
Packit Service |
603f59 |
*
|
|
Packit Service |
603f59 |
* 3. Altered versions must be plainly marked as such, and must not be
|
|
Packit Service |
603f59 |
* misrepresented as being the original software.
|
|
Packit Service |
603f59 |
*
|
|
Packit Service |
603f59 |
* 4. This notice may not be removed or altered.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#ifndef lint
|
|
Packit Service |
603f59 |
static char copyright[] =
|
|
Packit Service |
603f59 |
"@(#) Copyright 1994 Purdue Research Foundation.\nAll rights reserved.\n";
|
|
Packit Service |
603f59 |
static char *rcsid = "$Id: main.c,v 1.59 2018/03/26 21:50:45 abe Exp $";
|
|
Packit Service |
603f59 |
#endif
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#include "lsof.h"
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* Local definitions
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
static int GObk[] = { 1, 1 }; /* option backspace values */
|
|
Packit Service |
603f59 |
static char GOp; /* option prefix -- '+' or '-' */
|
|
Packit Service |
603f59 |
static char *GOv = (char *)NULL; /* option `:' value pointer */
|
|
Packit Service |
603f59 |
static int GOx1 = 1; /* first opt[][] index */
|
|
Packit Service |
603f59 |
static int GOx2 = 0; /* second opt[][] index */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
_PROTOTYPE(static int GetOpt,(int ct, char *opt[], char *rules, int *err));
|
|
Packit Service |
603f59 |
_PROTOTYPE(static char *sv_fmt_str,(char *f));
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* main() - main function for lsof
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
int
|
|
Packit Service |
603f59 |
main(argc, argv)
|
|
Packit Service |
603f59 |
int argc;
|
|
Packit Service |
603f59 |
char *argv[];
|
|
Packit Service |
603f59 |
{
|
|
Packit Service |
603f59 |
int ad, c, i, n, rv, se1, se2, ss;
|
|
Packit Service |
603f59 |
char *cp;
|
|
Packit Service |
603f59 |
int err = 0;
|
|
Packit Service |
603f59 |
int ev = 0;
|
|
Packit Service |
603f59 |
int fh = 0;
|
|
Packit Service |
603f59 |
char *fmtr = (char *)NULL;
|
|
Packit Service |
603f59 |
long l;
|
|
Packit Service |
603f59 |
MALLOC_S len;
|
|
Packit Service |
603f59 |
struct lfile *lf;
|
|
Packit Service |
603f59 |
struct nwad *np, *npn;
|
|
Packit Service |
603f59 |
char options[128];
|
|
Packit Service |
603f59 |
int rc = 0;
|
|
Packit Service |
603f59 |
struct stat sb;
|
|
Packit Service |
603f59 |
struct sfile *sfp;
|
|
Packit Service |
603f59 |
struct lproc **slp = (struct lproc **)NULL;
|
|
Packit Service |
603f59 |
int sp = 0;
|
|
Packit Service |
603f59 |
struct str_lst *str, *strt;
|
|
Packit Service |
603f59 |
int version = 0;
|
|
Packit Service |
603f59 |
int xover = 0;
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if defined(HAS_STRFTIME)
|
|
Packit Service |
603f59 |
char *fmt = (char *)NULL;
|
|
Packit Service |
603f59 |
size_t fmtl = (size_t)0;
|
|
Packit Service |
603f59 |
#endif /* defined(HAS_STRFTIME) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if defined(HASZONES)
|
|
Packit Service |
603f59 |
znhash_t *zp;
|
|
Packit Service |
603f59 |
#endif /* defined(HASZONES) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if defined(HASSELINUX)
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* This stanza must be immediately before the "Save progam name." code, since
|
|
Packit Service |
603f59 |
* it contains code itself.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
cntxlist_t *cntxp;
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
CntxStatus = is_selinux_enabled() ? 1 : 0;
|
|
Packit Service |
603f59 |
#endif /* defined(HASSELINUX) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* Save program name.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
if ((Pn = strrchr(argv[0], '/')))
|
|
Packit Service |
603f59 |
Pn++;
|
|
Packit Service |
603f59 |
else
|
|
Packit Service |
603f59 |
Pn = argv[0];
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* Close enough file descriptors above 2 that library functions will have
|
|
Packit Service |
603f59 |
* open descriptors.
|
|
Packit Service |
603f59 |
*
|
|
Packit Service |
603f59 |
* Make sure stderr, stdout, and stdin are open descriptors. Open /dev/null
|
|
Packit Service |
603f59 |
* for ones that aren't. Be terse.
|
|
Packit Service |
603f59 |
*
|
|
Packit Service |
603f59 |
* Make sure umask allows lsof to define its own file permissions.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
if ((MaxFd = (int) GET_MAX_FD()) < 53)
|
|
Packit Service |
603f59 |
MaxFd = 53;
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if defined(HAS_CLOSEFROM)
|
|
Packit Service |
603f59 |
(void) closefrom(3);
|
|
Packit Service |
603f59 |
#else /* !defined(HAS_CLOSEFROM) */
|
|
Packit Service |
603f59 |
for (i = 3; i < MaxFd; i++)
|
|
Packit Service |
603f59 |
(void) close(i);
|
|
Packit Service |
603f59 |
#endif /* !defined(HAS_CLOSEFROM) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
while (((i = open("/dev/null", O_RDWR, 0)) >= 0) && (i < 2))
|
|
Packit Service |
603f59 |
;
|
|
Packit Service |
603f59 |
if (i < 0)
|
|
Packit Service |
603f59 |
Exit(1);
|
|
Packit Service |
603f59 |
if (i > 2)
|
|
Packit Service |
603f59 |
(void) close(i);
|
|
Packit Service |
603f59 |
(void) umask(0);
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if defined(HASSETLOCALE)
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* Set locale to environment's definition.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
(void) setlocale(LC_CTYPE, "");
|
|
Packit Service |
603f59 |
#endif /* defined(HASSETLOCALE) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* Common initialization.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
Mypid = getpid();
|
|
Packit Service |
603f59 |
if ((Mygid = (gid_t)getgid()) != getegid())
|
|
Packit Service |
603f59 |
Setgid = 1;
|
|
Packit Service |
603f59 |
Euid = geteuid();
|
|
Packit Service |
603f59 |
if ((Myuid = (uid_t)getuid()) && !Euid)
|
|
Packit Service |
603f59 |
Setuidroot = 1;
|
|
Packit Service |
603f59 |
if (!(Namech = (char *)malloc(MAXPATHLEN + 1))) {
|
|
Packit Service |
603f59 |
(void) fprintf(stderr, "%s: no space for name buffer\n", Pn);
|
|
Packit Service |
603f59 |
Exit(1);
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
Namechl = (size_t)(MAXPATHLEN + 1);
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* Create option mask.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
(void) snpf(options, sizeof(options),
|
|
Packit Service |
603f59 |
"?a%sbc:%sD:d:%s%sf:F:g:hi:%s%slL:%s%snNo:Op:Pr:%ss:S:tT:u:UvVwx:%s%s%s",
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if defined(HAS_AFS) && defined(HASAOPT)
|
|
Packit Service |
603f59 |
"A:",
|
|
Packit Service |
603f59 |
#else /* !defined(HAS_AFS) || !defined(HASAOPT) */
|
|
Packit Service |
603f59 |
"",
|
|
Packit Service |
603f59 |
#endif /* defined(HAS_AFS) && defined(HASAOPT) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if defined(HASNCACHE)
|
|
Packit Service |
603f59 |
"C",
|
|
Packit Service |
603f59 |
#else /* !defined(HASNCACHE) */
|
|
Packit Service |
603f59 |
"",
|
|
Packit Service |
603f59 |
#endif /* defined(HASNCACHE) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if defined(HASEOPT)
|
|
Packit Service |
603f59 |
"e:",
|
|
Packit Service |
603f59 |
#else /* !defined(HASEOPT) */
|
|
Packit Service |
603f59 |
"",
|
|
Packit Service |
603f59 |
#endif /* defined(HASEOPT) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if defined(HASEPTOPTS)
|
|
Packit Service |
603f59 |
"E",
|
|
Packit Service |
603f59 |
#else /* !defined(HASEPTOPTS) */
|
|
Packit Service |
603f59 |
"",
|
|
Packit Service |
603f59 |
#endif /* defined(HASEPTOPTS) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if defined(HASKOPT)
|
|
Packit Service |
603f59 |
"k:",
|
|
Packit Service |
603f59 |
#else /* !defined(HASKOPT) */
|
|
Packit Service |
603f59 |
"",
|
|
Packit Service |
603f59 |
#endif /* defined(HASKOPT) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if defined(HASTASKS)
|
|
Packit Service |
603f59 |
"K:",
|
|
Packit Service |
603f59 |
#else /* !defined(HASTASKS) */
|
|
Packit Service |
603f59 |
"",
|
|
Packit Service |
603f59 |
#endif /* defined(HASTASKS) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if defined(HASMOPT) || defined(HASMNTSUP)
|
|
Packit Service |
603f59 |
"m:",
|
|
Packit Service |
603f59 |
#else /* !defined(HASMOPT) && !defined(HASMNTSUP) */
|
|
Packit Service |
603f59 |
"",
|
|
Packit Service |
603f59 |
#endif /* defined(HASMOPT) || defined(HASMNTSUP) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if defined(HASNORPC_H)
|
|
Packit Service |
603f59 |
"",
|
|
Packit Service |
603f59 |
#else /* !defined(HASNORPC_H) */
|
|
Packit Service |
603f59 |
"M",
|
|
Packit Service |
603f59 |
#endif /* defined(HASNORPC_H) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if defined(HASPPID)
|
|
Packit Service |
603f59 |
"R",
|
|
Packit Service |
603f59 |
#else /* !defined(HASPPID) */
|
|
Packit Service |
603f59 |
"",
|
|
Packit Service |
603f59 |
#endif /* defined(HASPPID) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if defined(HASXOPT)
|
|
Packit Service |
603f59 |
# if defined(HASXOPT_ROOT)
|
|
Packit Service |
603f59 |
(Myuid == 0) ? "X" : "",
|
|
Packit Service |
603f59 |
# else /* !defined(HASXOPT_ROOT) */
|
|
Packit Service |
603f59 |
"X",
|
|
Packit Service |
603f59 |
# endif /* defined(HASXOPT_ROOT) */
|
|
Packit Service |
603f59 |
#else /* !defined(HASXOPT) */
|
|
Packit Service |
603f59 |
"",
|
|
Packit Service |
603f59 |
#endif /* defined(HASXOPT) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if defined(HASZONES)
|
|
Packit Service |
603f59 |
"z:",
|
|
Packit Service |
603f59 |
#else /* !defined(HASZONES) */
|
|
Packit Service |
603f59 |
"",
|
|
Packit Service |
603f59 |
#endif /* defined(HASZONES) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if defined(HASSELINUX)
|
|
Packit Service |
603f59 |
"Z:"
|
|
Packit Service |
603f59 |
#else /* !defined(HASSELINUX) */
|
|
Packit Service |
603f59 |
""
|
|
Packit Service |
603f59 |
#endif /* defined(HASSELINUX) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
);
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* Loop through options.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
while ((c = GetOpt(argc, argv, options, &rv)) != EOF) {
|
|
Packit Service |
603f59 |
if (rv) {
|
|
Packit Service |
603f59 |
err = 1;
|
|
Packit Service |
603f59 |
continue;
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
switch (c) {
|
|
Packit Service |
603f59 |
case 'a':
|
|
Packit Service |
603f59 |
Fand = 1;
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if defined(HAS_AFS) && defined(HASAOPT)
|
|
Packit Service |
603f59 |
case 'A':
|
|
Packit Service |
603f59 |
if (!GOv || *GOv == '-' || *GOv == '+') {
|
|
Packit Service |
603f59 |
(void) fprintf(stderr, "%s: -A not followed by path\n", Pn);
|
|
Packit Service |
603f59 |
err = 1;
|
|
Packit Service |
603f59 |
if (GOv) {
|
|
Packit Service |
603f59 |
GOx1 = GObk[0];
|
|
Packit Service |
603f59 |
GOx2 = GObk[1];
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
} else
|
|
Packit Service |
603f59 |
AFSApath = GOv;
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
#endif /* defined(HAS_AFS) && defined(HASAOPT) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
case 'b':
|
|
Packit Service |
603f59 |
Fblock = 1;
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
case 'c':
|
|
Packit Service |
603f59 |
if (GOp == '+') {
|
|
Packit Service |
603f59 |
if (!GOv || (*GOv == '-') || (*GOv == '+')
|
|
Packit Service |
603f59 |
|| !isdigit((int)*GOv))
|
|
Packit Service |
603f59 |
{
|
|
Packit Service |
603f59 |
(void) fprintf(stderr,
|
|
Packit Service |
603f59 |
"%s: +c not followed by width number\n", Pn);
|
|
Packit Service |
603f59 |
err = 1;
|
|
Packit Service |
603f59 |
if (GOv) {
|
|
Packit Service |
603f59 |
GOx1 = GObk[0];
|
|
Packit Service |
603f59 |
GOx2 = GObk[1];
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
} else {
|
|
Packit Service |
603f59 |
CmdLim = TaskCmdLim = atoi(GOv);
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if defined(MAXSYSCMDL)
|
|
Packit Service |
603f59 |
if (CmdLim > MAXSYSCMDL) {
|
|
Packit Service |
603f59 |
(void) fprintf(stderr,
|
|
Packit Service |
603f59 |
"%s: +c %d > what system provides (%d)\n",
|
|
Packit Service |
603f59 |
Pn, CmdLim, MAXSYSCMDL);
|
|
Packit Service |
603f59 |
err = 1;
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
#endif /* defined(MAXSYSCMDL) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
if (GOv && (*GOv == '/')) {
|
|
Packit Service |
603f59 |
if (enter_cmd_rx(GOv))
|
|
Packit Service |
603f59 |
err = 1;
|
|
Packit Service |
603f59 |
} else {
|
|
Packit Service |
603f59 |
if (enter_str_lst("-c", GOv, &Cmdl, &Cmdni, &Cmdnx))
|
|
Packit Service |
603f59 |
err = 1;
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if defined(MAXSYSCMDL)
|
|
Packit Service |
603f59 |
else if (Cmdl->len > MAXSYSCMDL) {
|
|
Packit Service |
603f59 |
(void) fprintf(stderr, "%s: \"-c ", Pn);
|
|
Packit Service |
603f59 |
(void) safestrprt(Cmdl->str, stderr, 2);
|
|
Packit Service |
603f59 |
(void) fprintf(stderr, "\" length (%d) > what system",
|
|
Packit Service |
603f59 |
Cmdl->len);
|
|
Packit Service |
603f59 |
(void) fprintf(stderr, " provides (%d)\n",
|
|
Packit Service |
603f59 |
MAXSYSCMDL);
|
|
Packit Service |
603f59 |
Cmdl->len = 0; /* (to avoid later error report) */
|
|
Packit Service |
603f59 |
err = 1;
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
#endif /* defined(MAXSYSCMDL) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if defined(HASNCACHE)
|
|
Packit Service |
603f59 |
case 'C':
|
|
Packit Service |
603f59 |
Fncache = (GOp == '-') ? 0 : 1;
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#endif /* defined(HASNCACHE) */
|
|
Packit Service |
603f59 |
case 'd':
|
|
Packit Service |
603f59 |
if (GOp == '+') {
|
|
Packit Service |
603f59 |
if (enter_dir(GOv, 0))
|
|
Packit Service |
603f59 |
err = 1;
|
|
Packit Service |
603f59 |
else {
|
|
Packit Service |
603f59 |
Selflags |= SELNM;
|
|
Packit Service |
603f59 |
xover = 1;
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
} else {
|
|
Packit Service |
603f59 |
if (enter_fd(GOv))
|
|
Packit Service |
603f59 |
err = 1;
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
case 'D':
|
|
Packit Service |
603f59 |
if (GOp == '+') {
|
|
Packit Service |
603f59 |
if (enter_dir(GOv, 1))
|
|
Packit Service |
603f59 |
err = 1;
|
|
Packit Service |
603f59 |
else {
|
|
Packit Service |
603f59 |
Selflags |= SELNM;
|
|
Packit Service |
603f59 |
xover = 1;
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
} else {
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if defined(HASDCACHE)
|
|
Packit Service |
603f59 |
if (ctrl_dcache(GOv))
|
|
Packit Service |
603f59 |
err = 1;
|
|
Packit Service |
603f59 |
#else /* !defined(HASDCACHE) */
|
|
Packit Service |
603f59 |
(void) fprintf(stderr, "%s: unsupported option: -D\n", Pn);
|
|
Packit Service |
603f59 |
err = 1;
|
|
Packit Service |
603f59 |
#endif /* defined(HASDCACHE) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if defined(HASEOPT)
|
|
Packit Service |
603f59 |
case 'e':
|
|
Packit Service |
603f59 |
if (enter_efsys(GOv, ((GOp == '+') ? 1 : 0)))
|
|
Packit Service |
603f59 |
err = 1;
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
#endif /* defined(HASEOPT) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if defined(HASEPTOPTS)
|
|
Packit Service |
603f59 |
case 'E':
|
|
Packit Service |
603f59 |
FeptE = (GOp == '+') ? 2 : 1;
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
#endif /* defined(HASEPTOPTS) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
case 'f':
|
|
Packit Service |
603f59 |
if (!GOv || *GOv == '-' || *GOv == '+') {
|
|
Packit Service |
603f59 |
Ffilesys = (GOp == '+') ? 2 : 1;
|
|
Packit Service |
603f59 |
if (GOv) {
|
|
Packit Service |
603f59 |
GOx1 = GObk[0];
|
|
Packit Service |
603f59 |
GOx2 = GObk[1];
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if defined(HASFSTRUCT)
|
|
Packit Service |
603f59 |
for (; *GOv; GOv++) {
|
|
Packit Service |
603f59 |
switch (*GOv) {
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
# if !defined(HASNOFSCOUNT)
|
|
Packit Service |
603f59 |
case 'c':
|
|
Packit Service |
603f59 |
case 'C':
|
|
Packit Service |
603f59 |
if (GOp == '+') {
|
|
Packit Service |
603f59 |
Fsv |= FSV_CT;
|
|
Packit Service |
603f59 |
FsvByf = 1;
|
|
Packit Service |
603f59 |
} else
|
|
Packit Service |
603f59 |
Fsv &= (unsigned char)~FSV_CT;
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
# endif /* !defined(HASNOFSCOUNT) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
# if !defined(HASNOFSADDR)
|
|
Packit Service |
603f59 |
case 'f':
|
|
Packit Service |
603f59 |
case 'F':
|
|
Packit Service |
603f59 |
if (GOp == '+') {
|
|
Packit Service |
603f59 |
Fsv |= FSV_FA;
|
|
Packit Service |
603f59 |
FsvByf = 1;
|
|
Packit Service |
603f59 |
} else
|
|
Packit Service |
603f59 |
Fsv &= (unsigned char)~FSV_FA;
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
# endif /* !defined(HASNOFSADDR) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
# if !defined(HASNOFSFLAGS)
|
|
Packit Service |
603f59 |
case 'g':
|
|
Packit Service |
603f59 |
case 'G':
|
|
Packit Service |
603f59 |
if (GOp == '+') {
|
|
Packit Service |
603f59 |
Fsv |= FSV_FG;
|
|
Packit Service |
603f59 |
FsvByf = 1;
|
|
Packit Service |
603f59 |
} else
|
|
Packit Service |
603f59 |
Fsv &= (unsigned char)~FSV_FG;
|
|
Packit Service |
603f59 |
FsvFlagX = (*GOv == 'G') ? 1 : 0;
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
# endif /* !defined(HASNOFSFLAGS) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
# if !defined(HASNOFSNADDR)
|
|
Packit Service |
603f59 |
case 'n':
|
|
Packit Service |
603f59 |
case 'N':
|
|
Packit Service |
603f59 |
if (GOp == '+') {
|
|
Packit Service |
603f59 |
Fsv |= FSV_NI;
|
|
Packit Service |
603f59 |
FsvByf = 1;
|
|
Packit Service |
603f59 |
} else
|
|
Packit Service |
603f59 |
Fsv &= (unsigned char)~FSV_NI;
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
# endif /* !defined(HASNOFSNADDR */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
default:
|
|
Packit Service |
603f59 |
(void) fprintf(stderr,
|
|
Packit Service |
603f59 |
"%s: unknown file struct option: %c\n", Pn, *GOv);
|
|
Packit Service |
603f59 |
err++;
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
#else /* !defined(HASFSTRUCT) */
|
|
Packit Service |
603f59 |
(void) fprintf(stderr,
|
|
Packit Service |
603f59 |
"%s: unknown string for %cf: %s\n", Pn, GOp, GOv);
|
|
Packit Service |
603f59 |
err++;
|
|
Packit Service |
603f59 |
#endif /* defined(HASFSTRUCT) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
case 'F':
|
|
Packit Service |
603f59 |
if (!GOv || *GOv == '-' || *GOv == '+'
|
|
Packit Service |
603f59 |
|| strcmp(GOv, "0") == 0) {
|
|
Packit Service |
603f59 |
if (GOv) {
|
|
Packit Service |
603f59 |
if (*GOv == '-' || *GOv == '+') {
|
|
Packit Service |
603f59 |
GOx1 = GObk[0];
|
|
Packit Service |
603f59 |
GOx2 = GObk[1];
|
|
Packit Service |
603f59 |
} else if (*GOv == '0')
|
|
Packit Service |
603f59 |
Terminator = '\0';
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
for (i = 0; FieldSel[i].nm; i++) {
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if !defined(HASPPID)
|
|
Packit Service |
603f59 |
if (FieldSel[i].id == LSOF_FID_PPID)
|
|
Packit Service |
603f59 |
continue;
|
|
Packit Service |
603f59 |
#endif /* !defined(HASPPID) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if !defined(HASTASKS)
|
|
Packit Service |
603f59 |
if (FieldSel[i].id == LSOF_FID_TCMD)
|
|
Packit Service |
603f59 |
continue;
|
|
Packit Service |
603f59 |
#endif /* !defined(HASTASKS) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if !defined(HASFSTRUCT)
|
|
Packit Service |
603f59 |
if (FieldSel[i].id == LSOF_FID_CT
|
|
Packit Service |
603f59 |
|| FieldSel[i].id == LSOF_FID_FA
|
|
Packit Service |
603f59 |
|| FieldSel[i].id == LSOF_FID_FG
|
|
Packit Service |
603f59 |
|| FieldSel[i].id == LSOF_FID_NI)
|
|
Packit Service |
603f59 |
continue;
|
|
Packit Service |
603f59 |
#endif /* !defined(HASFSTRUCT) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if defined(HASSELINUX)
|
|
Packit Service |
603f59 |
if ((FieldSel[i].id == LSOF_FID_CNTX) && !CntxStatus)
|
|
Packit Service |
603f59 |
continue;
|
|
Packit Service |
603f59 |
#else /* !defined(HASSELINUX) */
|
|
Packit Service |
603f59 |
if (FieldSel[i].id == LSOF_FID_CNTX)
|
|
Packit Service |
603f59 |
continue;
|
|
Packit Service |
603f59 |
#endif /* !defined(HASSELINUX) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
if (FieldSel[i].id == LSOF_FID_RDEV)
|
|
Packit Service |
603f59 |
continue; /* for compatibility */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if !defined(HASTASKS)
|
|
Packit Service |
603f59 |
if (FieldSel[i].id == LSOF_FID_TID)
|
|
Packit Service |
603f59 |
continue;
|
|
Packit Service |
603f59 |
#endif /* !defined(HASTASKS) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if !defined(HASZONES)
|
|
Packit Service |
603f59 |
if (FieldSel[i].id == LSOF_FID_ZONE)
|
|
Packit Service |
603f59 |
continue;
|
|
Packit Service |
603f59 |
#endif /* !defined(HASZONES) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
FieldSel[i].st = 1;
|
|
Packit Service |
603f59 |
if (FieldSel[i].opt && FieldSel[i].ov)
|
|
Packit Service |
603f59 |
*(FieldSel[i].opt) |= FieldSel[i].ov;
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if defined(HASFSTRUCT)
|
|
Packit Service |
603f59 |
Ffield = FsvFlagX = 1;
|
|
Packit Service |
603f59 |
#else /* !defined(HASFSTRUCT) */
|
|
Packit Service |
603f59 |
Ffield = 1;
|
|
Packit Service |
603f59 |
#endif /* defined(HASFSTRUCT) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
if (strcmp(GOv, "?") == 0) {
|
|
Packit Service |
603f59 |
fh = 1;
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
for (; *GOv; GOv++) {
|
|
Packit Service |
603f59 |
for (i = 0; FieldSel[i].nm; i++) {
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if !defined(HASPPID)
|
|
Packit Service |
603f59 |
if (FieldSel[i].id == LSOF_FID_PPID)
|
|
Packit Service |
603f59 |
continue;
|
|
Packit Service |
603f59 |
#endif /* !defined(HASPPID) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if !defined(HASTASKS)
|
|
Packit Service |
603f59 |
if (FieldSel[i].id == LSOF_FID_TCMD)
|
|
Packit Service |
603f59 |
continue;
|
|
Packit Service |
603f59 |
#endif /* !defined(HASTASKS) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if !defined(HASFSTRUCT)
|
|
Packit Service |
603f59 |
if (FieldSel[i].id == LSOF_FID_CT
|
|
Packit Service |
603f59 |
|| FieldSel[i].id == LSOF_FID_FA
|
|
Packit Service |
603f59 |
|| FieldSel[i].id == LSOF_FID_FG
|
|
Packit Service |
603f59 |
|| FieldSel[i].id == LSOF_FID_NI)
|
|
Packit Service |
603f59 |
continue;
|
|
Packit Service |
603f59 |
#endif /* !defined(HASFSTRUCT) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if !defined(HASTASKS)
|
|
Packit Service |
603f59 |
if (FieldSel[i].id == LSOF_FID_TID)
|
|
Packit Service |
603f59 |
continue;
|
|
Packit Service |
603f59 |
#endif /* !defined(HASTASKS) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
if (FieldSel[i].id == *GOv) {
|
|
Packit Service |
603f59 |
FieldSel[i].st = 1;
|
|
Packit Service |
603f59 |
if (FieldSel[i].opt && FieldSel[i].ov)
|
|
Packit Service |
603f59 |
*(FieldSel[i].opt) |= FieldSel[i].ov;
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if defined(HASFSTRUCT)
|
|
Packit Service |
603f59 |
if (i == LSOF_FIX_FG)
|
|
Packit Service |
603f59 |
FsvFlagX = 1;
|
|
Packit Service |
603f59 |
#endif /* defined(HASFSTRUCT) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
if (i == LSOF_FIX_TERM)
|
|
Packit Service |
603f59 |
Terminator = '\0';
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
if ( ! FieldSel[i].nm) {
|
|
Packit Service |
603f59 |
(void) fprintf(stderr,
|
|
Packit Service |
603f59 |
"%s: unknown field: %c\n", Pn, *GOv);
|
|
Packit Service |
603f59 |
err++;
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
Ffield = 1;
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
case 'g':
|
|
Packit Service |
603f59 |
if (GOv) {
|
|
Packit Service |
603f59 |
if (*GOv == '-' || *GOv == '+') {
|
|
Packit Service |
603f59 |
GOx1 = GObk[0];
|
|
Packit Service |
603f59 |
GOx2 = GObk[1];
|
|
Packit Service |
603f59 |
} else if (enter_id(PGID, GOv))
|
|
Packit Service |
603f59 |
err = 1;
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
Fpgid = 1;
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
case 'h':
|
|
Packit Service |
603f59 |
case '?':
|
|
Packit Service |
603f59 |
Fhelp = 1;
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
case 'i':
|
|
Packit Service |
603f59 |
if (!GOv || *GOv == '-' || *GOv == '+') {
|
|
Packit Service |
603f59 |
Fnet = 1;
|
|
Packit Service |
603f59 |
FnetTy = 0;
|
|
Packit Service |
603f59 |
if (GOv) {
|
|
Packit Service |
603f59 |
GOx1 = GObk[0];
|
|
Packit Service |
603f59 |
GOx2 = GObk[1];
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
if (enter_network_address(GOv))
|
|
Packit Service |
603f59 |
err = 1;
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if defined(HASKOPT)
|
|
Packit Service |
603f59 |
case 'k':
|
|
Packit Service |
603f59 |
if (!GOv || *GOv == '-' || *GOv == '+') {
|
|
Packit Service |
603f59 |
(void) fprintf(stderr, "%s: -k not followed by path\n", Pn);
|
|
Packit Service |
603f59 |
err = 1;
|
|
Packit Service |
603f59 |
if (GOv) {
|
|
Packit Service |
603f59 |
GOx1 = GObk[0];
|
|
Packit Service |
603f59 |
GOx2 = GObk[1];
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
} else
|
|
Packit Service |
603f59 |
Nmlst = GOv;
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
#endif /* defined(HASKOPT) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if defined(HASTASKS)
|
|
Packit Service |
603f59 |
case 'K':
|
|
Packit Service |
603f59 |
if (!GOv || *GOv == '-' || *GOv == '+') {
|
|
Packit Service |
603f59 |
Ftask = 1;
|
|
Packit Service |
603f59 |
IgnTasks = 0;
|
|
Packit Service |
603f59 |
Selflags |= SELTASK;
|
|
Packit Service |
603f59 |
if (GOv) {
|
|
Packit Service |
603f59 |
GOx1 = GObk[0];
|
|
Packit Service |
603f59 |
GOx2 = GObk[1];
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
} else {
|
|
Packit Service |
603f59 |
if (!strcasecmp(GOv, "i")) {
|
|
Packit Service |
603f59 |
Ftask = 0;
|
|
Packit Service |
603f59 |
IgnTasks = 1;
|
|
Packit Service |
603f59 |
Selflags &= ~SELTASK;
|
|
Packit Service |
603f59 |
} else {
|
|
Packit Service |
603f59 |
(void) fprintf(stderr,
|
|
Packit Service |
603f59 |
"%s: -K not followed by i (but by %s)\n", Pn, GOv);
|
|
Packit Service |
603f59 |
err = 1;
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
#endif /* defined(HASTASKS) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
case 'l':
|
|
Packit Service |
603f59 |
Futol = 0;
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
case 'L':
|
|
Packit Service |
603f59 |
Fnlink = (GOp == '+') ? 1 : 0;
|
|
Packit Service |
603f59 |
if (!GOv || *GOv == '-' || *GOv == '+') {
|
|
Packit Service |
603f59 |
Nlink = 0l;
|
|
Packit Service |
603f59 |
if (GOv) {
|
|
Packit Service |
603f59 |
GOx1 = GObk[0];
|
|
Packit Service |
603f59 |
GOx2 = GObk[1];
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
for (cp = GOv, l = 0l, n = 0; *cp; cp++) {
|
|
Packit Service |
603f59 |
if (!isdigit((unsigned char)*cp))
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
l = (l * 10l) + ((long)*cp - (long)'0');
|
|
Packit Service |
603f59 |
n++;
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
if (n) {
|
|
Packit Service |
603f59 |
if (GOp != '+') {
|
|
Packit Service |
603f59 |
(void) fprintf(stderr,
|
|
Packit Service |
603f59 |
"%s: no number may follow -L\n", Pn);
|
|
Packit Service |
603f59 |
err = 1;
|
|
Packit Service |
603f59 |
} else {
|
|
Packit Service |
603f59 |
Nlink = l;
|
|
Packit Service |
603f59 |
Selflags |= SELNLINK;
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
} else
|
|
Packit Service |
603f59 |
Nlink = 0l;
|
|
Packit Service |
603f59 |
if (*cp) {
|
|
Packit Service |
603f59 |
GOx1 = GObk[0];
|
|
Packit Service |
603f59 |
GOx2 = GObk[1] + n;
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if defined(HASMOPT) || defined(HASMNTSUP)
|
|
Packit Service |
603f59 |
case 'm':
|
|
Packit Service |
603f59 |
if (GOp == '-') {
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
# if defined(HASMOPT)
|
|
Packit Service |
603f59 |
if (!GOv || *GOv == '-' || *GOv == '+') {
|
|
Packit Service |
603f59 |
(void) fprintf(stderr,
|
|
Packit Service |
603f59 |
"%s: -m not followed by path\n", Pn);
|
|
Packit Service |
603f59 |
err = 1;
|
|
Packit Service |
603f59 |
if (GOv) {
|
|
Packit Service |
603f59 |
GOx1 = GObk[0];
|
|
Packit Service |
603f59 |
GOx2 = GObk[1];
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
} else
|
|
Packit Service |
603f59 |
Memory = GOv;
|
|
Packit Service |
603f59 |
# else /* !defined(HASMOPT) */
|
|
Packit Service |
603f59 |
(void) fprintf(stderr, "%s: -m not supported\n", Pn);
|
|
Packit Service |
603f59 |
err = 1;
|
|
Packit Service |
603f59 |
# endif /* defined(HASMOPT) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
} else if (GOp == '+') {
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
# if defined(HASMNTSUP)
|
|
Packit Service |
603f59 |
if (!GOv || *GOv == '-' || *GOv == '+') {
|
|
Packit Service |
603f59 |
MntSup = 1;
|
|
Packit Service |
603f59 |
if (GOv) {
|
|
Packit Service |
603f59 |
GOx1 = GObk[0];
|
|
Packit Service |
603f59 |
GOx2 = GObk[1];
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
} else {
|
|
Packit Service |
603f59 |
MntSup = 2;
|
|
Packit Service |
603f59 |
MntSupP = GOv;
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
# else /* !defined(HASMNTSUP) */
|
|
Packit Service |
603f59 |
(void) fprintf(stderr, "%s: +m not supported\n", Pn);
|
|
Packit Service |
603f59 |
err = 1;
|
|
Packit Service |
603f59 |
# endif /* defined(HASMNTSUP) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
} else {
|
|
Packit Service |
603f59 |
(void) fprintf(stderr, "%s: %cm not supported\n", Pn, GOp);
|
|
Packit Service |
603f59 |
err = 1;
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
#endif /* defined(HASMOPT) || defined(HASMNTSUP) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if !defined(HASNORPC_H)
|
|
Packit Service |
603f59 |
case 'M':
|
|
Packit Service |
603f59 |
FportMap = (GOp == '+') ? 1 : 0;
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
#endif /* !defined(HASNORPC_H) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
case 'n':
|
|
Packit Service |
603f59 |
Fhost = (GOp == '-') ? 0 : 1;
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
case 'N':
|
|
Packit Service |
603f59 |
Fnfs = 1;
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
case 'o':
|
|
Packit Service |
603f59 |
if (!GOv || *GOv == '-' || *GOv == '+') {
|
|
Packit Service |
603f59 |
Foffset = 1;
|
|
Packit Service |
603f59 |
if (GOv) {
|
|
Packit Service |
603f59 |
GOx1 = GObk[0];
|
|
Packit Service |
603f59 |
GOx2 = GObk[1];
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
for (cp = GOv, i = n = 0; *cp; cp++) {
|
|
Packit Service |
603f59 |
if (!isdigit((unsigned char)*cp))
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
i = (i * 10) + ((int)*cp - '0');
|
|
Packit Service |
603f59 |
n++;
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
if (n)
|
|
Packit Service |
603f59 |
OffDecDig = i;
|
|
Packit Service |
603f59 |
else
|
|
Packit Service |
603f59 |
Foffset = 1;
|
|
Packit Service |
603f59 |
if (*cp) {
|
|
Packit Service |
603f59 |
GOx1 = GObk[0];
|
|
Packit Service |
603f59 |
GOx2 = GObk[1] + n;
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
case 'O':
|
|
Packit Service |
603f59 |
Fovhd = (GOp == '-') ? 1 : 0;
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
case 'p':
|
|
Packit Service |
603f59 |
if (enter_id(PID, GOv))
|
|
Packit Service |
603f59 |
err = 1;
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
case 'P':
|
|
Packit Service |
603f59 |
Fport = (GOp == '-') ? 0 : 1;
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
case 'r':
|
|
Packit Service |
603f59 |
if (GOp == '+')
|
|
Packit Service |
603f59 |
ev = rc = 1;
|
|
Packit Service |
603f59 |
if (!GOv || *GOv == '-' || *GOv == '+') {
|
|
Packit Service |
603f59 |
RptTm = RPTTM;
|
|
Packit Service |
603f59 |
if (GOv) {
|
|
Packit Service |
603f59 |
GOx1 = GObk[0];
|
|
Packit Service |
603f59 |
GOx2 = GObk[1];
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
for (cp = GOv, i = n = 0; *cp; cp++) {
|
|
Packit Service |
603f59 |
if (!isdigit((unsigned char)*cp))
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
i = (i * 10) + ((int)*cp - '0');
|
|
Packit Service |
603f59 |
n++;
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
if (n)
|
|
Packit Service |
603f59 |
RptTm = i;
|
|
Packit Service |
603f59 |
else
|
|
Packit Service |
603f59 |
RptTm = RPTTM;
|
|
Packit Service |
603f59 |
if (!*cp)
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
while(*cp && (*cp == ' '))
|
|
Packit Service |
603f59 |
cp++;
|
|
Packit Service |
603f59 |
if (*cp != LSOF_FID_MARK) {
|
|
Packit Service |
603f59 |
GOx1 = GObk[0];
|
|
Packit Service |
603f59 |
GOx2 = GObk[1] + n;
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if defined(HAS_STRFTIME)
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* Collect the strftime(3) format and test it.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
cp++;
|
|
Packit Service |
603f59 |
if ((fmtl = strlen(cp) + 1) < 1) {
|
|
Packit Service |
603f59 |
(void) fprintf(stderr, "%s: <fmt> too short: \"%s\"\n",
|
|
Packit Service |
603f59 |
Pn, cp);
|
|
Packit Service |
603f59 |
err = 1;
|
|
Packit Service |
603f59 |
} else {
|
|
Packit Service |
603f59 |
fmt = cp;
|
|
Packit Service |
603f59 |
fmtl = (fmtl * 8) + 1;
|
|
Packit Service |
603f59 |
if (!(fmtr = (char *)malloc((MALLOC_S)fmtl))) {
|
|
Packit Service |
603f59 |
(void) fprintf(stderr,
|
|
Packit Service |
603f59 |
"%s: no space (%d) for <fmt> result: \"%s\"\n",
|
|
Packit Service |
603f59 |
Pn, (int)fmtl, cp);
|
|
Packit Service |
603f59 |
Exit(1);
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
if (util_strftime(fmtr, fmtl - 1, fmt) < 1) {
|
|
Packit Service |
603f59 |
(void) fprintf(stderr, "%s: illegal <fmt>: \"%s\"\n",
|
|
Packit Service |
603f59 |
Pn, fmt);
|
|
Packit Service |
603f59 |
err = 1;
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#else /* !defined(HAS_STRFTIME) */
|
|
Packit Service |
603f59 |
(void) fprintf(stderr, "%s: m<fmt> not supported: \"%s\"\n",
|
|
Packit Service |
603f59 |
Pn, cp);
|
|
Packit Service |
603f59 |
err = 1;
|
|
Packit Service |
603f59 |
#endif /* defined(HAS_STRFTIME) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if defined(HASPPID)
|
|
Packit Service |
603f59 |
case 'R':
|
|
Packit Service |
603f59 |
Fppid = 1;
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
#endif /* defined(HASPPID) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
case 's':
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if defined(HASTCPUDPSTATE)
|
|
Packit Service |
603f59 |
if (!GOv || *GOv == '-' || *GOv == '+') {
|
|
Packit Service |
603f59 |
Fsize = 1;
|
|
Packit Service |
603f59 |
if (GOv) {
|
|
Packit Service |
603f59 |
GOx1 = GObk[0];
|
|
Packit Service |
603f59 |
GOx2 = GObk[1];
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
} else {
|
|
Packit Service |
603f59 |
if (enter_state_spec(GOv))
|
|
Packit Service |
603f59 |
err = 1;
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
#else /* !defined(HASTCPUDPSTATE) */
|
|
Packit Service |
603f59 |
Fsize = 1;
|
|
Packit Service |
603f59 |
#endif /* defined(HASTCPUDPSTATE) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
case 'S':
|
|
Packit Service |
603f59 |
if (!GOv || *GOv == '-' || *GOv == '+') {
|
|
Packit Service |
603f59 |
TmLimit = TMLIMIT;
|
|
Packit Service |
603f59 |
if (GOv) {
|
|
Packit Service |
603f59 |
GOx1 = GObk[0];
|
|
Packit Service |
603f59 |
GOx2 = GObk[1];
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
for (cp = GOv, i = n = 0; *cp; cp++) {
|
|
Packit Service |
603f59 |
if (!isdigit((unsigned char)*cp))
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
i = (i * 10) + ((int)*cp - '0');
|
|
Packit Service |
603f59 |
n++;
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
if (n)
|
|
Packit Service |
603f59 |
TmLimit = i;
|
|
Packit Service |
603f59 |
else
|
|
Packit Service |
603f59 |
TmLimit = TMLIMIT;
|
|
Packit Service |
603f59 |
if (*cp) {
|
|
Packit Service |
603f59 |
GOx1 = GObk[0];
|
|
Packit Service |
603f59 |
GOx2 = GObk[1] + n;
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
if (TmLimit < TMLIMMIN) {
|
|
Packit Service |
603f59 |
(void) fprintf(stderr,
|
|
Packit Service |
603f59 |
"%s: WARNING: -S time (%d) changed to %d\n",
|
|
Packit Service |
603f59 |
Pn, TmLimit, TMLIMMIN);
|
|
Packit Service |
603f59 |
TmLimit = TMLIMMIN;
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
case 't':
|
|
Packit Service |
603f59 |
Fterse = Fwarn = 1;
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
case 'T':
|
|
Packit Service |
603f59 |
if (!GOv || *GOv == '-' || *GOv == '+') {
|
|
Packit Service |
603f59 |
Ftcptpi = (GOp == '-') ? 0 : TCPTPI_STATE;
|
|
Packit Service |
603f59 |
if (GOv) {
|
|
Packit Service |
603f59 |
GOx1 = GObk[0];
|
|
Packit Service |
603f59 |
GOx2 = GObk[1];
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
for (Ftcptpi = 0; *GOv; GOv++) {
|
|
Packit Service |
603f59 |
switch (*GOv) {
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if defined(HASSOOPT) || defined(HASSOSTATE) || defined(HASTCPOPT)
|
|
Packit Service |
603f59 |
case 'f':
|
|
Packit Service |
603f59 |
Ftcptpi |= TCPTPI_FLAGS;
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
#endif /* defined(HASSOOPT) || defined(HASSOSTATE) || defined(HASTCPOPT) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if defined(HASTCPTPIQ)
|
|
Packit Service |
603f59 |
case 'q':
|
|
Packit Service |
603f59 |
Ftcptpi |= TCPTPI_QUEUES;
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
#endif /* defined(HASTCPTPIQ) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
case 's':
|
|
Packit Service |
603f59 |
Ftcptpi |= TCPTPI_STATE;
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if defined(HASTCPTPIW)
|
|
Packit Service |
603f59 |
case 'w':
|
|
Packit Service |
603f59 |
Ftcptpi |= TCPTPI_WINDOWS;
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
#endif /* defined(HASTCPTPIW) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
default:
|
|
Packit Service |
603f59 |
(void) fprintf(stderr,
|
|
Packit Service |
603f59 |
"%s: unsupported TCP/TPI info selection: %c\n",
|
|
Packit Service |
603f59 |
Pn, *GOv);
|
|
Packit Service |
603f59 |
err = 1;
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
case 'u':
|
|
Packit Service |
603f59 |
if (enter_uid(GOv))
|
|
Packit Service |
603f59 |
err = 1;
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
case 'U':
|
|
Packit Service |
603f59 |
Funix = 1;
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
case 'v':
|
|
Packit Service |
603f59 |
version = 1;
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
case 'V':
|
|
Packit Service |
603f59 |
Fverbose = 1;
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
case 'w':
|
|
Packit Service |
603f59 |
Fwarn = (GOp == '+') ? 0 : 1;
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
case 'x':
|
|
Packit Service |
603f59 |
if (!GOv || *GOv == '-' || *GOv == '+') {
|
|
Packit Service |
603f59 |
Fxover = XO_ALL;
|
|
Packit Service |
603f59 |
if (GOv) {
|
|
Packit Service |
603f59 |
GOx1 = GObk[0];
|
|
Packit Service |
603f59 |
GOx2 = GObk[1];
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
} else {
|
|
Packit Service |
603f59 |
for (; *GOv; GOv++) {
|
|
Packit Service |
603f59 |
switch (*GOv) {
|
|
Packit Service |
603f59 |
case 'f':
|
|
Packit Service |
603f59 |
Fxover |= XO_FILESYS;
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
case 'l':
|
|
Packit Service |
603f59 |
Fxover |= XO_SYMLINK;
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
default:
|
|
Packit Service |
603f59 |
(void) fprintf(stderr,
|
|
Packit Service |
603f59 |
"%s: unknown cross-over option: %c\n",
|
|
Packit Service |
603f59 |
Pn, *GOv);
|
|
Packit Service |
603f59 |
err++;
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if defined(HASXOPT)
|
|
Packit Service |
603f59 |
case 'X':
|
|
Packit Service |
603f59 |
Fxopt = Fxopt ? 0 : 1;
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
#endif /* defined(HASXOPT) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if defined(HASZONES)
|
|
Packit Service |
603f59 |
case 'z':
|
|
Packit Service |
603f59 |
Fzone = 1;
|
|
Packit Service |
603f59 |
if (GOv && (*GOv != '-') && (*GOv != '+')) {
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* Add to the zone name argument hash.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
if (enter_zone_arg(GOv))
|
|
Packit Service |
603f59 |
err = 1;
|
|
Packit Service |
603f59 |
} else if (GOv) {
|
|
Packit Service |
603f59 |
GOx1 = GObk[0];
|
|
Packit Service |
603f59 |
GOx2 = GObk[1];
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
#endif /* defined(HASZONES) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if defined(HASSELINUX)
|
|
Packit Service |
603f59 |
case 'Z':
|
|
Packit Service |
603f59 |
if (!CntxStatus) {
|
|
Packit Service |
603f59 |
(void) fprintf(stderr, "%s: -Z limited to SELinux\n", Pn);
|
|
Packit Service |
603f59 |
err = 1;
|
|
Packit Service |
603f59 |
} else {
|
|
Packit Service |
603f59 |
Fcntx = 1;
|
|
Packit Service |
603f59 |
if (GOv && (*GOv != '-') && (*GOv != '+')) {
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* Add to the context name argument hash.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
if (enter_cntx_arg(GOv))
|
|
Packit Service |
603f59 |
err = 1;
|
|
Packit Service |
603f59 |
} else if (GOv) {
|
|
Packit Service |
603f59 |
GOx1 = GObk[0];
|
|
Packit Service |
603f59 |
GOx2 = GObk[1];
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
#endif /* defined(HASSELINUX) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
default:
|
|
Packit Service |
603f59 |
(void) fprintf(stderr, "%s: unknown option (%c)\n", Pn, c);
|
|
Packit Service |
603f59 |
err = 1;
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* If IgnTasks is set, remove SELTASK from SelAll and SelProc.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
SelAll = IgnTasks ? (SELALL & ~SELTASK) : SELALL;
|
|
Packit Service |
603f59 |
SelProc = IgnTasks ? (SELPROC & ~SELTASK) : SELPROC;
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* Check for argument consistency.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
if (Cmdnx && Cmdni) {
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* Check for command inclusion/exclusion conflicts.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
for (str = Cmdl; str; str = str->next) {
|
|
Packit Service |
603f59 |
if (str->x) {
|
|
Packit Service |
603f59 |
for (strt = Cmdl; strt; strt = strt->next) {
|
|
Packit Service |
603f59 |
if (!strt->x) {
|
|
Packit Service |
603f59 |
if (!strcmp(str->str, strt->str)) {
|
|
Packit Service |
603f59 |
(void) fprintf(stderr,
|
|
Packit Service |
603f59 |
"%s: -c^%s and -c%s conflict.\n",
|
|
Packit Service |
603f59 |
Pn, str->str, strt->str);
|
|
Packit Service |
603f59 |
err++;
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if defined(HASTCPUDPSTATE)
|
|
Packit Service |
603f59 |
if (TcpStXn && TcpStIn) {
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* Check for excluded and included TCP states.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
for (i = 0; i < TcpNstates; i++) {
|
|
Packit Service |
603f59 |
if (TcpStX[i] && TcpStI[i]) {
|
|
Packit Service |
603f59 |
(void) fprintf(stderr,
|
|
Packit Service |
603f59 |
"%s: can't include and exclude TCP state: %s\n",
|
|
Packit Service |
603f59 |
Pn, TcpSt[i]);
|
|
Packit Service |
603f59 |
err = 1;
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
if (UdpStXn && UdpStIn) {
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* Check for excluded and included UDP states.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
for (i = 0; i < UdpNstates; i++) {
|
|
Packit Service |
603f59 |
if (UdpStX[i] && UdpStI[i]) {
|
|
Packit Service |
603f59 |
(void) fprintf(stderr,
|
|
Packit Service |
603f59 |
"%s: can't include and exclude UDP state: %s\n",
|
|
Packit Service |
603f59 |
Pn, UdpSt[i]);
|
|
Packit Service |
603f59 |
err = 1;
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
#endif /* defined(HASTCPUDPSTATE) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
if (Fsize && Foffset) {
|
|
Packit Service |
603f59 |
(void) fprintf(stderr, "%s: -o and -s are mutually exclusive\n",
|
|
Packit Service |
603f59 |
Pn);
|
|
Packit Service |
603f59 |
err++;
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
if (Ffield) {
|
|
Packit Service |
603f59 |
if (Fterse) {
|
|
Packit Service |
603f59 |
(void) fprintf(stderr,
|
|
Packit Service |
603f59 |
"%s: -F and -t are mutually exclusive\n", Pn);
|
|
Packit Service |
603f59 |
err++;
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
FieldSel[LSOF_FIX_PID].st = 1;
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if defined(HAS_STRFTIME)
|
|
Packit Service |
603f59 |
if (fmtr) {
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* The field output marker format can't contain "%n" new line
|
|
Packit Service |
603f59 |
* requests.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
for (cp = strchr(fmt, '%'); cp; cp = strchr(cp, '%')) {
|
|
Packit Service |
603f59 |
if (*++cp == 'n') {
|
|
Packit Service |
603f59 |
(void) fprintf(stderr,
|
|
Packit Service |
603f59 |
"%s: %%n illegal in -r m<fmt> when -F has", Pn);
|
|
Packit Service |
603f59 |
(void) fprintf(stderr,
|
|
Packit Service |
603f59 |
" been specified: \"%s\"\n", fmt);
|
|
Packit Service |
603f59 |
err++;
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
} else if (*cp == '%')
|
|
Packit Service |
603f59 |
cp++;
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
#endif /* defined(HAS_STRFTIME) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
if (Fxover && !xover) {
|
|
Packit Service |
603f59 |
(void) fprintf(stderr, "%s: -x must accompany +d or +D\n", Pn);
|
|
Packit Service |
603f59 |
err++;
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if defined(HASEOPT)
|
|
Packit Service |
603f59 |
if (Efsysl) {
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* If there are file systems specified by -e options, check them.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
efsys_list_t *ep; /* Efsysl pointer */
|
|
Packit Service |
603f59 |
struct mounts *mp, *mpw; /* local mount table pointers */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
if ((mp = readmnt())) {
|
|
Packit Service |
603f59 |
for (ep = Efsysl; ep; ep = ep->next) {
|
|
Packit Service |
603f59 |
for (mpw = mp; mpw; mpw = mpw->next) {
|
|
Packit Service |
603f59 |
if (!strcmp(mpw->dir, ep->path)) {
|
|
Packit Service |
603f59 |
ep->mp = mpw;
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
if (!ep->mp) {
|
|
Packit Service |
603f59 |
(void) fprintf(stderr,
|
|
Packit Service |
603f59 |
"%s: \"-e %s\" is not a mounted file system.\n",
|
|
Packit Service |
603f59 |
Pn, ep->path);
|
|
Packit Service |
603f59 |
err++;
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
#endif /* defined(HASEOPT) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
if (DChelp || err || Fhelp || fh || version)
|
|
Packit Service |
603f59 |
usage(err ? 1 : 0, fh, version);
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* Reduce the size of Suid[], if necessary.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
if (Suid && Nuid && Nuid < Mxuid) {
|
|
Packit Service |
603f59 |
if (!(Suid = (struct seluid *)realloc((MALLOC_P *)Suid,
|
|
Packit Service |
603f59 |
(MALLOC_S)(sizeof(struct seluid) * Nuid))))
|
|
Packit Service |
603f59 |
{
|
|
Packit Service |
603f59 |
(void) fprintf(stderr, "%s: can't realloc UID table\n", Pn);
|
|
Packit Service |
603f59 |
Exit(1);
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
Mxuid = Nuid;
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* Compute the selection flags.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
if ((Cmdl && Cmdni) || CmdRx)
|
|
Packit Service |
603f59 |
Selflags |= SELCMD;
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if defined(HASSELINUX)
|
|
Packit Service |
603f59 |
if (CntxArg)
|
|
Packit Service |
603f59 |
Selflags |= SELCNTX;
|
|
Packit Service |
603f59 |
#endif /* defined(HASSELINUX) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
if (Fdl)
|
|
Packit Service |
603f59 |
Selflags |= SELFD;
|
|
Packit Service |
603f59 |
if (Fnet)
|
|
Packit Service |
603f59 |
Selflags |= SELNET;
|
|
Packit Service |
603f59 |
if (Fnfs)
|
|
Packit Service |
603f59 |
Selflags |= SELNFS;
|
|
Packit Service |
603f59 |
if (Funix)
|
|
Packit Service |
603f59 |
Selflags |= SELUNX;
|
|
Packit Service |
603f59 |
if (Npgid && Npgidi)
|
|
Packit Service |
603f59 |
Selflags |= SELPGID;
|
|
Packit Service |
603f59 |
if (Npid && Npidi)
|
|
Packit Service |
603f59 |
Selflags |= SELPID;
|
|
Packit Service |
603f59 |
if (Nuid && Nuidincl)
|
|
Packit Service |
603f59 |
Selflags |= SELUID;
|
|
Packit Service |
603f59 |
if (Nwad)
|
|
Packit Service |
603f59 |
Selflags |= SELNA;
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if defined(HASZONES)
|
|
Packit Service |
603f59 |
if (ZoneArg)
|
|
Packit Service |
603f59 |
Selflags |= SELZONE;
|
|
Packit Service |
603f59 |
#endif /* defined(HASZONES) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
if (GOx1 < argc)
|
|
Packit Service |
603f59 |
Selflags |= SELNM;
|
|
Packit Service |
603f59 |
if (Selflags == 0) {
|
|
Packit Service |
603f59 |
if (Fand) {
|
|
Packit Service |
603f59 |
(void) fprintf(stderr,
|
|
Packit Service |
603f59 |
"%s: no select options to AND via -a\n", Pn);
|
|
Packit Service |
603f59 |
usage(1, 0, 0);
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
Selflags = SelAll;
|
|
Packit Service |
603f59 |
} else {
|
|
Packit Service |
603f59 |
if (GOx1 >= argc && (Selflags & (SELNA|SELNET)) != 0
|
|
Packit Service |
603f59 |
&& (Selflags & ~(SELNA|SELNET)) == 0)
|
|
Packit Service |
603f59 |
Selinet = 1;
|
|
Packit Service |
603f59 |
AllProc = 0;
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* Get the device for DEVDEV_PATH.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
if (stat(DEVDEV_PATH, &sb)) {
|
|
Packit Service |
603f59 |
se1 = errno;
|
|
Packit Service |
603f59 |
if ((ad = strcmp(DEVDEV_PATH, "/dev"))) {
|
|
Packit Service |
603f59 |
if ((ss = stat("/dev", &sb)))
|
|
Packit Service |
603f59 |
se2 = errno;
|
|
Packit Service |
603f59 |
else
|
|
Packit Service |
603f59 |
se2 = 0;
|
|
Packit Service |
603f59 |
} else {
|
|
Packit Service |
603f59 |
se2 = 0;
|
|
Packit Service |
603f59 |
ss = 1;
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
if (ss) {
|
|
Packit Service |
603f59 |
(void) fprintf(stderr, "%s: can't stat(%s): %s\n", Pn,
|
|
Packit Service |
603f59 |
DEVDEV_PATH, strerror(se1));
|
|
Packit Service |
603f59 |
if (ad) {
|
|
Packit Service |
603f59 |
(void) fprintf(stderr, "%s: can't stat(/dev): %s\n", Pn,
|
|
Packit Service |
603f59 |
strerror(se2));
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
Exit(1);
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
DevDev = sb.st_dev;
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* Process the file arguments.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
if (GOx1 < argc) {
|
|
Packit Service |
603f59 |
if (ck_file_arg(GOx1, argc, argv, Ffilesys, 0, (struct stat *)NULL))
|
|
Packit Service |
603f59 |
usage(1, 0, 0);
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* Do dialect-specific initialization.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
initialize();
|
|
Packit Service |
603f59 |
if (Sfile)
|
|
Packit Service |
603f59 |
(void) hashSfile();
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if defined(WILLDROPGID)
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* If this process isn't setuid(root), but it is setgid(not_real_gid),
|
|
Packit Service |
603f59 |
* relinquish the setgid power. (If it hasn't already been done.)
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
(void) dropgid();
|
|
Packit Service |
603f59 |
#endif /* defined(WILLDROPGID) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if defined(HASDCACHE)
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* If there is a device cache, prepare the device table.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
if (DCstate)
|
|
Packit Service |
603f59 |
readdev(0);
|
|
Packit Service |
603f59 |
#endif /* defined(HASDCACHE) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* Define the size and offset print formats.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
(void) snpf(options, sizeof(options), "%%%su", INODEPSPEC);
|
|
Packit Service |
603f59 |
InodeFmt_d = sv_fmt_str(options);
|
|
Packit Service |
603f59 |
(void) snpf(options, sizeof(options), "%%#%sx", INODEPSPEC);
|
|
Packit Service |
603f59 |
InodeFmt_x = sv_fmt_str(options);
|
|
Packit Service |
603f59 |
(void) snpf(options, sizeof(options), "0t%%%su", SZOFFPSPEC);
|
|
Packit Service |
603f59 |
SzOffFmt_0t = sv_fmt_str(options);
|
|
Packit Service |
603f59 |
(void) snpf(options, sizeof(options), "%%%su", SZOFFPSPEC);
|
|
Packit Service |
603f59 |
SzOffFmt_d = sv_fmt_str(options);
|
|
Packit Service |
603f59 |
(void) snpf(options, sizeof(options), "%%*%su", SZOFFPSPEC);
|
|
Packit Service |
603f59 |
SzOffFmt_dv = sv_fmt_str(options);
|
|
Packit Service |
603f59 |
(void) snpf(options, sizeof(options), "%%#%sx", SZOFFPSPEC);
|
|
Packit Service |
603f59 |
SzOffFmt_x = sv_fmt_str(options);
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if defined(HASMNTSUP)
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* Report mount supplement information, as requested.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
if (MntSup == 1) {
|
|
Packit Service |
603f59 |
(void) readmnt();
|
|
Packit Service |
603f59 |
Exit(0);
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
#endif /* defined(HASMNTSUP) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* Gather and report process information every RptTm seconds.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
if (RptTm)
|
|
Packit Service |
603f59 |
CkPasswd = 1;
|
|
Packit Service |
603f59 |
do {
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* Gather information about processes.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
gather_proc_info();
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* If the local process table has more than one entry, sort it by PID.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
if (Nlproc > 1) {
|
|
Packit Service |
603f59 |
if (Nlproc > sp) {
|
|
Packit Service |
603f59 |
len = (MALLOC_S)(Nlproc * sizeof(struct lproc *));
|
|
Packit Service |
603f59 |
sp = Nlproc;
|
|
Packit Service |
603f59 |
if (!slp)
|
|
Packit Service |
603f59 |
slp = (struct lproc **)malloc(len);
|
|
Packit Service |
603f59 |
else
|
|
Packit Service |
603f59 |
slp = (struct lproc **)realloc((MALLOC_P *)slp, len);
|
|
Packit Service |
603f59 |
if (!slp) {
|
|
Packit Service |
603f59 |
(void) fprintf(stderr,
|
|
Packit Service |
603f59 |
"%s: no space for %d sort pointers\n", Pn, Nlproc);
|
|
Packit Service |
603f59 |
Exit(1);
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
for (i = 0; i < Nlproc; i++) {
|
|
Packit Service |
603f59 |
slp[i] = &Lproc[i];
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
(void) qsort((QSORT_P *)slp, (size_t)Nlproc,
|
|
Packit Service |
603f59 |
(size_t)sizeof(struct lproc *), comppid);
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
if ((n = Nlproc)) {
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if defined(HASNCACHE)
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* If using the kernel name cache, force its reloading.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
NcacheReload = 1;
|
|
Packit Service |
603f59 |
#endif /* defined(HASNCACHE) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if defined(HASEPTOPTS)
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* If endpoint info has been requested, make sure it is coded for
|
|
Packit Service |
603f59 |
* printing.
|
|
Packit Service |
603f59 |
*
|
|
Packit Service |
603f59 |
* Lf contents must be preserved, since they may point to a
|
|
Packit Service |
603f59 |
* malloc()'d area, and since Lf is used throughout the printing
|
|
Packit Service |
603f59 |
* of the selected processes.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
if (FeptE) {
|
|
Packit Service |
603f59 |
lf = Lf;
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* Scan all selected processes.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
for (i = 0; i < Nlproc; i++) {
|
|
Packit Service |
603f59 |
Lp = (Nlproc > 1) ? slp[i] : &Lproc[i];
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* For processes that have been selected for printing
|
|
Packit Service |
603f59 |
* and have files that are the end point(s) of pipe(s),
|
|
Packit Service |
603f59 |
* process the file endpoints.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
if (Lp->pss && (Lp->ept & EPT_PIPE))
|
|
Packit Service |
603f59 |
(void) process_pinfo(0);
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
# if defined(HASUXSOCKEPT)
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* For processes that have been selected for printing
|
|
Packit Service |
603f59 |
* and have files that are the end point(s) of UNIX
|
|
Packit Service |
603f59 |
* socket(s), process the file endpoints.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
if (Lp->pss && (Lp->ept & EPT_UXS))
|
|
Packit Service |
603f59 |
(void) process_uxsinfo(0);
|
|
Packit Service |
603f59 |
# endif /* defined(HASUXSOCKEPT) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
# if defined(HASPTYEPT)
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* For processes that have been selected for printing
|
|
Packit Service |
603f59 |
* and have files that are the end point(s) of pseudo-
|
|
Packit Service |
603f59 |
* terminal files(s), process the file endpoints.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
if (Lp->pss && (Lp->ept & EPT_PTY))
|
|
Packit Service |
603f59 |
(void) process_ptyinfo(0);
|
|
Packit Service |
603f59 |
# endif /* defined(HASPTYEPT) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* In a second pass, look for unselected endpoint files,
|
|
Packit Service |
603f59 |
* possibly selecting them for printing.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
for (i = 0; i < Nlproc; i++) {
|
|
Packit Service |
603f59 |
Lp = (Nlproc > 1) ? slp[i] : &Lproc[i];
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* Process pipe endpoints.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
if (Lp->ept & EPT_PIPE_END)
|
|
Packit Service |
603f59 |
(void) process_pinfo(1);
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
# if defined(HASUXSOCKEPT)
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* Process UNIX socket endpoints.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
if (Lp->ept & EPT_UXS_END)
|
|
Packit Service |
603f59 |
(void) process_uxsinfo(1);
|
|
Packit Service |
603f59 |
# endif /* defined(HASUXSOCKEPT) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
# if defined(HASPTYEPT)
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* Process pseudo-terminal endpoints.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
if (Lp->ept & EPT_PTY_END)
|
|
Packit Service |
603f59 |
(void) process_ptyinfo(1);
|
|
Packit Service |
603f59 |
# endif /* defined(HASPTYEPT) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
Lf = lf;
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
#endif /* defined(HASEPTOPTS) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* Print the selected processes and count them.
|
|
Packit Service |
603f59 |
*
|
|
Packit Service |
603f59 |
* Lf contents must be preserved, since they may point to a
|
|
Packit Service |
603f59 |
* malloc()'d area, and since Lf is used throughout the print
|
|
Packit Service |
603f59 |
* process.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
for (lf = Lf, print_init(); PrPass < 2; PrPass++) {
|
|
Packit Service |
603f59 |
for (i = n = 0; i < Nlproc; i++) {
|
|
Packit Service |
603f59 |
Lp = (Nlproc > 1) ? slp[i] : &Lproc[i];
|
|
Packit Service |
603f59 |
if (Lp->pss) {
|
|
Packit Service |
603f59 |
if (print_proc())
|
|
Packit Service |
603f59 |
n++;
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
if (RptTm && PrPass)
|
|
Packit Service |
603f59 |
(void) free_lproc(Lp);
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
Lf = lf;
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* If a repeat time is set, sleep for the specified time.
|
|
Packit Service |
603f59 |
*
|
|
Packit Service |
603f59 |
* If conditional repeat mode is in effect, see if it's time to exit.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
if (RptTm) {
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if defined(HASEPTOPTS)
|
|
Packit Service |
603f59 |
(void) clear_pinfo();
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
# if defined(HASUXSOCKEPT)
|
|
Packit Service |
603f59 |
(void) clear_uxsinfo();
|
|
Packit Service |
603f59 |
# endif /* defined(HASUXSOCKEPT) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
# if defined(HASPTYEPT)
|
|
Packit Service |
603f59 |
(void) clear_ptyinfo();
|
|
Packit Service |
603f59 |
# endif /* defined(HASPTYEPT) */
|
|
Packit Service |
603f59 |
#endif /* defined(HASEPTOPTS) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
if (rc) {
|
|
Packit Service |
603f59 |
if (!n)
|
|
Packit Service |
603f59 |
break;
|
|
Packit Service |
603f59 |
else
|
|
Packit Service |
603f59 |
ev = 0;
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if defined(HAS_STRFTIME)
|
|
Packit Service |
603f59 |
if (fmt && fmtr) {
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* Format the marker line.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
(void) util_strftime(fmtr, fmtl - 1, fmt);
|
|
Packit Service |
603f59 |
fmtr[fmtl - 1] = '\0';
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
#endif /* defined(HAS_STRFTIME) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
if (Ffield) {
|
|
Packit Service |
603f59 |
putchar(LSOF_FID_MARK);
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if defined(HAS_STRFTIME)
|
|
Packit Service |
603f59 |
if (fmtr)
|
|
Packit Service |
603f59 |
(void) printf("%s", fmtr);
|
|
Packit Service |
603f59 |
#endif /* defined(HAS_STRFTIME) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
putchar(Terminator);
|
|
Packit Service |
603f59 |
if (Terminator != '\n')
|
|
Packit Service |
603f59 |
putchar('\n');
|
|
Packit Service |
603f59 |
} else {
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if defined(HAS_STRFTIME)
|
|
Packit Service |
603f59 |
if (fmtr)
|
|
Packit Service |
603f59 |
cp = fmtr;
|
|
Packit Service |
603f59 |
else
|
|
Packit Service |
603f59 |
#endif /* defined(HAS_STRFTIME) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
cp = "=======";
|
|
Packit Service |
603f59 |
puts(cp);
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
(void) fflush(stdout);
|
|
Packit Service |
603f59 |
(void) childx();
|
|
Packit Service |
603f59 |
(void) sleep(RptTm);
|
|
Packit Service |
603f59 |
Hdr = Nlproc = 0;
|
|
Packit Service |
603f59 |
CkPasswd = 1;
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
} while (RptTm);
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* See if all requested information was displayed. Return zero if it
|
|
Packit Service |
603f59 |
* was; one, if not. If -V was specified, report what was not displayed.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
(void) childx();
|
|
Packit Service |
603f59 |
rv = 0;
|
|
Packit Service |
603f59 |
for (str = Cmdl; str; str = str->next) {
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* Check command specifications.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
if (str->f)
|
|
Packit Service |
603f59 |
continue;
|
|
Packit Service |
603f59 |
rv = 1;
|
|
Packit Service |
603f59 |
if (Fverbose) {
|
|
Packit Service |
603f59 |
(void) printf("%s: command not located: ", Pn);
|
|
Packit Service |
603f59 |
safestrprt(str->str, stdout, 1);
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
for (i = 0; i < NCmdRxU; i++) {
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* Check command regular expressions.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
if (CmdRx[i].mc)
|
|
Packit Service |
603f59 |
continue;
|
|
Packit Service |
603f59 |
rv = 1;
|
|
Packit Service |
603f59 |
if (Fverbose) {
|
|
Packit Service |
603f59 |
(void) printf("%s: no command found for regex: ", Pn);
|
|
Packit Service |
603f59 |
safestrprt(CmdRx[i].exp, stdout, 1);
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
for (sfp = Sfile; sfp; sfp = sfp->next) {
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* Check file specifications.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
if (sfp->f)
|
|
Packit Service |
603f59 |
continue;
|
|
Packit Service |
603f59 |
rv = 1;
|
|
Packit Service |
603f59 |
if (Fverbose) {
|
|
Packit Service |
603f59 |
(void) printf("%s: no file%s use located: ", Pn,
|
|
Packit Service |
603f59 |
sfp->type ? "" : " system");
|
|
Packit Service |
603f59 |
safestrprt(sfp->aname, stdout, 1);
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if defined(HASPROCFS)
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* Report on proc file system search results.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
if (Procsrch && !Procfind) {
|
|
Packit Service |
603f59 |
rv = 1;
|
|
Packit Service |
603f59 |
if (Fverbose) {
|
|
Packit Service |
603f59 |
(void) printf("%s: no file system use located: ", Pn);
|
|
Packit Service |
603f59 |
safestrprt(Mtprocfs ? Mtprocfs->dir : HASPROCFS, stdout, 1);
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
{
|
|
Packit Service |
603f59 |
struct procfsid *pfi;
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
for (pfi = Procfsid; pfi; pfi = pfi->next) {
|
|
Packit Service |
603f59 |
if (!pfi->f) {
|
|
Packit Service |
603f59 |
rv = 1;
|
|
Packit Service |
603f59 |
if (Fverbose) {
|
|
Packit Service |
603f59 |
(void) printf("%s: no file use located: ", Pn);
|
|
Packit Service |
603f59 |
safestrprt(pfi->nm, stdout, 1);
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
#endif /* defined(HASPROCFS) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
if ((np = Nwad)) {
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* Check Internet address specifications.
|
|
Packit Service |
603f59 |
*
|
|
Packit Service |
603f59 |
* If any Internet address derived from the same argument was found,
|
|
Packit Service |
603f59 |
* consider all derivations found. If no derivation from the same
|
|
Packit Service |
603f59 |
* argument was found, report only the first failure.
|
|
Packit Service |
603f59 |
*
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
for (; np; np = np->next) {
|
|
Packit Service |
603f59 |
if (!(cp = np->arg))
|
|
Packit Service |
603f59 |
continue;
|
|
Packit Service |
603f59 |
for (npn = np->next; npn; npn = npn->next) {
|
|
Packit Service |
603f59 |
if (!npn->arg)
|
|
Packit Service |
603f59 |
continue;
|
|
Packit Service |
603f59 |
if (!strcmp(cp, npn->arg)) {
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* If either of the duplicate specifications was found,
|
|
Packit Service |
603f59 |
* mark them both found. If neither was found, mark all
|
|
Packit Service |
603f59 |
* but the first one found.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
if (np->f)
|
|
Packit Service |
603f59 |
npn->f = np->f;
|
|
Packit Service |
603f59 |
else if (npn->f)
|
|
Packit Service |
603f59 |
np->f = npn->f;
|
|
Packit Service |
603f59 |
else
|
|
Packit Service |
603f59 |
npn->f = 1;
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
for (np = Nwad; np; np = np->next) {
|
|
Packit Service |
603f59 |
if (!np->f && (cp = np->arg)) {
|
|
Packit Service |
603f59 |
rv = 1;
|
|
Packit Service |
603f59 |
if (Fverbose) {
|
|
Packit Service |
603f59 |
(void) printf("%s: Internet address not located: ", Pn);
|
|
Packit Service |
603f59 |
safestrprt(cp ? cp : "(unknown)", stdout, 1);
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
if (Fnet && Fnet < 2) {
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* Report no Internet files located.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
rv = 1;
|
|
Packit Service |
603f59 |
if (Fverbose)
|
|
Packit Service |
603f59 |
(void) printf("%s: no Internet files located\n", Pn);
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if defined(HASTCPUDPSTATE)
|
|
Packit Service |
603f59 |
if (TcpStIn) {
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* Check for included TCP states not located.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
for (i = 0; i < TcpNstates; i++) {
|
|
Packit Service |
603f59 |
if (TcpStI[i] == 1) {
|
|
Packit Service |
603f59 |
rv = 1;
|
|
Packit Service |
603f59 |
if (Fverbose)
|
|
Packit Service |
603f59 |
(void) printf("%s: TCP state not located: %s\n",
|
|
Packit Service |
603f59 |
Pn, TcpSt[i]);
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
if (UdpStIn) {
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* Check for included UDP states not located.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
for (i = 0; i < UdpNstates; i++) {
|
|
Packit Service |
603f59 |
if (UdpStI[i] == 1) {
|
|
Packit Service |
603f59 |
rv = 1;
|
|
Packit Service |
603f59 |
if (Fverbose)
|
|
Packit Service |
603f59 |
(void) printf("%s: UDP state not located: %s\n",
|
|
Packit Service |
603f59 |
Pn, UdpSt[i]);
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
#endif /* defined(HASTCPUDPSTATE) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
if (Fnfs && Fnfs < 2) {
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* Report no NFS files located.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
rv = 1;
|
|
Packit Service |
603f59 |
if (Fverbose)
|
|
Packit Service |
603f59 |
(void) printf("%s: no NFS files located\n", Pn);
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
for (i = 0; i < Npid; i++) {
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* Check inclusionary process ID specifications.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
if (Spid[i].f || Spid[i].x)
|
|
Packit Service |
603f59 |
continue;
|
|
Packit Service |
603f59 |
rv = 1;
|
|
Packit Service |
603f59 |
if (Fverbose)
|
|
Packit Service |
603f59 |
(void) printf("%s: process ID not located: %d\n",
|
|
Packit Service |
603f59 |
Pn, Spid[i].i);
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if defined(HASTASKS)
|
|
Packit Service |
603f59 |
if (Ftask && Ftask < 2) {
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* Report no tasks located.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
rv = 1;
|
|
Packit Service |
603f59 |
if (Fverbose)
|
|
Packit Service |
603f59 |
(void) printf("%s: no tasks located\n", Pn);
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
#endif /* defined(HASTASKS) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if defined(HASZONES)
|
|
Packit Service |
603f59 |
if (ZoneArg) {
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* Check zone argument results.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
for (i = 0; i < HASHZONE; i++) {
|
|
Packit Service |
603f59 |
for (zp = ZoneArg[i]; zp; zp = zp->next) {
|
|
Packit Service |
603f59 |
if (!zp->f) {
|
|
Packit Service |
603f59 |
rv = 1;
|
|
Packit Service |
603f59 |
if (Fverbose) {
|
|
Packit Service |
603f59 |
(void) printf("%s: zone not located: ", Pn);
|
|
Packit Service |
603f59 |
safestrprt(zp->zn, stdout, 1);
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
#endif /* defined(HASZONES) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
#if defined(HASSELINUX)
|
|
Packit Service |
603f59 |
if (CntxArg) {
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* Check context argument results.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
for (cntxp = CntxArg; cntxp; cntxp = cntxp->next) {
|
|
Packit Service |
603f59 |
if (!cntxp->f) {
|
|
Packit Service |
603f59 |
rv = 1;
|
|
Packit Service |
603f59 |
if (Fverbose) {
|
|
Packit Service |
603f59 |
(void) printf("%s: context not located: ", Pn);
|
|
Packit Service |
603f59 |
safestrprt(cntxp->cntx, stdout, 1);
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
#endif /* defined(HASSELINUX) */
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
for (i = 0; i < Npgid; i++) {
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* Check inclusionary process group ID specifications.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
if (Spgid[i].f || Spgid[i].x)
|
|
Packit Service |
603f59 |
continue;
|
|
Packit Service |
603f59 |
rv = 1;
|
|
Packit Service |
603f59 |
if (Fverbose)
|
|
Packit Service |
603f59 |
(void) printf("%s: process group ID not located: %d\n",
|
|
Packit Service |
603f59 |
Pn, Spgid[i].i);
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
for (i = 0; i < Nuid; i++) {
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* Check inclusionary user ID specifications.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
if (Suid[i].excl || Suid[i].f)
|
|
Packit Service |
603f59 |
continue;
|
|
Packit Service |
603f59 |
rv = 1;
|
|
Packit Service |
603f59 |
if (Fverbose) {
|
|
Packit Service |
603f59 |
if (Suid[i].lnm) {
|
|
Packit Service |
603f59 |
(void) printf("%s: login name (UID %lu) not located: ",
|
|
Packit Service |
603f59 |
Pn, (unsigned long)Suid[i].uid);
|
|
Packit Service |
603f59 |
safestrprt(Suid[i].lnm, stdout, 1);
|
|
Packit Service |
603f59 |
} else
|
|
Packit Service |
603f59 |
(void) printf("%s: user ID not located: %lu\n", Pn,
|
|
Packit Service |
603f59 |
(unsigned long)Suid[i].uid);
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
if (!rv && rc)
|
|
Packit Service |
603f59 |
rv = ev;
|
|
Packit Service |
603f59 |
if (!rv && ErrStat)
|
|
Packit Service |
603f59 |
rv = 1;
|
|
Packit Service |
603f59 |
Exit(rv);
|
|
Packit Service |
603f59 |
return(rv); /* to make code analyzers happy */
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* GetOpt() -- Local get option
|
|
Packit Service |
603f59 |
*
|
|
Packit Service |
603f59 |
* Liberally adapted from the public domain AT&T getopt() source,
|
|
Packit Service |
603f59 |
* distributed at the 1985 UNIFORM conference in Dallas
|
|
Packit Service |
603f59 |
*
|
|
Packit Service |
603f59 |
* The modifications allow `?' to be an option character and allow
|
|
Packit Service |
603f59 |
* the caller to decide that an option that may be followed by a
|
|
Packit Service |
603f59 |
* value doesn't have one -- e.g., has a default instead.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
static int
|
|
Packit Service |
603f59 |
GetOpt(ct, opt, rules, err)
|
|
Packit Service |
603f59 |
int ct; /* option count */
|
|
Packit Service |
603f59 |
char *opt[]; /* options */
|
|
Packit Service |
603f59 |
char *rules; /* option rules */
|
|
Packit Service |
603f59 |
int *err; /* error return */
|
|
Packit Service |
603f59 |
{
|
|
Packit Service |
603f59 |
register int c;
|
|
Packit Service |
603f59 |
register char *cp = (char *)NULL;
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
if (GOx2 == 0) {
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* Move to a new entry of the option array.
|
|
Packit Service |
603f59 |
*
|
|
Packit Service |
603f59 |
* EOF if:
|
|
Packit Service |
603f59 |
*
|
|
Packit Service |
603f59 |
* Option list has been exhausted;
|
|
Packit Service |
603f59 |
* Next option doesn't start with `-' or `+';
|
|
Packit Service |
603f59 |
* Next option has nothing but `-' or `+';
|
|
Packit Service |
603f59 |
* Next option is ``--'' or ``++''.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
if (GOx1 >= ct
|
|
Packit Service |
603f59 |
|| (opt[GOx1][0] != '-' && opt[GOx1][0] != '+')
|
|
Packit Service |
603f59 |
|| !opt[GOx1][1])
|
|
Packit Service |
603f59 |
return(EOF);
|
|
Packit Service |
603f59 |
if (strcmp(opt[GOx1], "--") == 0 || strcmp(opt[GOx1], "++") == 0) {
|
|
Packit Service |
603f59 |
GOx1++;
|
|
Packit Service |
603f59 |
return(EOF);
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
GOp = opt[GOx1][0];
|
|
Packit Service |
603f59 |
GOx2 = 1;
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* Flag `:' option character as an error.
|
|
Packit Service |
603f59 |
*
|
|
Packit Service |
603f59 |
* Check for a rule on this option character.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
*err = 0;
|
|
Packit Service |
603f59 |
if ((c = opt[GOx1][GOx2]) == ':') {
|
|
Packit Service |
603f59 |
(void) fprintf(stderr,
|
|
Packit Service |
603f59 |
"%s: colon is an illegal option character.\n", Pn);
|
|
Packit Service |
603f59 |
*err = 1;
|
|
Packit Service |
603f59 |
} else if (!(cp = strchr(rules, c))) {
|
|
Packit Service |
603f59 |
(void) fprintf(stderr, "%s: illegal option character: %c\n", Pn, c);
|
|
Packit Service |
603f59 |
*err = 2;
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
if (*err) {
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* An error was detected.
|
|
Packit Service |
603f59 |
*
|
|
Packit Service |
603f59 |
* Advance to the next option character.
|
|
Packit Service |
603f59 |
*
|
|
Packit Service |
603f59 |
* Return the character causing the error.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
if (opt[GOx1][++GOx2] == '\0') {
|
|
Packit Service |
603f59 |
GOx1++;
|
|
Packit Service |
603f59 |
GOx2 = 0;
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
return(c);
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
if (*(cp + 1) == ':') {
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* The option may have a following value. The caller decides
|
|
Packit Service |
603f59 |
* if it does.
|
|
Packit Service |
603f59 |
*
|
|
Packit Service |
603f59 |
* Save the position of the possible value in case the caller
|
|
Packit Service |
603f59 |
* decides it does not belong to the option and wants it
|
|
Packit Service |
603f59 |
* reconsidered as an option character. The caller does that
|
|
Packit Service |
603f59 |
* with:
|
|
Packit Service |
603f59 |
* GOx1 = GObk[0]; GOx2 = GObk[1];
|
|
Packit Service |
603f59 |
*
|
|
Packit Service |
603f59 |
* Don't indicate that an option of ``--'' is a possible value.
|
|
Packit Service |
603f59 |
*
|
|
Packit Service |
603f59 |
* Finally, on the assumption that the caller will decide that
|
|
Packit Service |
603f59 |
* the possible value belongs to the option, position to the
|
|
Packit Service |
603f59 |
* option following the possible value, so that the next call
|
|
Packit Service |
603f59 |
* to GetOpt() will find it.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
if(opt[GOx1][GOx2 + 1] != '\0') {
|
|
Packit Service |
603f59 |
GObk[0] = GOx1;
|
|
Packit Service |
603f59 |
GObk[1] = ++GOx2;
|
|
Packit Service |
603f59 |
GOv = &opt[GOx1++][GOx2];
|
|
Packit Service |
603f59 |
} else if (++GOx1 >= ct)
|
|
Packit Service |
603f59 |
GOv = (char *)NULL;
|
|
Packit Service |
603f59 |
else {
|
|
Packit Service |
603f59 |
GObk[0] = GOx1;
|
|
Packit Service |
603f59 |
GObk[1] = 0;
|
|
Packit Service |
603f59 |
GOv = opt[GOx1];
|
|
Packit Service |
603f59 |
if (strcmp(GOv, "--") == 0)
|
|
Packit Service |
603f59 |
GOv = (char *)NULL;
|
|
Packit Service |
603f59 |
else
|
|
Packit Service |
603f59 |
GOx1++;
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
GOx2 = 0;
|
|
Packit Service |
603f59 |
} else {
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* The option character stands alone with no following value.
|
|
Packit Service |
603f59 |
*
|
|
Packit Service |
603f59 |
* Advance to the next option character.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
if (opt[GOx1][++GOx2] == '\0') {
|
|
Packit Service |
603f59 |
GOx2 = 0;
|
|
Packit Service |
603f59 |
GOx1++;
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
GOv = (char *)NULL;
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* Return the option character.
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
return(c);
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
/*
|
|
Packit Service |
603f59 |
* sv_fmt_str() - save format string
|
|
Packit Service |
603f59 |
*/
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
static char *
|
|
Packit Service |
603f59 |
sv_fmt_str(f)
|
|
Packit Service |
603f59 |
char *f; /* format string */
|
|
Packit Service |
603f59 |
{
|
|
Packit Service |
603f59 |
char *cp;
|
|
Packit Service |
603f59 |
MALLOC_S l;
|
|
Packit Service |
603f59 |
|
|
Packit Service |
603f59 |
l = (MALLOC_S)(strlen(f) + 1);
|
|
Packit Service |
603f59 |
if (!(cp = (char *)malloc(l))) {
|
|
Packit Service |
603f59 |
(void) fprintf(stderr,
|
|
Packit Service |
603f59 |
"%s: can't allocate %d bytes for format: %s\n", Pn, (int)l, f);
|
|
Packit Service |
603f59 |
Exit(1);
|
|
Packit Service |
603f59 |
}
|
|
Packit Service |
603f59 |
(void) snpf(cp, l, "%s", f);
|
|
Packit Service |
603f59 |
return(cp);
|
|
Packit Service |
603f59 |
}
|