version 1.16, 2010/07/02 20:48:48 |
version 1.17, 2011/06/20 18:14:01 |
|
|
#include <ctype.h> |
#include <ctype.h> |
#include <err.h> |
#include <err.h> |
#include <stdio.h> |
#include <stdio.h> |
|
#include <string.h> |
#include <zlib.h> |
#include <zlib.h> |
|
|
#include "grep.h" |
#include "grep.h" |
|
|
#define isbinary(ch) (!isprint((ch)) && !isspace((ch)) && (ch) != '\b') |
int |
|
isbinary(const char *buf, size_t n) |
|
{ |
|
return (memchr(buf, '\0', n) != NULL); |
|
} |
|
|
int |
int |
bin_file(FILE *f) |
bin_file(FILE *f) |
{ |
{ |
char buf[BUFSIZ]; |
char buf[BUFSIZ]; |
size_t i, m; |
size_t m; |
int ret = 0; |
int ret = 0; |
|
|
if (fseek(f, 0L, SEEK_SET) == -1) |
if (fseek(f, 0L, SEEK_SET) == -1) |
|
|
if ((m = fread(buf, 1, BUFSIZ, f)) == 0) |
if ((m = fread(buf, 1, BUFSIZ, f)) == 0) |
return 0; |
return 0; |
|
|
for (i = 0; i < m; i++) |
if (isbinary(buf, m)) |
if (isbinary(buf[i])) { |
ret = 1; |
ret = 1; |
|
break; |
|
} |
|
|
|
rewind(f); |
rewind(f); |
return ret; |
return ret; |
|
|
gzbin_file(gzFile *f) |
gzbin_file(gzFile *f) |
{ |
{ |
char buf[BUFSIZ]; |
char buf[BUFSIZ]; |
int i, m; |
int m; |
int ret = 0; |
int ret = 0; |
|
|
if (gzseek(f, (z_off_t)0, SEEK_SET) == -1) |
if (gzseek(f, (z_off_t)0, SEEK_SET) == -1) |
|
|
if ((m = gzread(f, buf, BUFSIZ)) <= 0) |
if ((m = gzread(f, buf, BUFSIZ)) <= 0) |
return 0; |
return 0; |
|
|
for (i = 0; i < m; i++) |
if (isbinary(buf, m)) |
if (isbinary(buf[i])) { |
ret = 1; |
ret = 1; |
|
break; |
|
} |
|
|
|
if (gzrewind(f) != 0) |
if (gzrewind(f) != 0) |
err(1, "gzbin_file"); |
err(1, "gzbin_file"); |
|
|
int |
int |
mmbin_file(mmf_t *f) |
mmbin_file(mmf_t *f) |
{ |
{ |
int i; |
|
|
|
/* XXX knows too much about mmf internals */ |
/* XXX knows too much about mmf internals */ |
for (i = 0; i < BUFSIZ && i < f->len; i++) |
return isbinary(f->base, f->len < BUFSIZ ? f->len : BUFSIZ); |
if (isbinary(f->base[i])) |
|
return 1; |
|
return 0; |
|
} |
} |
#endif |
#endif |