Annotation of src/usr.bin/grep/binary.c, Revision 1.14
1.14 ! otto 1: /* $OpenBSD: binary.c,v 1.13 2004/09/15 22:35:36 deraadt 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>
1.14 ! otto 30: #include <err.h>
1.1 deraadt 31: #include <stdio.h>
32: #include <zlib.h>
33:
34: #include "grep.h"
35:
1.11 millert 36: #define isbinary(ch) (!isprint((ch)) && !isspace((ch)) && (ch) != '\b')
37:
1.1 deraadt 38: int
39: bin_file(FILE *f)
40: {
1.8 tedu 41: char buf[BUFSIZ];
1.1 deraadt 42: int i, m;
1.10 canacar 43: int ret = 0;
1.1 deraadt 44:
1.14 ! otto 45: if (fseek(f, 0L, SEEK_SET) == -1)
1.1 deraadt 46: return 0;
47:
1.8 tedu 48: if ((m = (int)fread(buf, 1, BUFSIZ, f)) == 0)
1.1 deraadt 49: return 0;
50:
51: for (i = 0; i < m; i++)
1.11 millert 52: if (isbinary(buf[i])) {
1.10 canacar 53: ret = 1;
54: break;
55: }
1.1 deraadt 56:
57: rewind(f);
1.10 canacar 58: return ret;
1.1 deraadt 59: }
60:
1.3 deraadt 61: #ifndef NOZ
1.1 deraadt 62: int
63: gzbin_file(gzFile *f)
64: {
1.8 tedu 65: char buf[BUFSIZ];
1.1 deraadt 66: int i, m;
1.10 canacar 67: int ret = 0;
1.1 deraadt 68:
1.13 deraadt 69: if (gzseek(f, (z_off_t)0, SEEK_SET) == -1)
1.1 deraadt 70: return 0;
71:
1.8 tedu 72: if ((m = gzread(f, buf, BUFSIZ)) == 0)
1.1 deraadt 73: return 0;
74:
75: for (i = 0; i < m; i++)
1.11 millert 76: if (isbinary(buf[i])) {
1.10 canacar 77: ret = 1;
78: break;
79: }
1.1 deraadt 80:
1.14 ! otto 81: if (gzrewind(f) != 0)
! 82: err(1, "gzbin_file");
1.10 canacar 83: return ret;
1.1 deraadt 84: }
1.3 deraadt 85: #endif
1.1 deraadt 86:
87: int
88: mmbin_file(mmf_t *f)
89: {
90: int i;
1.3 deraadt 91:
1.1 deraadt 92: /* XXX knows too much about mmf internals */
1.8 tedu 93: for (i = 0; i < BUFSIZ && i < f->len; i++)
1.11 millert 94: if (isbinary(f->base[i]))
1.1 deraadt 95: return 1;
96: return 0;
97: }