Commit b76f7522790992f0c54a1d68c761cb1fdba24412

Carlos Martín Nieto 2011-09-04T21:28:11

pkt: add the comment type This is needed for smart HTTP Signed-off-by: Carlos Martín Nieto <carlos@cmartin.tk>

diff --git a/src/pkt.c b/src/pkt.c
index f97246a..48daeaf 100644
--- a/src/pkt.c
+++ b/src/pkt.c
@@ -98,6 +98,23 @@ static int pack_pkt(git_pkt **out)
 	return GIT_SUCCESS;
 }
 
+static int comment_pkt(git_pkt **out, const char *line, size_t len)
+{
+	git_pkt_comment *pkt;
+
+	pkt = git__malloc(sizeof(git_pkt_comment) + len + 1);
+	if  (pkt == NULL)
+		return GIT_ENOMEM;
+
+	pkt->type = GIT_PKT_COMMENT;
+	memcpy(pkt->comment, line, len);
+	pkt->comment[len] = '\0';
+
+	*out = (git_pkt *) pkt;
+
+	return GIT_SUCCESS;
+}
+
 /*
  * Parse an other-ref line.
  */
@@ -242,6 +259,8 @@ int git_pkt_parse_line(git_pkt **head, const char *line, const char **out, size_
 		error = ack_pkt(head, line, len);
 	else if (!git__prefixcmp(line, "NAK"))
 		error = nak_pkt(head);
+	else if (*line == '#')
+		error = comment_pkt(head, line, len);
 	else
 		error = ref_pkt(head, line, len);
 
diff --git a/src/pkt.h b/src/pkt.h
index 1c6a206..cee3ceb 100644
--- a/src/pkt.h
+++ b/src/pkt.h
@@ -38,6 +38,7 @@ enum git_pkt_type {
 	GIT_PKT_ACK,
 	GIT_PKT_NAK,
 	GIT_PKT_PACK,
+	GIT_PKT_COMMENT,
 };
 
 /* Used for multi-ack */
@@ -74,6 +75,11 @@ typedef struct {
 	enum git_ack_status status;
 } git_pkt_ack;
 
+typedef struct {
+	enum git_pkt_type type;
+	char comment[GIT_FLEX_ARRAY];
+} git_pkt_comment;
+
 int git_pkt_parse_line(git_pkt **head, const char *line, const char **out, size_t len);
 int git_pkt_send_flush(int s);
 int git_pkt_send_done(int s);