commands: import of netbsd find
This commit is contained in:
parent
fcd2a802a8
commit
6704520919
|
@ -11,7 +11,7 @@ SUBDIR= aal add_route adduser advent arp ash at autil awk \
|
|||
dd de decomp16 DESCRIBE dev2name devsize df dhcpd \
|
||||
dhrystone diff dirname dis88 du dumpcore easypack \
|
||||
ed eject elle elvis env expand factor fgrep file \
|
||||
finger fingerd fix fold format fortune fsck \
|
||||
find finger fingerd fix fold format fortune fsck \
|
||||
fsck1 ftp101 ftpd200 getty gomoku grep head host \
|
||||
hostaddr id ifconfig ifdef indent install \
|
||||
intr ipcrm ipcs irdpd isoread join kill last leave \
|
||||
|
|
|
@ -1,13 +1,14 @@
|
|||
# $NetBSD: Makefile,v 1.12 2006/12/14 20:55:56 he Exp $
|
||||
# from: @(#)Makefile 8.1 (Berkeley) 6/6/93
|
||||
|
||||
.include <bsd.own.mk>
|
||||
.include <minix.own.mk>
|
||||
|
||||
PROG= find
|
||||
SRCS= find.c function.c ls.c main.c misc.c operator.c option.c
|
||||
WARNS= 4
|
||||
|
||||
CFLAGS += -Wall
|
||||
|
||||
LDADD+=-lutil
|
||||
DPADD+=${LIBUTIL}
|
||||
|
||||
.include <bsd.prog.mk>
|
||||
.include <minix.prog.mk>
|
||||
|
|
|
@ -33,13 +33,6 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static char sccsid[] = "from: @(#)find.c 8.5 (Berkeley) 8/5/94";
|
||||
#else
|
||||
__RCSID("$NetBSD: find.c,v 1.25 2007/09/25 04:10:12 lukem Exp $");
|
||||
#endif
|
||||
#endif /* not lint */
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
|
@ -54,7 +47,7 @@ __RCSID("$NetBSD: find.c,v 1.25 2007/09/25 04:10:12 lukem Exp $");
|
|||
|
||||
#include "find.h"
|
||||
|
||||
static int ftscompare(const FTSENT **, const FTSENT **);
|
||||
static int ftscompare(const FTSENT * const *, const FTSENT * const *);
|
||||
|
||||
static void sig_lock(sigset_t *);
|
||||
static void sig_unlock(const sigset_t *);
|
||||
|
@ -148,7 +141,7 @@ find_formplan(char **argv)
|
|||
}
|
||||
|
||||
static int
|
||||
ftscompare(const FTSENT **e1, const FTSENT **e2)
|
||||
ftscompare(const FTSENT * const *e1, const FTSENT * const *e2)
|
||||
{
|
||||
|
||||
return (strcoll((*e1)->fts_name, (*e2)->fts_name));
|
||||
|
@ -160,7 +153,9 @@ sig_lock(sigset_t *s)
|
|||
sigset_t new;
|
||||
|
||||
sigemptyset(&new);
|
||||
#ifdef SIGINFO
|
||||
sigaddset(&new, SIGINFO); /* block SIGINFO */
|
||||
#endif
|
||||
sigprocmask(SIG_BLOCK, &new, s);
|
||||
}
|
||||
|
||||
|
|
|
@ -40,14 +40,21 @@
|
|||
enum ntype {
|
||||
N_AND = 1, /* must start > 0 */
|
||||
N_AMIN, N_ANEWER, N_ATIME, N_CLOSEPAREN, N_CMIN, N_CNEWER, N_CTIME,
|
||||
N_DEPTH, N_EMPTY, N_EXEC, N_EXECDIR, N_EXIT, N_EXPR, N_FALSE, N_FLAGS,
|
||||
N_FOLLOW, N_FPRINT, N_FSTYPE, N_GROUP,
|
||||
N_DEPTH, N_EMPTY, N_EXEC, N_EXECDIR, N_EXIT, N_EXPR, N_FALSE,
|
||||
N_FOLLOW, N_FPRINT,
|
||||
#ifndef _MINIX
|
||||
N_FSTYPE,
|
||||
N_FLAGS,
|
||||
#endif
|
||||
N_GROUP,
|
||||
N_INAME, N_INUM, N_IREGEX, N_LINKS, N_LS, N_MINDEPTH, N_MAXDEPTH,
|
||||
N_MMIN, N_MTIME, N_NAME, N_NEWER, N_NOGROUP, N_NOT, N_NOUSER, N_OK,
|
||||
N_OPENPAREN, N_OR, N_PATH, N_PERM, N_PRINT, N_PRINT0, N_PRINTX,
|
||||
N_PRUNE, N_REGEX, N_SIZE, N_TYPE, N_USER, N_XDEV, N_DELETE
|
||||
};
|
||||
|
||||
typedef unsigned int u_int32_t;
|
||||
|
||||
/* node definition */
|
||||
typedef struct _plandata {
|
||||
struct _plandata *next; /* next node */
|
||||
|
@ -61,6 +68,7 @@ typedef struct _plandata {
|
|||
#define F_MTFLAG 1 /* fstype */
|
||||
#define F_MTTYPE 2
|
||||
#define F_ATLEAST 1 /* perm */
|
||||
#define F_ANY 2 /* perm */
|
||||
int flags; /* private flags */
|
||||
enum ntype type; /* plan node type */
|
||||
union {
|
||||
|
|
|
@ -33,13 +33,6 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static char sccsid[] = "from: @(#)function.c 8.10 (Berkeley) 5/4/95";
|
||||
#else
|
||||
__RCSID("$NetBSD: function.c,v 1.64 2007/07/19 07:49:30 daniel Exp $");
|
||||
#endif
|
||||
#endif /* not lint */
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/stat.h>
|
||||
|
@ -55,7 +48,6 @@ __RCSID("$NetBSD: function.c,v 1.64 2007/07/19 07:49:30 daniel Exp $");
|
|||
#include <inttypes.h>
|
||||
#include <limits.h>
|
||||
#include <pwd.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
@ -65,6 +57,10 @@ __RCSID("$NetBSD: function.c,v 1.64 2007/07/19 07:49:30 daniel Exp $");
|
|||
|
||||
#include "find.h"
|
||||
|
||||
typedef int bool;
|
||||
#define false 0
|
||||
#define true 1
|
||||
|
||||
#define COMPARE(a, b) { \
|
||||
switch (plan->flags) { \
|
||||
case F_EQUAL: \
|
||||
|
@ -78,7 +74,7 @@ __RCSID("$NetBSD: function.c,v 1.64 2007/07/19 07:49:30 daniel Exp $");
|
|||
} \
|
||||
}
|
||||
|
||||
static int64_t find_parsenum(PLAN *, const char *, const char *, char *);
|
||||
static int32_t find_parsenum(PLAN *, const char *, const char *, char *);
|
||||
static void run_f_exec(PLAN *);
|
||||
int f_always_true(PLAN *, FTSENT *);
|
||||
int f_amin(PLAN *, FTSENT *);
|
||||
|
@ -131,10 +127,10 @@ extern time_t now;
|
|||
* find_parsenum --
|
||||
* Parse a string of the form [+-]# and return the value.
|
||||
*/
|
||||
static int64_t
|
||||
static int32_t
|
||||
find_parsenum(PLAN *plan, const char *option, const char *vp, char *endch)
|
||||
{
|
||||
int64_t value;
|
||||
int32_t value;
|
||||
const char *str;
|
||||
char *endchar; /* Pointer to character ending conversion. */
|
||||
|
||||
|
@ -159,7 +155,7 @@ find_parsenum(PLAN *plan, const char *option, const char *vp, char *endch)
|
|||
* and endchar points to the beginning of the string we know we have
|
||||
* a syntax error.
|
||||
*/
|
||||
value = strtoq(str, &endchar, 10);
|
||||
value = strtol(str, &endchar, 10);
|
||||
if (value == 0 && endchar == str)
|
||||
errx(1, "%s: %s: illegal numeric value", option, vp);
|
||||
if (endchar[0] && (endch == NULL || endchar[0] != *endch))
|
||||
|
@ -379,12 +375,14 @@ f_delete(PLAN *plan __unused, FTSENT *entry)
|
|||
errx(1, "-delete: %s: relative path potentially not safe",
|
||||
entry->fts_accpath);
|
||||
|
||||
#ifndef _MINIX
|
||||
/* Turn off user immutable bits if running as root */
|
||||
if ((entry->fts_statp->st_flags & (UF_APPEND|UF_IMMUTABLE)) &&
|
||||
!(entry->fts_statp->st_flags & (SF_APPEND|SF_IMMUTABLE)) &&
|
||||
geteuid() == 0)
|
||||
chflags(entry->fts_accpath,
|
||||
entry->fts_statp->st_flags &= ~(UF_APPEND|UF_IMMUTABLE));
|
||||
#endif
|
||||
|
||||
/* rmdir directories, unlink everything else */
|
||||
if (S_ISDIR(entry->fts_statp->st_mode)) {
|
||||
|
@ -545,9 +543,9 @@ f_exec(PLAN *plan, FTSENT *entry)
|
|||
fflush(stdout);
|
||||
fflush(stderr);
|
||||
|
||||
switch (pid = vfork()) {
|
||||
switch (pid = fork()) {
|
||||
case -1:
|
||||
err(1, "vfork");
|
||||
err(1, "fork");
|
||||
/* NOTREACHED */
|
||||
case 0:
|
||||
if (fchdir(dotfd)) {
|
||||
|
@ -577,9 +575,9 @@ run_f_exec(PLAN *plan)
|
|||
fflush(stdout);
|
||||
fflush(stderr);
|
||||
|
||||
switch (pid = vfork()) {
|
||||
switch (pid = fork()) {
|
||||
case -1:
|
||||
err(1, "vfork");
|
||||
err(1, "fork");
|
||||
/* NOTREACHED */
|
||||
case 0:
|
||||
if (fchdir(dotfd)) {
|
||||
|
@ -755,7 +753,7 @@ f_execdir(PLAN *plan, FTSENT *entry)
|
|||
fflush(stdout);
|
||||
fflush(stderr);
|
||||
|
||||
switch (pid = vfork()) {
|
||||
switch (pid = fork()) {
|
||||
case -1:
|
||||
err(1, "fork");
|
||||
/* NOTREACHED */
|
||||
|
@ -857,6 +855,7 @@ c_false(char ***argvp, int isok)
|
|||
}
|
||||
|
||||
|
||||
#ifndef _MINIX
|
||||
/*
|
||||
* -flags [-]flags functions --
|
||||
*/
|
||||
|
@ -870,6 +869,8 @@ f_flags(PLAN *plan, FTSENT *entry)
|
|||
return ((plan->f_data | flags) == flags);
|
||||
else
|
||||
return (flags == plan->f_data);
|
||||
/* MINIX has no file flags. */
|
||||
return 0;
|
||||
/* NOTREACHED */
|
||||
}
|
||||
|
||||
|
@ -897,6 +898,7 @@ c_flags(char ***argvp, int isok)
|
|||
new->f_data = flagset;
|
||||
return (new);
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* -follow functions --
|
||||
|
@ -951,6 +953,7 @@ c_fprint(char ***argvp, int isok)
|
|||
*
|
||||
* True if the file is of a certain type.
|
||||
*/
|
||||
#ifndef _MINIX
|
||||
int
|
||||
f_fstype(PLAN *plan, FTSENT *entry)
|
||||
{
|
||||
|
@ -1044,6 +1047,7 @@ c_fstype(char ***argvp, int isok)
|
|||
new->c_data = arg;
|
||||
return (new);
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* -group gname functions --
|
||||
|
@ -1424,9 +1428,15 @@ f_perm(PLAN *plan, FTSENT *entry)
|
|||
mode_t mode;
|
||||
|
||||
mode = entry->fts_statp->st_mode &
|
||||
(S_ISUID|S_ISGID|S_ISTXT|S_IRWXU|S_IRWXG|S_IRWXO);
|
||||
(S_ISUID|S_ISGID
|
||||
#ifdef S_ISTXT
|
||||
|S_ISTXT
|
||||
#endif
|
||||
|S_IRWXU|S_IRWXG|S_IRWXO);
|
||||
if (plan->flags == F_ATLEAST)
|
||||
return ((plan->m_data | mode) == mode);
|
||||
else if (plan->flags == F_ANY)
|
||||
return ((plan->m_data & mode) != 0);
|
||||
else
|
||||
return (mode == plan->m_data);
|
||||
/* NOTREACHED */
|
||||
|
@ -1447,6 +1457,9 @@ c_perm(char ***argvp, int isok)
|
|||
if (*perm == '-') {
|
||||
new->flags = F_ATLEAST;
|
||||
++perm;
|
||||
} else if (*perm == '+') {
|
||||
new->flags = F_ANY;
|
||||
++perm;
|
||||
}
|
||||
|
||||
if ((set = setmode(perm)) == NULL)
|
||||
|
@ -1562,7 +1575,7 @@ f_regex(PLAN *plan, FTSENT *entry)
|
|||
static PLAN *
|
||||
c_regex_common(char ***argvp, int isok, enum ntype type, bool icase)
|
||||
{
|
||||
char errbuf[LINE_MAX];
|
||||
char errbuf[100];
|
||||
regex_t reg;
|
||||
char *regexp = **argvp;
|
||||
char *lineregexp;
|
||||
|
@ -1687,9 +1700,11 @@ c_type(char ***argvp, int isok)
|
|||
case 'p':
|
||||
mask = S_IFIFO;
|
||||
break;
|
||||
#ifdef S_IFSOCK
|
||||
case 's':
|
||||
mask = S_IFSOCK;
|
||||
break;
|
||||
#endif
|
||||
#ifdef S_IFWHT
|
||||
case 'W':
|
||||
case 'w':
|
||||
|
|
|
@ -30,13 +30,6 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static char sccsid[] = "from: @(#)ls.c 8.1 (Berkeley) 6/6/93";
|
||||
#else
|
||||
__RCSID("$NetBSD: ls.c,v 1.19 2006/10/11 19:51:10 apb Exp $");
|
||||
#endif
|
||||
#endif /* not lint */
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/stat.h>
|
||||
|
@ -52,6 +45,9 @@ __RCSID("$NetBSD: ls.c,v 1.19 2006/10/11 19:51:10 apb Exp $");
|
|||
#include <time.h>
|
||||
#include <tzfile.h>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/statfs.h>
|
||||
|
||||
#include "find.h"
|
||||
|
||||
|
@ -66,19 +62,40 @@ printlong(char *name, /* filename to print */
|
|||
struct stat *sb) /* stat buffer */
|
||||
{
|
||||
char modep[15];
|
||||
static dev_t dev;
|
||||
static int blocksize = 0;
|
||||
long blocks = -1;
|
||||
|
||||
(void)printf("%7lu %6lld ", (u_long)sb->st_ino,
|
||||
(long long)sb->st_blocks);
|
||||
if(!blocksize || sb->st_dev != dev) {
|
||||
int fd;
|
||||
struct statfs fs;
|
||||
blocksize = 0;
|
||||
if((fd = open(name, O_RDONLY)) >= 0) {
|
||||
if(fstatfs(fd, &fs) >= 0) {
|
||||
blocksize = fs.f_bsize;
|
||||
}
|
||||
close(fd);
|
||||
}
|
||||
}
|
||||
|
||||
if(blocksize > 0)
|
||||
blocks = ((long)sb->st_size+blocksize-1)/blocksize;
|
||||
|
||||
(void)printf("%7lu ", (u_long)sb->st_ino);
|
||||
if(blocks >= 0)
|
||||
(void)printf("%6ld ", blocks);
|
||||
else
|
||||
(void)printf("? ");
|
||||
(void)strmode(sb->st_mode, modep);
|
||||
(void)printf("%s %3lu %-*s %-*s ", modep, (unsigned long)sb->st_nlink,
|
||||
LOGIN_NAME_MAX, user_from_uid(sb->st_uid, 0), LOGIN_NAME_MAX,
|
||||
(void)printf("%s %3lu %-10s %-10s ", modep, (unsigned long)sb->st_nlink,
|
||||
user_from_uid(sb->st_uid, 0),
|
||||
group_from_gid(sb->st_gid, 0));
|
||||
|
||||
if (S_ISCHR(sb->st_mode) || S_ISBLK(sb->st_mode))
|
||||
(void)printf("%3d,%5d ", major(sb->st_rdev),
|
||||
minor(sb->st_rdev));
|
||||
else
|
||||
(void)printf("%9lld ", (long long)sb->st_size);
|
||||
(void)printf("%9ld ", (long)sb->st_size);
|
||||
printtime(sb->st_mtime);
|
||||
(void)printf("%s", name);
|
||||
if (S_ISLNK(sb->st_mode))
|
||||
|
|
|
@ -33,15 +33,6 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static char sccsid[] = "@(#)main.c 8.4 (Berkeley) 5/4/95";
|
||||
#else
|
||||
__COPYRIGHT("@(#) Copyright (c) 1990, 1993, 1994\
|
||||
The Regents of the University of California. All rights reserved.");
|
||||
__RCSID("$NetBSD: main.c,v 1.28 2008/07/21 14:19:22 lukem Exp $");
|
||||
#endif
|
||||
#endif /* not lint */
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
|
@ -86,7 +77,9 @@ main(int argc, char *argv[])
|
|||
memset(&sa, 0, sizeof(sa));
|
||||
sa.sa_flags = SA_RESTART;
|
||||
sa.sa_handler = show_path;
|
||||
#ifdef SIGINFO
|
||||
sigaction(SIGINFO, &sa, NULL);
|
||||
#endif
|
||||
|
||||
/* array to hold dir list. at most (argc - 1) elements. */
|
||||
p = start = malloc(argc * sizeof (char *));
|
||||
|
|
|
@ -33,13 +33,6 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static char sccsid[] = "from: @(#)misc.c 8.2 (Berkeley) 4/1/94";
|
||||
#else
|
||||
__RCSID("$NetBSD: misc.c,v 1.14 2006/10/11 19:51:10 apb Exp $");
|
||||
#endif
|
||||
#endif /* not lint */
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
|
|
|
@ -33,13 +33,6 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static char sccsid[] = "from: @(#)option.c 8.2 (Berkeley) 4/16/94";
|
||||
#else
|
||||
__RCSID("$NetBSD: option.c,v 1.26 2007/02/06 15:33:22 perry Exp $");
|
||||
#endif
|
||||
#endif /* not lint */
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
|
@ -75,10 +68,12 @@ static OPTION const options[] = {
|
|||
{ "-execdir", N_EXECDIR, c_execdir, 1 },
|
||||
{ "-exit", N_EXIT, c_exit, 0 },
|
||||
{ "-false", N_FALSE, c_false, 0 },
|
||||
{ "-flags", N_FLAGS, c_flags, 1 },
|
||||
{ "-follow", N_FOLLOW, c_follow, 0 },
|
||||
{ "-fprint", N_FPRINT, c_fprint, 1 },
|
||||
#ifndef _MINIX
|
||||
{ "-flags", N_FLAGS, c_flags, 1 },
|
||||
{ "-fstype", N_FSTYPE, c_fstype, 1 },
|
||||
#endif
|
||||
{ "-group", N_GROUP, c_group, 1 },
|
||||
{ "-iname", N_INAME, c_iname, 1 },
|
||||
{ "-inum", N_INUM, c_inum, 1 },
|
||||
|
|
Loading…
Reference in a new issue