xref: /openbsd-src/usr.bin/grep/grep.h (revision 1fd6e0f27a1b79aefcbc7bda5f618c8c59842dce)
1*1fd6e0f2Sop /*	$OpenBSD: grep.h,v 1.29 2022/06/26 10:57:36 op Exp $	*/
2fd6e2b5bSderaadt 
3fe07e37bSderaadt /*-
4fe07e37bSderaadt  * Copyright (c) 1999 James Howard and Dag-Erling Co�dan Sm�rgrav
5fe07e37bSderaadt  * All rights reserved.
6fe07e37bSderaadt  *
7fe07e37bSderaadt  * Redistribution and use in source and binary forms, with or without
8fe07e37bSderaadt  * modification, are permitted provided that the following conditions
9fe07e37bSderaadt  * are met:
10fe07e37bSderaadt  * 1. Redistributions of source code must retain the above copyright
11fe07e37bSderaadt  *    notice, this list of conditions and the following disclaimer.
12fe07e37bSderaadt  * 2. Redistributions in binary form must reproduce the above copyright
13fe07e37bSderaadt  *    notice, this list of conditions and the following disclaimer in the
14fe07e37bSderaadt  *    documentation and/or other materials provided with the distribution.
15fe07e37bSderaadt  *
16fe07e37bSderaadt  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17fe07e37bSderaadt  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18fe07e37bSderaadt  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19fe07e37bSderaadt  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20fe07e37bSderaadt  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21fe07e37bSderaadt  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22fe07e37bSderaadt  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23fe07e37bSderaadt  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24fe07e37bSderaadt  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25fe07e37bSderaadt  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26fe07e37bSderaadt  * SUCH DAMAGE.
27fe07e37bSderaadt  */
28fe07e37bSderaadt 
29fe07e37bSderaadt #include <sys/types.h>
303a21e479Stedu #include <sys/stat.h>
31fe07e37bSderaadt 
32dfc95ac4Smillert #include <limits.h>
33fe07e37bSderaadt #include <regex.h>
34dfc95ac4Smillert #include <stdint.h>
35fe07e37bSderaadt #include <stdio.h>
36fe07e37bSderaadt #include <zlib.h>
37fe07e37bSderaadt 
38fe07e37bSderaadt #define VER_MAJ 0
39fe07e37bSderaadt #define VER_MIN 9
40fe07e37bSderaadt 
41f057df86Stedu #define BIN_FILE_BIN	0
42f057df86Stedu #define BIN_FILE_SKIP	1
43f057df86Stedu #define BIN_FILE_TEXT	2
44f057df86Stedu 
45fe07e37bSderaadt typedef struct {
46fe07e37bSderaadt 	size_t		 len;
472f35e644Smmcc 	long long	 line_no;
48b02c2e6bSotto 	off_t		 off;
49fe07e37bSderaadt 	char		*file;
50fe07e37bSderaadt 	char		*dat;
51fe07e37bSderaadt } str_t;
52fe07e37bSderaadt 
5370c36c4eStedu typedef struct {
5470c36c4eStedu 	unsigned char	*pattern;
5570c36c4eStedu 	int		 patternLen;
5670c36c4eStedu 	int		 qsBc[UCHAR_MAX + 1];
5770c36c4eStedu 	/* flags */
5870c36c4eStedu 	int		 bol;
5970c36c4eStedu 	int		 eol;
600c9d1b5fSmillert 	int		 wmatch;
6170c36c4eStedu 	int		 reversedSearch;
6270c36c4eStedu } fastgrep_t;
6370c36c4eStedu 
64fe07e37bSderaadt /* Flags passed to regcomp() and regexec() */
65fe07e37bSderaadt extern int	 cflags, eflags;
66fe07e37bSderaadt 
67fe07e37bSderaadt /* Command line flags */
68a1b2c99eStedu extern int	 Aflag, Bflag, Eflag, Fflag, Hflag, Lflag,
6940155c30Stedu 		 Rflag, Zflag,
70b5430e4dSpirofti 		 bflag, cflag, hflag, iflag, lflag, mflag, nflag, oflag, qflag,
71*1fd6e0f2Sop 		 sflag, vflag, wflag, xflag, nullflag;
72f6ceeffdSotto extern int	 binbehave;
73e06eeb70Stedu extern const char *labelname;
74fe07e37bSderaadt 
7520351096Smillert extern int	 first, matchall, patterns, tail, file_err;
76fe07e37bSderaadt extern char    **pattern;
7770c36c4eStedu extern fastgrep_t *fg_pattern;
78fe07e37bSderaadt extern regex_t	*r_pattern;
79fe07e37bSderaadt 
80b5430e4dSpirofti /* For -m max-count */
81b5430e4dSpirofti extern long long mcount, mlimit;
82b5430e4dSpirofti 
83fe07e37bSderaadt /* For regex errors  */
84fe07e37bSderaadt #define RE_ERROR_BUF 512
85fe07e37bSderaadt extern char	 re_error[RE_ERROR_BUF + 1];	/* Seems big enough */
86fe07e37bSderaadt 
87fe07e37bSderaadt /* util.c */
88fe07e37bSderaadt int		 procfile(char *fn);
89fe07e37bSderaadt int		 grep_tree(char **argv);
90fe07e37bSderaadt void		*grep_malloc(size_t size);
911ed98fdfSderaadt void		*grep_calloc(size_t nmemb, size_t size);
92fe07e37bSderaadt void		*grep_realloc(void *ptr, size_t size);
9362ab4a5fSderaadt void		*grep_reallocarray(void *ptr, size_t nmemb, size_t size);
9414774268Stedu void		 printline(str_t *line, int sep, regmatch_t *pmatch);
9570c36c4eStedu int		 fastcomp(fastgrep_t *, const char *);
966cd4fad2Sderaadt void		 fgrepcomp(fastgrep_t *, const unsigned char *);
97fe07e37bSderaadt 
98fe07e37bSderaadt /* queue.c */
99c6038928Smillert void		 initqueue(void);
100fe07e37bSderaadt void		 enqueue(str_t *x);
101c6038928Smillert void		 printqueue(void);
102c6038928Smillert void		 clearqueue(void);
103fe07e37bSderaadt 
104fe07e37bSderaadt /* mmfile.c */
105fe07e37bSderaadt typedef struct mmfile {
106fe07e37bSderaadt 	int	 fd;
107fe07e37bSderaadt 	size_t	 len;
108fe07e37bSderaadt 	char	*base, *end, *ptr;
109fe07e37bSderaadt } mmf_t;
110fe07e37bSderaadt 
1113a21e479Stedu mmf_t		*mmopen(int fd, struct stat *sb);
112fe07e37bSderaadt void		 mmclose(mmf_t *mmf);
113fe07e37bSderaadt char		*mmfgetln(mmf_t *mmf, size_t *l);
114fe07e37bSderaadt 
115fe07e37bSderaadt /* file.c */
116fe07e37bSderaadt struct file;
117fe07e37bSderaadt typedef struct file file_t;
118fe07e37bSderaadt 
1193a21e479Stedu file_t		*grep_fdopen(int fd);
1203a21e479Stedu file_t		*grep_open(char *path);
121fe07e37bSderaadt int		 grep_bin_file(file_t *f);
122fe07e37bSderaadt char		*grep_fgetln(file_t *f, size_t *l);
123fe07e37bSderaadt void		 grep_close(file_t *f);
124fe07e37bSderaadt 
125fe07e37bSderaadt /* binary.c */
126fe07e37bSderaadt int		 bin_file(FILE * f);
12719739ec8Smillert int		 gzbin_file(gzFile f);
128fe07e37bSderaadt int		 mmbin_file(mmf_t *f);
129fe07e37bSderaadt 
130