]> git.ipfire.org Git - thirdparty/git.git/commitdiff
strbuf: provide function to append whole lines
authorPatrick Steinhardt <ps@pks.im>
Mon, 30 Mar 2020 13:46:27 +0000 (15:46 +0200)
committerJunio C Hamano <gitster@pobox.com>
Mon, 30 Mar 2020 17:34:11 +0000 (10:34 -0700)
While the strbuf interface already provides functions to read a line
into it that completely replaces its current contents, we do not have an
interface that allows for appending lines without discarding current
contents.

Add a new function `strbuf_appendwholeline` that reads a line including
its terminating character into a strbuf non-destructively. This is a
preparatory step for git-update-ref(1) reading standard input line-wise
instead of as a block.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
strbuf.c
strbuf.h

index bb0065ccaf5b764323cd727dbabe3061bbe328e4..6e74901bfa63a5667c6c521315a8e7a6b39a9458 100644 (file)
--- a/strbuf.c
+++ b/strbuf.c
@@ -690,6 +690,16 @@ int strbuf_getwholeline(struct strbuf *sb, FILE *fp, int term)
 }
 #endif
 
+int strbuf_appendwholeline(struct strbuf *sb, FILE *fp, int term)
+{
+       struct strbuf line = STRBUF_INIT;
+       if (strbuf_getwholeline(&line, fp, term))
+               return EOF;
+       strbuf_addbuf(sb, &line);
+       strbuf_release(&line);
+       return 0;
+}
+
 static int strbuf_getdelim(struct strbuf *sb, FILE *fp, int term)
 {
        if (strbuf_getwholeline(sb, fp, term))
index ce8e49c0b2a1427fc9e28c9d0c5c3c6a8e5b66fc..411063ca76aa6203f6582be4e5ccc3d47ace2975 100644 (file)
--- a/strbuf.h
+++ b/strbuf.h
@@ -502,6 +502,12 @@ int strbuf_getline(struct strbuf *sb, FILE *file);
  */
 int strbuf_getwholeline(struct strbuf *sb, FILE *file, int term);
 
+/**
+ * Like `strbuf_getwholeline`, but appends the line instead of
+ * resetting the buffer first.
+ */
+int strbuf_appendwholeline(struct strbuf *sb, FILE *file, int term);
+
 /**
  * Like `strbuf_getwholeline`, but operates on a file descriptor.
  * It reads one character at a time, so it is very slow.  Do not