Annotation of src/usr.bin/grep/binary.c, Revision 1.13
1.13 ! deraadt 1: /* $OpenBSD: binary.c,v 1.12 2004/05/06 20:18:51 otto Exp $ */
1.4 deraadt 2:
1.1 deraadt 3: /*-
4: * Copyright (c) 1999 James Howard and Dag-Erling Coïdan Smørgrav
5: * All rights reserved.
6: *
7: * Redistribution and use in source and binary forms, with or without
8: * modification, are permitted provided that the following conditions
9: * are met:
10: * 1. Redistributions of source code must retain the above copyright
11: * notice, this list of conditions and the following disclaimer.
12: * 2. Redistributions in binary form must reproduce the above copyright
13: * notice, this list of conditions and the following disclaimer in the
14: * documentation and/or other materials provided with the distribution.
15: *
16: * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19: * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26: * SUCH DAMAGE.
27: */
28:
29: #include <ctype.h>
30: #include <stdio.h>
31: #include <zlib.h>
32:
33: #include "grep.h"
34:
1.11 millert 35: #define isbinary(ch) (!isprint((ch)) && !isspace((ch)) && (ch) != '\b')
36:
1.1 deraadt 37: int
38: bin_file(FILE *f)
39: {
1.8 tedu 40: char buf[BUFSIZ];
1.1 deraadt 41: int i, m;
1.10 canacar 42: int ret = 0;
1.1 deraadt 43:
1.12 otto 44: if (isatty(fileno(f)) || fseek(f, 0L, SEEK_SET) == -1)
1.1 deraadt 45: return 0;
46:
1.8 tedu 47: if ((m = (int)fread(buf, 1, BUFSIZ, f)) == 0)
1.1 deraadt 48: return 0;
49:
50: for (i = 0; i < m; i++)
1.11 millert 51: if (isbinary(buf[i])) {
1.10 canacar 52: ret = 1;
53: break;
54: }
1.1 deraadt 55:
56: rewind(f);
1.10 canacar 57: return ret;
1.1 deraadt 58: }
59:
1.3 deraadt 60: #ifndef NOZ
1.1 deraadt 61: int
62: gzbin_file(gzFile *f)
63: {
1.8 tedu 64: char buf[BUFSIZ];
1.1 deraadt 65: int i, m;
1.10 canacar 66: int ret = 0;
1.1 deraadt 67:
1.13 ! deraadt 68: if (gzseek(f, (z_off_t)0, SEEK_SET) == -1)
1.1 deraadt 69: return 0;
70:
1.8 tedu 71: if ((m = gzread(f, buf, BUFSIZ)) == 0)
1.1 deraadt 72: return 0;
73:
74: for (i = 0; i < m; i++)
1.11 millert 75: if (isbinary(buf[i])) {
1.10 canacar 76: ret = 1;
77: break;
78: }
1.1 deraadt 79:
80: gzrewind(f);
1.10 canacar 81: return ret;
1.1 deraadt 82: }
1.3 deraadt 83: #endif
1.1 deraadt 84:
85: int
86: mmbin_file(mmf_t *f)
87: {
88: int i;
1.3 deraadt 89:
1.1 deraadt 90: /* XXX knows too much about mmf internals */
1.8 tedu 91: for (i = 0; i < BUFSIZ && i < f->len; i++)
1.11 millert 92: if (isbinary(f->base[i]))
1.1 deraadt 93: return 1;
94: return 0;
95: }