http: simplify update_url_from_redirect
authorJeff King <peff@peff.net>
Tue, 6 Dec 2016 18:24:29 +0000 (13:24 -0500)
committerJunio C Hamano <gitster@pobox.com>
Tue, 6 Dec 2016 20:32:48 +0000 (12:32 -0800)
This function looks for a common tail between what we asked
for and where we were redirected to, but it open-codes the
comparison. We can avoid some confusing subtractions by
using strip_suffix_mem().

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
http.c
diff --git a/http.c b/http.c
index d8e427b69b43a8cc0607893e59891fc8a4356f51..d4034a14ba004c221ad95f3b8e9a225e850d62ea 100644 (file)
--- a/http.c
+++ b/http.c
@@ -1500,7 +1500,7 @@ static int update_url_from_redirect(struct strbuf *base,
                                    const struct strbuf *got)
 {
        const char *tail;
-       size_t tail_len;
+       size_t new_len;
 
        if (!strcmp(asked, got->buf))
                return 0;
@@ -1509,14 +1509,12 @@ static int update_url_from_redirect(struct strbuf *base,
                die("BUG: update_url_from_redirect: %s is not a superset of %s",
                    asked, base->buf);
 
-       tail_len = strlen(tail);
-
-       if (got->len < tail_len ||
-           strcmp(tail, got->buf + got->len - tail_len))
+       new_len = got->len;
+       if (!strip_suffix_mem(got->buf, &new_len, tail))
                return 0; /* insane redirect scheme */
 
        strbuf_reset(base);
-       strbuf_add(base, got->buf, got->len - tail_len);
+       strbuf_add(base, got->buf, new_len);
        return 1;
 }