summaryrefslogtreecommitdiff
path: root/builtin-grep.c
diff options
context:
space:
mode:
Diffstat (limited to 'builtin-grep.c')
-rw-r--r--builtin-grep.c25
1 files changed, 15 insertions, 10 deletions
diff --git a/builtin-grep.c b/builtin-grep.c
index 2bfbdb7140..694da5ba09 100644
--- a/builtin-grep.c
+++ b/builtin-grep.c
@@ -84,11 +84,11 @@ static int grep_sha1(struct grep_opt *opt, const unsigned char *sha1, const char
{
unsigned long size;
char *data;
- char type[20];
+ enum object_type type;
char *to_free = NULL;
int hit;
- data = read_sha1_file(sha1, type, &size);
+ data = read_sha1_file(sha1, &type, &size);
if (!data) {
error("'%s': unable to read %s", name, sha1_to_hex(sha1));
return 0;
@@ -122,6 +122,8 @@ static int grep_file(struct grep_opt *opt, const char *filename)
struct stat st;
int i;
char *data;
+ size_t sz;
+
if (lstat(filename, &st) < 0) {
err_ret:
if (errno != ENOENT)
@@ -132,11 +134,12 @@ static int grep_file(struct grep_opt *opt, const char *filename)
return 0; /* empty file -- no grep hit */
if (!S_ISREG(st.st_mode))
return 0;
+ sz = xsize_t(st.st_size);
i = open(filename, O_RDONLY);
if (i < 0)
goto err_ret;
- data = xmalloc(st.st_size + 1);
- if (st.st_size != read_in_full(i, data, st.st_size)) {
+ data = xmalloc(sz + 1);
+ if (st.st_size != read_in_full(i, data, sz)) {
error("'%s': short read %s", filename, strerror(errno));
close(i);
free(data);
@@ -145,11 +148,12 @@ static int grep_file(struct grep_opt *opt, const char *filename)
close(i);
if (opt->relative && opt->prefix_length)
filename += opt->prefix_length;
- i = grep_buffer(opt, filename, data, st.st_size);
+ i = grep_buffer(opt, filename, data, sz);
free(data);
return i;
}
+#ifdef __unix__
static int exec_grep(int argc, const char **argv)
{
pid_t pid;
@@ -298,6 +302,7 @@ static int external_grep(struct grep_opt *opt, const char **paths, int cached)
}
return hit;
}
+#endif
static int grep_cache(struct grep_opt *opt, const char **paths, int cached)
{
@@ -380,10 +385,10 @@ static int grep_tree(struct grep_opt *opt, const char **paths,
else if (S_ISREG(entry.mode))
hit |= grep_sha1(opt, entry.sha1, path_buf, tn_len);
else if (S_ISDIR(entry.mode)) {
- char type[20];
+ enum object_type type;
struct tree_desc sub;
void *data;
- data = read_sha1_file(entry.sha1, type, &sub.size);
+ data = read_sha1_file(entry.sha1, &type, &sub.size);
if (!data)
die("unable to read tree (%s)",
sha1_to_hex(entry.sha1));
@@ -527,9 +532,9 @@ int cmd_grep(int argc, const char **argv, const char *prefix)
opt.word_regexp = 1;
continue;
}
- if (!strncmp("-A", arg, 2) ||
- !strncmp("-B", arg, 2) ||
- !strncmp("-C", arg, 2) ||
+ if (!prefixcmp(arg, "-A") ||
+ !prefixcmp(arg, "-B") ||
+ !prefixcmp(arg, "-C") ||
(arg[0] == '-' && '1' <= arg[1] && arg[1] <= '9')) {
unsigned num;
const char *scan;