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>
This commit is contained in:
Carlos Martín Nieto 2011-06-08 10:51:32 +02:00
parent b31803f310
commit 8b9e8de5ce
3 changed files with 24 additions and 1 deletions

View File

@ -48,4 +48,5 @@ struct git_pkt_cmd {
struct git_pkt_ref {
enum git_pkt_type type;
git_remote_head head;
char *capabilities;
};

View File

@ -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);

View File

@ -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