* Copyright (c) 1990 The Regents of the University of California.
* This code is derived from software contributed to Berkeley by
* Cimarron D. Taylor of the University of California, Berkeley.
* %sccs.include.redist.c%
static char sccsid
[] = "@(#)option.c 5.12 (Berkeley) %G%";
/* NB: the following table must be sorted lexically. */
static OPTION options
[] = {
{ "!", N_NOT
, c_not
, O_ZERO
},
{ "(", N_OPENPAREN
, c_openparen
, O_ZERO
},
{ ")", N_CLOSEPAREN
, c_closeparen
, O_ZERO
},
{ "-a", N_AND
, NULL
, O_NONE
},
{ "-and", N_AND
, NULL
, O_NONE
},
{ "-atime", N_ATIME
, c_atime
, O_ARGV
},
{ "-ctime", N_CTIME
, c_ctime
, O_ARGV
},
{ "-depth", N_DEPTH
, c_depth
, O_ZERO
},
{ "-exec", N_EXEC
, c_exec
, O_ARGVP
},
{ "-follow", N_FOLLOW
, c_follow
, O_ZERO
},
{ "-fstype", N_FSTYPE
, c_fstype
, O_ARGV
},
{ "-group", N_GROUP
, c_group
, O_ARGV
},
{ "-inum", N_INUM
, c_inum
, O_ARGV
},
{ "-links", N_LINKS
, c_links
, O_ARGV
},
{ "-ls", N_LS
, c_ls
, O_ZERO
},
{ "-mtime", N_MTIME
, c_mtime
, O_ARGV
},
{ "-name", N_NAME
, c_name
, O_ARGV
},
{ "-newer", N_NEWER
, c_newer
, O_ARGV
},
{ "-nogroup", N_NOGROUP
, c_nogroup
, O_ZERO
},
{ "-nouser", N_NOUSER
, c_nouser
, O_ZERO
},
{ "-o", N_OR
, c_or
, O_ZERO
},
{ "-ok", N_OK
, c_exec
, O_ARGVP
},
{ "-or", N_OR
, c_or
, O_ZERO
},
{ "-path", N_PATH
, c_path
, O_ARGV
},
{ "-perm", N_PERM
, c_perm
, O_ARGV
},
{ "-print", N_PRINT
, c_print
, O_ZERO
},
{ "-prune", N_PRUNE
, c_prune
, O_ZERO
},
{ "-size", N_SIZE
, c_size
, O_ARGV
},
{ "-type", N_TYPE
, c_type
, O_ARGV
},
{ "-user", N_USER
, c_user
, O_ARGV
},
{ "-xdev", N_XDEV
, c_xdev
, O_ZERO
},
* create a node corresponding to a command line argument.
* add create/process function pointers to node, so we can skip
if ((p
= option(*argv
)) == NULL
)
errx(1, "%s: unknown option", *argv
);
if (p
->flags
& (O_ARGV
|O_ARGVP
) && !*argv
)
errx(1, "%s: requires additional arguments", *--argv
);
new = (p
->create
)(*argv
++);
new = (p
->create
)(&argv
, p
->token
== N_OK
);
int typecompare
__P((const void *, const void *));
return ((OPTION
*)bsearch(&tmp
, options
,
sizeof(options
)/sizeof(OPTION
), sizeof(OPTION
), typecompare
));
return (strcmp(((OPTION
*)a
)->name
, ((OPTION
*)b
)->name
));