Commit 8b9e8de5 by Carlos Martín Nieto

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>
parent b31803f3
......@@ -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);
......
......@@ -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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment