projects
/
git.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Some more memory leak avoidance
[git.git]
/
builtin-grep.c
diff --git
a/builtin-grep.c
b/builtin-grep.c
index
53de8a8
..
9806499
100644
(file)
--- a/
builtin-grep.c
+++ b/
builtin-grep.c
@@
-459,6
+459,8
@@
static int external_grep(struct grep_opt *opt, const char **paths, int cached)
push_arg("-n");
if (opt->regflags & REG_EXTENDED)
push_arg("-E");
push_arg("-n");
if (opt->regflags & REG_EXTENDED)
push_arg("-E");
+ if (opt->regflags & REG_ICASE)
+ push_arg("-i");
if (opt->word_regexp)
push_arg("-w");
if (opt->name_only)
if (opt->word_regexp)
push_arg("-w");
if (opt->name_only)
@@
-578,11
+580,9
@@
static int grep_tree(struct grep_opt *opt, const char **paths,
struct tree_desc *tree,
const char *tree_name, const char *base)
{
struct tree_desc *tree,
const char *tree_name, const char *base)
{
- unsigned mode;
int len;
int hit = 0;
int len;
int hit = 0;
- const char *path;
- const unsigned char *sha1;
+ struct name_entry entry;
char *down;
char *path_buf = xmalloc(PATH_MAX + strlen(tree_name) + 100);
char *down;
char *path_buf = xmalloc(PATH_MAX + strlen(tree_name) + 100);
@@
-597,36
+597,32
@@
static int grep_tree(struct grep_opt *opt, const char **paths,
}
len = strlen(path_buf);
}
len = strlen(path_buf);
- while (tree->size) {
- int pathlen;
- sha1 = tree_entry_extract(tree, &path, &mode);
- pathlen = strlen(path);
- strcpy(path_buf + len, path);
+ while (tree_entry(tree, &entry)) {
+ strcpy(path_buf + len, entry.path);
- if (S_ISDIR(mode))
+ if (S_ISDIR(
entry.
mode))
/* Match "abc/" against pathspec to
* decide if we want to descend into "abc"
* directory.
*/
/* Match "abc/" against pathspec to
* decide if we want to descend into "abc"
* directory.
*/
- strcpy(path_buf + len + pathlen, "/");
+ strcpy(path_buf + len +
entry.
pathlen, "/");
if (!pathspec_matches(paths, down))
;
if (!pathspec_matches(paths, down))
;
- else if (S_ISREG(mode))
- hit |= grep_sha1(opt, sha1, path_buf);
- else if (S_ISDIR(mode)) {
+ else if (S_ISREG(
entry.
mode))
+ hit |= grep_sha1(opt,
entry.
sha1, path_buf);
+ else if (S_ISDIR(
entry.
mode)) {
char type[20];
struct tree_desc sub;
void *data;
char type[20];
struct tree_desc sub;
void *data;
- data = read_sha1_file(sha1, type, &sub.size);
+ data = read_sha1_file(
entry.
sha1, type, &sub.size);
if (!data)
die("unable to read tree (%s)",
if (!data)
die("unable to read tree (%s)",
- sha1_to_hex(sha1));
+ sha1_to_hex(
entry.
sha1));
sub.buf = data;
hit |= grep_tree(opt, paths, &sub, tree_name, down);
free(data);
}
sub.buf = data;
hit |= grep_tree(opt, paths, &sub, tree_name, down);
free(data);
}
- update_tree_entry(tree);
}
return hit;
}
}
return hit;
}
@@
-634,10
+630,9
@@
static int grep_tree(struct grep_opt *opt, const char **paths,
static int grep_object(struct grep_opt *opt, const char **paths,
struct object *obj, const char *name)
{
static int grep_object(struct grep_opt *opt, const char **paths,
struct object *obj, const char *name)
{
- if (
!strcmp(obj->type, blob_type)
)
+ if (
obj->type == TYPE_BLOB
)
return grep_sha1(opt, obj->sha1, name);
return grep_sha1(opt, obj->sha1, name);
- if (!strcmp(obj->type, commit_type) ||
- !strcmp(obj->type, tree_type)) {
+ if (obj->type == TYPE_COMMIT || obj->type == TYPE_TREE) {
struct tree_desc tree;
void *data;
int hit;
struct tree_desc tree;
void *data;
int hit;
@@
-650,7
+645,7
@@
static int grep_object(struct grep_opt *opt, const char **paths,
free(data);
return hit;
}
free(data);
return hit;
}
- die("unable to grep from object of type %s",
obj->type
);
+ die("unable to grep from object of type %s",
typename(obj->type)
);
}
static const char builtin_grep_usage[] =
}
static const char builtin_grep_usage[] =