diff options
| author | Carlos Martín Nieto <carlos@cmartin.tk> | 2011-06-08 10:51:32 +0200 |
|---|---|---|
| committer | Carlos Martín Nieto <carlos@cmartin.tk> | 2011-06-26 18:18:12 +0200 |
| commit | 8b9e8de5ce2fa4da75bf5b27a73f6d74140c6eaf (patch) | |
| tree | 5437d3ffcdabd316f2098d46f49ad1e7759f11b4 | |
| parent | b31803f3106f657a6cc6b8c4fd69e017edad2af8 (diff) | |
| download | libgit2-8b9e8de5ce2fa4da75bf5b27a73f6d74140c6eaf.tar.gz | |
pkt-line: read capabilities
Try to read the server capabilities and add them to the git_pkt_ref
struct.
Signed-off-by: Carlos Martín Nieto <carlos@cmartin.tk>
| -rw-r--r-- | include/git2/pkt.h | 1 | ||||
| -rw-r--r-- | src/pkt.c | 21 | ||||
| -rw-r--r-- | src/util.h | 3 |
3 files changed, 24 insertions, 1 deletions
diff --git a/include/git2/pkt.h b/include/git2/pkt.h index 680dcc618..0b933abff 100644 --- a/include/git2/pkt.h +++ b/include/git2/pkt.h @@ -48,4 +48,5 @@ struct git_pkt_cmd { struct git_pkt_ref { enum git_pkt_type type; git_remote_head head; + char *capabilities; }; @@ -57,6 +57,7 @@ int ref_pkt(git_pkt **out, const char *line, size_t len) if (pkt == NULL) return GIT_ENOMEM; + memset(pkt, 0x0, sizeof(git_pkt_ref)); pkt->type = GIT_PKT_REF; error = git_oid_fromstr(&pkt->head.oid, line); if (error < GIT_SUCCESS) { @@ -70,9 +71,11 @@ int ref_pkt(git_pkt **out, const char *line, size_t len) goto out; } + /* Jump from the name */ line += GIT_OID_HEXSZ + 1; + len -= (GIT_OID_HEXSZ + 1); - name_len = len - (GIT_OID_HEXSZ + 1); + name_len = min(strlen(line), len); if (line[name_len - 1] == '\n') --name_len; @@ -82,6 +85,22 @@ int ref_pkt(git_pkt **out, const char *line, size_t len) goto out; } + /* Try to get the capabilities */ + line += name_len + 1; /* + \0 */ + len -= (name_len + 1); + if (line[len - 1] == '\n') + --len; + + if (len > 0) { /* capatilities */ + pkt->capabilities = git__malloc(len); + if (pkt->capabilities == NULL) { + error = GIT_ENOMEM; + goto out; + } + + memcpy(pkt->capabilities, line, len); + } + out: if (error < GIT_SUCCESS) free(pkt); diff --git a/src/util.h b/src/util.h index 0b423ac08..fdc6b85f1 100644 --- a/src/util.h +++ b/src/util.h @@ -4,6 +4,9 @@ #define ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0])) #define bitsizeof(x) (CHAR_BIT * sizeof(x)) #define MSB(x, bits) ((x) & (~0ULL << (bitsizeof(x) - (bits)))) +#ifndef min +# define min(a,b) ((a) < (b) ? (a) : (b)) +#endif /* * Custom memory allocation wrappers |
