1*319e7a6dSDavid van Moolenbroek /* $NetBSD: find.h,v 1.25 2013/05/04 06:29:32 uebayasi Exp $ */ 2*319e7a6dSDavid van Moolenbroek 3*319e7a6dSDavid van Moolenbroek /*- 4*319e7a6dSDavid van Moolenbroek * Copyright (c) 1990, 1993 5*319e7a6dSDavid van Moolenbroek * The Regents of the University of California. All rights reserved. 6*319e7a6dSDavid van Moolenbroek * 7*319e7a6dSDavid van Moolenbroek * This code is derived from software contributed to Berkeley by 8*319e7a6dSDavid van Moolenbroek * Cimarron D. Taylor of the University of California, Berkeley. 9*319e7a6dSDavid van Moolenbroek * 10*319e7a6dSDavid van Moolenbroek * Redistribution and use in source and binary forms, with or without 11*319e7a6dSDavid van Moolenbroek * modification, are permitted provided that the following conditions 12*319e7a6dSDavid van Moolenbroek * are met: 13*319e7a6dSDavid van Moolenbroek * 1. Redistributions of source code must retain the above copyright 14*319e7a6dSDavid van Moolenbroek * notice, this list of conditions and the following disclaimer. 15*319e7a6dSDavid van Moolenbroek * 2. Redistributions in binary form must reproduce the above copyright 16*319e7a6dSDavid van Moolenbroek * notice, this list of conditions and the following disclaimer in the 17*319e7a6dSDavid van Moolenbroek * documentation and/or other materials provided with the distribution. 18*319e7a6dSDavid van Moolenbroek * 3. Neither the name of the University nor the names of its contributors 19*319e7a6dSDavid van Moolenbroek * may be used to endorse or promote products derived from this software 20*319e7a6dSDavid van Moolenbroek * without specific prior written permission. 21*319e7a6dSDavid van Moolenbroek * 22*319e7a6dSDavid van Moolenbroek * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 23*319e7a6dSDavid van Moolenbroek * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 24*319e7a6dSDavid van Moolenbroek * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 25*319e7a6dSDavid van Moolenbroek * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 26*319e7a6dSDavid van Moolenbroek * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 27*319e7a6dSDavid van Moolenbroek * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 28*319e7a6dSDavid van Moolenbroek * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 29*319e7a6dSDavid van Moolenbroek * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 30*319e7a6dSDavid van Moolenbroek * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 31*319e7a6dSDavid van Moolenbroek * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 32*319e7a6dSDavid van Moolenbroek * SUCH DAMAGE. 33*319e7a6dSDavid van Moolenbroek * 34*319e7a6dSDavid van Moolenbroek * from: @(#)find.h 8.1 (Berkeley) 6/6/93 35*319e7a6dSDavid van Moolenbroek */ 36*319e7a6dSDavid van Moolenbroek 37*319e7a6dSDavid van Moolenbroek #include <regex.h> 38*319e7a6dSDavid van Moolenbroek #include <time.h> 39*319e7a6dSDavid van Moolenbroek 40*319e7a6dSDavid van Moolenbroek /* node type */ 41*319e7a6dSDavid van Moolenbroek enum ntype { 42*319e7a6dSDavid van Moolenbroek N_AND = 1, /* must start > 0 */ 43*319e7a6dSDavid van Moolenbroek N_AMIN, N_ANEWER, N_ATIME, N_CLOSEPAREN, N_CMIN, N_CNEWER, N_CTIME, 44*319e7a6dSDavid van Moolenbroek N_DEPTH, N_EMPTY, N_EXEC, N_EXECDIR, N_EXIT, N_EXPR, N_FALSE, N_FLAGS, 45*319e7a6dSDavid van Moolenbroek N_FOLLOW, N_FPRINT, N_FSTYPE, N_GROUP, 46*319e7a6dSDavid van Moolenbroek N_INAME, N_INUM, N_IREGEX, N_LINKS, N_LS, N_MINDEPTH, N_MAXDEPTH, 47*319e7a6dSDavid van Moolenbroek N_MMIN, N_MTIME, N_NAME, N_NEWER, N_NOGROUP, N_NOT, N_NOUSER, N_OK, 48*319e7a6dSDavid van Moolenbroek N_OPENPAREN, N_OR, N_PATH, N_PERM, N_PRINT, N_PRINT0, N_PRINTX, 49*319e7a6dSDavid van Moolenbroek N_PRUNE, N_REGEX, N_SIZE, N_TYPE, N_USER, N_XDEV, N_DELETE 50*319e7a6dSDavid van Moolenbroek }; 51*319e7a6dSDavid van Moolenbroek 52*319e7a6dSDavid van Moolenbroek /* node definition */ 53*319e7a6dSDavid van Moolenbroek typedef struct _plandata { 54*319e7a6dSDavid van Moolenbroek struct _plandata *next; /* next node */ 55*319e7a6dSDavid van Moolenbroek int (*eval)(struct _plandata *, FTSENT *); 56*319e7a6dSDavid van Moolenbroek /* node evaluation function */ 57*319e7a6dSDavid van Moolenbroek #define F_EQUAL 1 /* [acm]time inum links size */ 58*319e7a6dSDavid van Moolenbroek #define F_LESSTHAN 2 59*319e7a6dSDavid van Moolenbroek #define F_GREATER 3 60*319e7a6dSDavid van Moolenbroek #define F_NEEDOK 1 /* exec ok */ 61*319e7a6dSDavid van Moolenbroek #define F_PLUSSET 2 /* -exec ... {} + */ 62*319e7a6dSDavid van Moolenbroek #define F_MTFLAG 1 /* fstype */ 63*319e7a6dSDavid van Moolenbroek #define F_MTTYPE 2 64*319e7a6dSDavid van Moolenbroek #define F_ATLEAST 1 /* perm */ 65*319e7a6dSDavid van Moolenbroek int flags; /* private flags */ 66*319e7a6dSDavid van Moolenbroek enum ntype type; /* plan node type */ 67*319e7a6dSDavid van Moolenbroek union { 68*319e7a6dSDavid van Moolenbroek u_int32_t _f_data; /* flags */ 69*319e7a6dSDavid van Moolenbroek gid_t _g_data; /* gid */ 70*319e7a6dSDavid van Moolenbroek ino_t _i_data; /* inode */ 71*319e7a6dSDavid van Moolenbroek mode_t _m_data; /* mode mask */ 72*319e7a6dSDavid van Moolenbroek nlink_t _l_data; /* link count */ 73*319e7a6dSDavid van Moolenbroek off_t _o_data; /* file size */ 74*319e7a6dSDavid van Moolenbroek time_t _t_data; /* time value */ 75*319e7a6dSDavid van Moolenbroek struct timespec _ts_data; /* time value */ 76*319e7a6dSDavid van Moolenbroek uid_t _u_data; /* uid */ 77*319e7a6dSDavid van Moolenbroek short _mt_data; /* mount flags */ 78*319e7a6dSDavid van Moolenbroek struct _plandata *_p_data[2]; /* PLAN trees */ 79*319e7a6dSDavid van Moolenbroek struct _ex { 80*319e7a6dSDavid van Moolenbroek char **_e_argv; /* argv array */ 81*319e7a6dSDavid van Moolenbroek char **_e_orig; /* original strings */ 82*319e7a6dSDavid van Moolenbroek int *_e_len; /* allocated length */ 83*319e7a6dSDavid van Moolenbroek char **_ep_bxp; /* ptr to 1st addt'l arg */ 84*319e7a6dSDavid van Moolenbroek char *_ep_p; /* current buffer pointer */ 85*319e7a6dSDavid van Moolenbroek char *_ep_bbp; /* begin buffer pointer */ 86*319e7a6dSDavid van Moolenbroek char *_ep_ebp; /* end buffer pointer */ 87*319e7a6dSDavid van Moolenbroek int _ep_maxargs; /* max #args */ 88*319e7a6dSDavid van Moolenbroek int _ep_narg; /* # addt'l args */ 89*319e7a6dSDavid van Moolenbroek int _ep_rval; /* return value */ 90*319e7a6dSDavid van Moolenbroek } ex; 91*319e7a6dSDavid van Moolenbroek char *_a_data[2]; /* array of char pointers */ 92*319e7a6dSDavid van Moolenbroek char *_c_data; /* char pointer */ 93*319e7a6dSDavid van Moolenbroek int _exit_val; /* exit value */ 94*319e7a6dSDavid van Moolenbroek int _max_data; /* tree depth */ 95*319e7a6dSDavid van Moolenbroek int _min_data; /* tree depth */ 96*319e7a6dSDavid van Moolenbroek regex_t _regexp_data; /* compiled regexp */ 97*319e7a6dSDavid van Moolenbroek FILE *_fprint_file; /* file stream for -fprint */ 98*319e7a6dSDavid van Moolenbroek } p_un; 99*319e7a6dSDavid van Moolenbroek } PLAN; 100*319e7a6dSDavid van Moolenbroek #define a_data p_un._a_data 101*319e7a6dSDavid van Moolenbroek #define c_data p_un._c_data 102*319e7a6dSDavid van Moolenbroek #define i_data p_un._i_data 103*319e7a6dSDavid van Moolenbroek #define f_data p_un._f_data 104*319e7a6dSDavid van Moolenbroek #define g_data p_un._g_data 105*319e7a6dSDavid van Moolenbroek #define l_data p_un._l_data 106*319e7a6dSDavid van Moolenbroek #define m_data p_un._m_data 107*319e7a6dSDavid van Moolenbroek #define mt_data p_un._mt_data 108*319e7a6dSDavid van Moolenbroek #define o_data p_un._o_data 109*319e7a6dSDavid van Moolenbroek #define p_data p_un._p_data 110*319e7a6dSDavid van Moolenbroek #define t_data p_un._t_data 111*319e7a6dSDavid van Moolenbroek #define ts_data p_un._ts_data 112*319e7a6dSDavid van Moolenbroek #define u_data p_un._u_data 113*319e7a6dSDavid van Moolenbroek #define e_argv p_un.ex._e_argv 114*319e7a6dSDavid van Moolenbroek #define e_orig p_un.ex._e_orig 115*319e7a6dSDavid van Moolenbroek #define e_len p_un.ex._e_len 116*319e7a6dSDavid van Moolenbroek #define ep_p p_un.ex._ep_p 117*319e7a6dSDavid van Moolenbroek #define ep_bbp p_un.ex._ep_bbp 118*319e7a6dSDavid van Moolenbroek #define ep_ebp p_un.ex._ep_ebp 119*319e7a6dSDavid van Moolenbroek #define ep_bxp p_un.ex._ep_bxp 120*319e7a6dSDavid van Moolenbroek #define ep_cnt p_un.ex._ep_cnt 121*319e7a6dSDavid van Moolenbroek #define ep_maxargs p_un.ex._ep_maxargs 122*319e7a6dSDavid van Moolenbroek #define ep_nline p_un.ex._ep_nline 123*319e7a6dSDavid van Moolenbroek #define ep_narg p_un.ex._ep_narg 124*319e7a6dSDavid van Moolenbroek #define ep_rval p_un.ex._ep_rval 125*319e7a6dSDavid van Moolenbroek #define exit_val p_un._exit_val 126*319e7a6dSDavid van Moolenbroek #define max_data p_un._max_data 127*319e7a6dSDavid van Moolenbroek #define min_data p_un._min_data 128*319e7a6dSDavid van Moolenbroek #define regexp_data p_un._regexp_data 129*319e7a6dSDavid van Moolenbroek #define fprint_file p_un._fprint_file 130*319e7a6dSDavid van Moolenbroek 131*319e7a6dSDavid van Moolenbroek typedef struct _option { 132*319e7a6dSDavid van Moolenbroek const char *name; /* option name */ 133*319e7a6dSDavid van Moolenbroek enum ntype token; /* token type */ 134*319e7a6dSDavid van Moolenbroek PLAN *(*create)(char ***, int); /* create function */ 135*319e7a6dSDavid van Moolenbroek int arg; /* function needs arg */ 136*319e7a6dSDavid van Moolenbroek } OPTION; 137*319e7a6dSDavid van Moolenbroek 138*319e7a6dSDavid van Moolenbroek #include "extern.h" 139