From: Junio C Hamano Date: Fri, 20 Nov 2009 11:25:13 GMT Subject: [PATCH 1/3] read_revision_from_stdin(): use strbuf Message-ID: <1258716315-2213-2-git-send-email-gitster@pobox.com> In-Reply-To: <1258716315-2213-1-git-send-email-gitster@pobox.com> It is so 2005 (and Linus ;-) to have a fixed 1000-byte buffer that reads from the user. Let's use strbuf to unlimit the input length. Signed-off-by: Junio C Hamano --- revision.c | 18 ++++++++++-------- 1 files changed, 10 insertions(+), 8 deletions(-) diff --git a/revision.c b/revision.c index 45c5de8..f5b735f 100644 --- a/revision.c +++ b/revision.c @@ -955,19 +955,21 @@ int handle_revision_arg(const char *arg, struct rev_info *revs, static void read_revisions_from_stdin(struct rev_info *revs) { - char line[1000]; + struct strbuf sb; - while (fgets(line, sizeof(line), stdin) != NULL) { - int len = strlen(line); - if (len && line[len - 1] == '\n') - line[--len] = '\0'; + strbuf_init(&sb, 1000); + while (strbuf_getwholeline(&sb, stdin, '\n') != EOF) { + int len = sb.len; + if (len && sb.buf[len - 1] == '\n') + sb.buf[--len] = '\0'; if (!len) break; - if (line[0] == '-') + if (sb.buf[0] == '-') die("options not supported in --stdin mode"); - if (handle_revision_arg(line, revs, 0, 1)) - die("bad revision '%s'", line); + if (handle_revision_arg(sb.buf, revs, 0, 1)) + die("bad revision '%s'", sb.buf); } + strbuf_release(&sb); } static void add_grep(struct rev_info *revs, const char *ptn, enum grep_pat_token what) -- 1.6.5.3.342.g14bb9