summaryrefslogtreecommitdiff
path: root/pkt-line.h
diff options
context:
space:
mode:
authorBrandon Williams <bmwill@google.com>2018-03-14 18:31:38 (GMT)
committerJunio C Hamano <gitster@pobox.com>2018-03-14 21:15:05 (GMT)
commit2153d478b74cfef58ee49ee0305cccf5e8a77b4f (patch)
treeb389bd313f1de7152effc87cb4573999094eb253 /pkt-line.h
parent1eaabe34fc6f486367a176207420378f587d3b48 (diff)
downloadgit-2153d478b74cfef58ee49ee0305cccf5e8a77b4f.zip
git-2153d478b74cfef58ee49ee0305cccf5e8a77b4f.tar.gz
git-2153d478b74cfef58ee49ee0305cccf5e8a77b4f.tar.bz2
pkt-line: introduce packet_read_with_status
The current pkt-line API encodes the status of a pkt-line read in the length of the read content. An error is indicated with '-1', a flush with '0' (which can be confusing since a return value of '0' can also indicate an empty pkt-line), and a positive integer for the length of the read content otherwise. This doesn't leave much room for allowing the addition of additional special packets in the future. To solve this introduce 'packet_read_with_status()' which reads a packet and returns the status of the read encoded as an 'enum packet_status' type. This allows for easily identifying between special and normal packets as well as errors. It also enables easily adding a new special packet in the future. Signed-off-by: Brandon Williams <bmwill@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'pkt-line.h')
-rw-r--r--pkt-line.h16
1 files changed, 16 insertions, 0 deletions
diff --git a/pkt-line.h b/pkt-line.h
index 3dad583..099b26b 100644
--- a/pkt-line.h
+++ b/pkt-line.h
@@ -66,6 +66,22 @@ int packet_read(int fd, char **src_buffer, size_t *src_len, char
*buffer, unsigned size, int options);
/*
+ * Read a packetized line into a buffer like the 'packet_read()' function but
+ * returns an 'enum packet_read_status' which indicates the status of the read.
+ * The number of bytes read will be assigined to *pktlen if the status of the
+ * read was 'PACKET_READ_NORMAL'.
+ */
+enum packet_read_status {
+ PACKET_READ_EOF,
+ PACKET_READ_NORMAL,
+ PACKET_READ_FLUSH,
+};
+enum packet_read_status packet_read_with_status(int fd, char **src_buffer,
+ size_t *src_len, char *buffer,
+ unsigned size, int *pktlen,
+ 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,
* and otherwise points to a static buffer (that may be overwritten by