1 /*- 2 * Copyright (c) 1990 The Regents of the University of California. 3 * All rights reserved. 4 * 5 * This code is derived from software contributed to Berkeley by 6 * Cimarron D. Taylor of the University of California, Berkeley. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions 10 * are met: 11 * 1. Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer. 13 * 2. Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in the 15 * documentation and/or other materials provided with the distribution. 16 * 3. All advertising materials mentioning features or use of this software 17 * must display the following acknowledgement: 18 * This product includes software developed by the University of 19 * California, Berkeley and its contributors. 20 * 4. Neither the name of the University nor the names of its contributors 21 * may be used to endorse or promote products derived from this software 22 * without specific prior written permission. 23 * 24 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 25 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 27 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 30 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 31 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 32 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 33 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 34 * SUCH DAMAGE. 35 * 36 * @(#)find.h 5.8 (Berkeley) 5/24/91 37 */ 38 39 #ifndef _FSP_FIND_H_ 40 #define _FSP_FIND_H_ 1 41 42 /* node type */ 43 enum ntype { 44 N_AND = 1, /* must start > 0 */ 45 N_TIME, N_CLOSEPAREN, N_EXEC, N_EXPR, 46 N_LS, N_NAME, N_NEWER, 47 N_NOT, N_OK, N_OPENPAREN, N_OR, N_PRINT, 48 N_PRUNE, N_SIZE, N_TYPE 49 }; 50 51 /* node definition */ 52 typedef struct _plandata { 53 struct _plandata *next; /* next node */ 54 int (*eval) (struct _plandata *, struct stat *, char *); /* node evaluation function */ 55 int flags; /* private flags */ 56 enum ntype type; /* plan node type */ 57 union { 58 gid_t _g_data; /* gid */ 59 ino_t _i_data; /* inode */ 60 mode_t _m_data; /* mode mask */ 61 nlink_t _l_data; /* link count */ 62 off_t _o_data; /* file size */ 63 time_t _t_data; /* time value */ 64 uid_t _u_data; /* uid */ 65 struct _plandata *_p_data[2]; /* PLAN trees */ 66 struct _ex { 67 char **_e_argv; /* argv array */ 68 char **_e_orig; /* original strings */ 69 int *_e_len; /* allocated length */ 70 } ex; 71 char *_a_data[2]; /* array of char pointers */ 72 char *_c_data; /* char pointer */ 73 } p_un; 74 #define a_data p_un._a_data 75 #define c_data p_un._c_data 76 #define i_data p_un._i_data 77 #define g_data p_un._g_data 78 #define l_data p_un._l_data 79 #define m_data p_un._m_data 80 #define o_data p_un._o_data 81 #define p_data p_un._p_data 82 #define t_data p_un._t_data 83 #define u_data p_un._u_data 84 #define e_argv p_un.ex._e_argv 85 #define e_orig p_un.ex._e_orig 86 #define e_len p_un.ex._e_len 87 } PLAN; 88 89 typedef struct _option { 90 const char *name; /* option name */ 91 enum ntype token; /* token type */ 92 PLAN *(*create)(); /* create function */ 93 #define O_NONE 0x01 /* no call required */ 94 #define O_ZERO 0x02 /* pass: nothing */ 95 #define O_ARGV 0x04 /* pass: argv, increment argv */ 96 #define O_ARGVP 0x08 /* pass: *argv, N_OK || N_EXEC */ 97 int flags; 98 } OPTION; 99 100 /* find.c */ 101 void find_formplan (char **); 102 103 /* fnmatch.c */ 104 int fnmatch (register char *, register char *); 105 106 /* function.c */ 107 PLAN * c_time (char *); 108 PLAN *c_exec (char ***, int); 109 PLAN *c_ls (void); 110 PLAN *c_name (char *); 111 PLAN *c_newer (char *); 112 PLAN *c_print (void); 113 PLAN *c_prune (void); 114 PLAN *c_size (char *); 115 PLAN *c_type (char *); 116 int find_expr (PLAN *, struct stat *, char *); 117 PLAN *c_openparen (void); 118 PLAN *c_closeparen (void); 119 PLAN *c_not (void); 120 PLAN *c_or (void); 121 122 /* operator.c */ 123 PLAN *paren_squish (PLAN *); 124 PLAN *not_squish (PLAN *); 125 PLAN *or_squish (PLAN *); 126 127 /* options.c */ 128 PLAN *find_create (char ***); 129 OPTION *option (char *); 130 131 #endif /* _FSP_FIND_H_ */ 132