diff options
Diffstat (limited to 'pkt-line.h')
-rw-r--r-- | pkt-line.h | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/pkt-line.h b/pkt-line.h index 3b6c19c4e4..8cd326c922 100644 --- a/pkt-line.h +++ b/pkt-line.h @@ -24,8 +24,33 @@ void packet_write(int fd, const char *fmt, ...) __attribute__((format (printf, 2 void packet_buf_flush(struct strbuf *buf); void packet_buf_write(struct strbuf *buf, const char *fmt, ...) __attribute__((format (printf, 2, 3))); +/* + * Read a packetized line from the descriptor into the buffer, which must be at + * least size bytes long. The return value specifies the number of bytes read + * into the buffer. + * + * If options does not contain PACKET_READ_GENTLE_ON_EOF, we will die under any + * of the following conditions: + * + * 1. Read error from descriptor. + * + * 2. Protocol error from the remote (e.g., bogus length characters). + * + * 3. Receiving a packet larger than "size" bytes. + * + * 4. Truncated output from the remote (e.g., we expected a packet but got + * EOF, or we got a partial packet followed by EOF). + * + * If options does contain PACKET_READ_GENTLE_ON_EOF, we will not die on + * condition 4 (truncated input), but instead return -1. However, we will still + * die for the other 3 conditions. + */ +#define PACKET_READ_GENTLE_ON_EOF (1u<<0) +int packet_read(int fd, char *buffer, unsigned size, int options); + +/* Historical convenience wrapper for packet_read that sets no options */ int packet_read_line(int fd, char *buffer, unsigned size); -int packet_read(int fd, char *buffer, unsigned size); + int packet_get_line(struct strbuf *out, char **src_buf, size_t *src_len); #endif |