aboutsummaryrefslogtreecommitdiff
path: root/send-pack.c
diff options
context:
space:
mode:
authorJeff King <peff@peff.net>2013-02-20 15:00:43 -0500
committerJunio C Hamano <gitster@pobox.com>2013-02-20 13:42:21 -0800
commit8f9e3e498c113e987c2b8662485db5461cad1c36 (patch)
tree5932cc91d04696f1986fe68b2684adc28f3fb4d6 /send-pack.c
parent030e9dd64f931c0ccfb6ad4be88775f8272f02eb (diff)
downloadgit-8f9e3e498c113e987c2b8662485db5461cad1c36.tar.gz
git-8f9e3e498c113e987c2b8662485db5461cad1c36.tar.xz
send-pack: prefer prefixcmp over memcmp in receive_status
This code predates prefixcmp, so it used memcmp along with static sizes. Replacing these memcmps with prefixcmp makes the code much more readable, and the lack of static sizes will make refactoring it in future patches simpler. Note that we used to be unnecessarily liberal in parsing the "unpack" status line, and would accept "unpack ok\njunk". No version of git has ever produced that, and it violates the BNF in Documentation/technical/pack-protocol.txt. Let's take this opportunity to tighten the check by converting the prefix comparison into a strcmp. While we're in the area, let's also fix a vague error message that does not follow our usual conventions (it writes directly to stderr and does not use the "error:" prefix). Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'send-pack.c')
-rw-r--r--send-pack.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/send-pack.c b/send-pack.c
index 97ab33609..e91cbe2c9 100644
--- a/send-pack.c
+++ b/send-pack.c
@@ -109,9 +109,9 @@ static int receive_status(int in, struct ref *refs)
char line[1000];
int ret = 0;
int len = packet_read_line(in, line, sizeof(line));
- if (len < 10 || memcmp(line, "unpack ", 7))
+ if (prefixcmp(line, "unpack "))
return error("did not receive remote status");
- if (memcmp(line, "unpack ok\n", 10)) {
+ if (strcmp(line, "unpack ok\n")) {
char *p = line + strlen(line) - 1;
if (*p == '\n')
*p = '\0';
@@ -125,9 +125,8 @@ static int receive_status(int in, struct ref *refs)
len = packet_read_line(in, line, sizeof(line));
if (!len)
break;
- if (len < 3 ||
- (memcmp(line, "ok ", 3) && memcmp(line, "ng ", 3))) {
- fprintf(stderr, "protocol error: %s\n", line);
+ if (prefixcmp(line, "ok ") && prefixcmp(line, "ng ")) {
+ error("invalid ref status from remote: %s", line);
ret = -1;
break;
}