diff options
| author | Carlos Martín Nieto <carlos@cmartin.tk> | 2011-09-04 21:28:11 +0200 |
|---|---|---|
| committer | Carlos Martín Nieto <carlos@cmartin.tk> | 2011-09-09 13:12:11 +0200 |
| commit | b76f7522790992f0c54a1d68c761cb1fdba24412 (patch) | |
| tree | b7869598795ee35901a8ba1b3a88057683f66f7b | |
| parent | c7c3051328f605255c485cc49f58d16c7556d8f2 (diff) | |
| download | libgit2-b76f7522790992f0c54a1d68c761cb1fdba24412.tar.gz | |
pkt: add the comment type
This is needed for smart HTTP
Signed-off-by: Carlos Martín Nieto <carlos@cmartin.tk>
| -rw-r--r-- | src/pkt.c | 19 | ||||
| -rw-r--r-- | src/pkt.h | 6 |
2 files changed, 25 insertions, 0 deletions
@@ -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); @@ -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); |
