Add function which can be used to read the contents of a single pkt-line
into a strbuf.

Signed-off-by: Brandon Williams <bmw...@google.com>
---
 pkt-line.c | 21 +++++++++++++++++++++
 pkt-line.h |  1 +
 2 files changed, 22 insertions(+)

diff --git a/pkt-line.c b/pkt-line.c
index cf98f371b..875524ab8 100644
--- a/pkt-line.c
+++ b/pkt-line.c
@@ -312,6 +312,27 @@ int packet_read(int fd, char **src_buf, size_t *src_len,
        return len;
 }
 
+int strbuf_packet_read(int fd_in, struct strbuf *sb_out, int options)
+{
+       int packet_len;
+       strbuf_grow(sb_out, LARGE_PACKET_DATA_MAX);
+       packet_len = packet_read(fd_in, NULL, NULL,
+                                /*
+                                 * strbuf_grow() above always allocates one 
extra byte to
+                                 * store a '\0' at the end of the string. 
packet_read()
+                                 * writes a '\0' extra byte at the end, too. 
Let it know
+                                 * that there is already room for the extra 
byte.
+                                 */
+                                sb_out->buf, LARGE_PACKET_DATA_MAX+1,
+                                options);
+       if (packet_len < 0)
+               return packet_len;
+
+       sb_out->len = packet_len;
+
+       return sb_out->len;
+}
+
 static char *packet_read_line_generic(int fd,
                                      char **src, size_t *src_len,
                                      int *dst_len)
diff --git a/pkt-line.h b/pkt-line.h
index d9e9783b1..c24c4f290 100644
--- a/pkt-line.h
+++ b/pkt-line.h
@@ -65,6 +65,7 @@ int write_packetized_from_buf(const char *src_in, size_t len, 
int fd_out);
 int packet_read(int fd, char **src_buffer, size_t *src_len, char
                *buffer, unsigned size, int options);
 
+int strbuf_packet_read(int fd_in, struct strbuf *sb_out, int options);
 /*
  * Convenience wrapper for packet_read that is not gentle, and sets the
  * CHOMP_NEWLINE option. The return value is NULL for a flush packet,
-- 
2.14.1.342.g6490525c54-goog

Reply via email to