[PATCH] grep: fix build with no thread support
From: Rahul Bedarkar <hidden>
Date: 2017-03-17 05:48:34
Subsystem:
the rest · Maintainer:
Linus Torvalds
Commit 0281e487fd91 ("grep: optionally recurse into submodules")
added functions grep_submodule() and grep_submodule_launch() which
uses "struct work_item" which is defined only when thread support
is available.
When building git with toolchain that don't have thread support, we
get following build errors:
CC builtin/hash-object.o
builtin/grep.c: In function 'grep_submodule_launch':
builtin/grep.c:596:34: error: dereferencing pointer to incomplete type 'struct work_item'
status = capture_command(&cp, &w->out, 0);
^
builtin/grep.c: In function 'grep_submodule':
builtin/grep.c:644:20: error: storage size of 'w' isn't known
struct work_item w;
^
make[2]: *** [builtin/grep.o] Error 1
make[2]: *** Waiting for unfinished jobs....
This commit fixes above build issue by using "struct grep_source" and
"struct strbuf" instead of "struct work_item" in grep_submodule() and
grep_submodule_launch() when thread support is not available.
This build failure is detected by Buildroot Autobuilder:
http://autobuild.buildroot.net/results/94b/94bce9a99a5ce9894a6918774ab75e23d12c1394/
Cc: Brandon Williams <redacted>
Fixes: 0281e487fd91 ("grep: optionally recurse into submodules")
Signed-off-by: Rahul Bedarkar <redacted>
---
This patch is tested by running t7814-grep-recurse-submodules.sh with
both with/without thread support builds.
builtin/grep.c | 30 ++++++++++++++++--------------
1 file changed, 16 insertions(+), 14 deletions(-)
diff --git a/builtin/grep.c b/builtin/grep.c
index 2c727ef..4373d79 100644
--- a/builtin/grep.c
+++ b/builtin/grep.c@@ -183,11 +183,13 @@ static void *run(void *arg) if (!w) break; - opt->output_priv = w; - if (w->source.type == GREP_SOURCE_SUBMODULE) + if (w->source.type == GREP_SOURCE_SUBMODULE) { + opt->output_priv = &w->out; hit |= grep_submodule_launch(opt, &w->source); - else + } else { + opt->output_priv = w; hit |= grep_source(opt, &w->source); + } grep_source_clear_data(&w->source); work_done(w); }
@@ -538,7 +540,7 @@ static int grep_submodule_launch(struct grep_opt *opt, int status, i; const char *end_of_base; const char *name; - struct work_item *w = opt->output_priv; + struct strbuf *w = opt->output_priv; end_of_base = strchr(gs->name, ':'); if (gs->identifier && end_of_base)
@@ -593,10 +595,10 @@ static int grep_submodule_launch(struct grep_opt *opt, * child process. A '0' indicates a hit, a '1' indicates no hit and * anything else is an error. */ - status = capture_command(&cp, &w->out, 0); + status = capture_command(&cp, w, 0); if (status && (status != 1)) { /* flush the buffer */ - write_or_die(1, w->out.buf, w->out.len); + write_or_die(1, w->buf, w->len); die("process for submodule '%s' failed with exit code: %d", gs->name, status); }
@@ -641,19 +643,19 @@ static int grep_submodule(struct grep_opt *opt, const unsigned char *sha1, } else #endif { - struct work_item w; + struct grep_source gs; int hit; + struct strbuf outbuf = STRBUF_INIT; - grep_source_init(&w.source, GREP_SOURCE_SUBMODULE, + grep_source_init(&gs, GREP_SOURCE_SUBMODULE, filename, path, sha1); - strbuf_init(&w.out, 0); - opt->output_priv = &w; - hit = grep_submodule_launch(opt, &w.source); + opt->output_priv = &outbuf; + hit = grep_submodule_launch(opt, &gs); - write_or_die(1, w.out.buf, w.out.len); + write_or_die(1, outbuf.buf, outbuf.len); - grep_source_clear(&w.source); - strbuf_release(&w.out); + grep_source_clear(&gs); + strbuf_release(&outbuf); return hit; } }
--
2.6.2