summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarlos Martín Nieto <carlos@cmartin.tk>2011-06-08 10:51:32 +0200
committerCarlos Martín Nieto <carlos@cmartin.tk>2011-06-26 18:18:12 +0200
commit8b9e8de5ce2fa4da75bf5b27a73f6d74140c6eaf (patch)
tree5437d3ffcdabd316f2098d46f49ad1e7759f11b4 /src
parentb31803f3106f657a6cc6b8c4fd69e017edad2af8 (diff)
downloadlibgit2-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>
Diffstat (limited to 'src')
-rw-r--r--src/pkt.c21
-rw-r--r--src/util.h3
2 files changed, 23 insertions, 1 deletions
diff --git a/src/pkt.c b/src/pkt.c
index a7562c455..612a43154 100644
--- a/src/pkt.c
+++ b/src/pkt.c
@@ -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