xref: /onnv-gate/usr/src/lib/libast/common/misc/findlib.h (revision 12068:08a39a083754)
14887Schin /***********************************************************************
24887Schin *                                                                      *
34887Schin *               This software is part of the ast package               *
4*12068SRoger.Faulkner@Oracle.COM *          Copyright (c) 1985-2010 AT&T Intellectual Property          *
54887Schin *                      and is licensed under the                       *
64887Schin *                  Common Public License, Version 1.0                  *
78462SApril.Chin@Sun.COM *                    by AT&T Intellectual Property                     *
84887Schin *                                                                      *
94887Schin *                A copy of the License is available at                 *
104887Schin *            http://www.opensource.org/licenses/cpl1.0.txt             *
114887Schin *         (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9)         *
124887Schin *                                                                      *
134887Schin *              Information and Software Systems Research               *
144887Schin *                            AT&T Research                             *
154887Schin *                           Florham Park NJ                            *
164887Schin *                                                                      *
174887Schin *                 Glenn Fowler <gsf@research.att.com>                  *
184887Schin *                  David Korn <dgk@research.att.com>                   *
194887Schin *                   Phong Vo <kpv@research.att.com>                    *
204887Schin *                                                                      *
214887Schin ***********************************************************************/
224887Schin #pragma prototyped
234887Schin /*
244887Schin  * fast find private interface
254887Schin  */
264887Schin 
274887Schin #ifndef _FINDLIB_H
284887Schin #define _FINDLIB_H
294887Schin 
304887Schin #include <ast.h>
314887Schin #include <cdt.h>
324887Schin #include <ctype.h>
334887Schin #include <error.h>
344887Schin #include <ls.h>
354887Schin #include <regex.h>
364887Schin #include <vmalloc.h>
374887Schin 
384887Schin #define FF_old		1	/* old format - 7 bit bigram		*/
394887Schin #define FF_gnu		2	/* gnu 8 bit no bigram			*/
404887Schin #define FF_dir		3	/* FF_gnu, dirs have trailing /		*/
414887Schin #define FF_typ		4	/* FF_dir with types			*/
424887Schin 
434887Schin #define FF_gnu_magic	"LOCATE02"
444887Schin #define FF_dir_magic	"FIND-DIR-02"
454887Schin #define FF_typ_magic	"FIND-DIR-TYPE-03"
464887Schin 
474887Schin #define FF_ESC		0036
484887Schin #define FF_MAX		0200
494887Schin #define FF_MIN		0040
504887Schin #define FF_OFF		0016
514887Schin 
524887Schin #define FF_SET_TYPE(p,i)	((p)->decode.bigram1[((i)>>3)&((1<<CHAR_BIT)-1)]|=(1<<((i)&07)))
534887Schin #define FF_OK_TYPE(p,i)		(!(p)->types||((p)->decode.bigram1[((i)>>3)&((1<<CHAR_BIT)-1)]&(1<<((i)&07))))
544887Schin 
554887Schin typedef struct
564887Schin {
574887Schin 	char*		end;
584887Schin 	char*		type;
594887Schin 	char*		restore;
604887Schin 	int		count;
614887Schin 	int		found;
624887Schin 	int		ignorecase;
634887Schin 	int		match;
644887Schin 	int		peek;
654887Schin 	int		swap;
664887Schin 	regex_t		re;
674887Schin 	char		bigram1[(1<<(CHAR_BIT-1))];
684887Schin 	char		bigram2[(1<<(CHAR_BIT-1))];
694887Schin 	char		path[PATH_MAX];
704887Schin 	char		temp[PATH_MAX];
714887Schin 	char		pattern[1];
724887Schin } Decode_t;
734887Schin 
744887Schin typedef struct
754887Schin {
764887Schin 	Dtdisc_t	namedisc;
774887Schin 	Dtdisc_t	indexdisc;
784887Schin 	Dt_t*		namedict;
794887Schin 	Dt_t*		indexdict;
804887Schin 	int		prefix;
814887Schin 	unsigned char	bigram[2*FF_MAX];
824887Schin 	unsigned short	code[FF_MAX][FF_MAX];
834887Schin 	unsigned short	hits[USHRT_MAX+1];
844887Schin 	char		path[PATH_MAX];
854887Schin 	char		mark[PATH_MAX];
864887Schin 	char		file[PATH_MAX];
874887Schin 	char		temp[PATH_MAX];
884887Schin } Encode_t;
894887Schin 
904887Schin typedef union
914887Schin {
924887Schin 	Decode_t	code_decode;
934887Schin 	Encode_t	code_encode;
944887Schin } Code_t;
954887Schin 
964887Schin typedef struct
974887Schin {
984887Schin 	Dtlink_t	byname;
994887Schin 	Dtlink_t	byindex;
1004887Schin 	unsigned long	index;
1014887Schin 	char		name[1];
1024887Schin } Type_t;
1034887Schin 
1044887Schin #define _FIND_PRIVATE_			\
1054887Schin 	Finddisc_t*	disc;		\
1064887Schin 	Vmalloc_t*	vm;		\
1074887Schin 	char**		dirs;		\
1084887Schin 	int*		lens;		\
1094887Schin 	Sfio_t*		fp;		\
1104887Schin 	Findverify_f	verifyf;	\
1114887Schin 	int		generate;	\
1124887Schin 	int		method;		\
1134887Schin 	int		secure;		\
1144887Schin 	int		types;		\
1154887Schin 	int		verify;		\
1164887Schin 	Code_t		code;
1174887Schin 
1184887Schin #define decode		code.code_decode
1194887Schin #define encode		code.code_encode
1204887Schin 
1214887Schin #include <find.h>
1224887Schin 
1234887Schin #endif
124