remote.c: hoist read_config into remote_get_1
[gitweb.git] / http-walker.c
index 1516c5eb290746bad4551515fda7930d2f55d32b..88da5468e77f5a543edb7583e2846f19eb509653 100644 (file)
@@ -230,7 +230,6 @@ static void process_alternates_response(void *callback_data)
                        int okay = 0;
                        int serverlen = 0;
                        struct alt_base *newalt;
-                       char *target = NULL;
                        if (data[i] == '/') {
                                /*
                                 * This counts
@@ -287,17 +286,15 @@ static void process_alternates_response(void *callback_data)
                        }
                        /* skip "objects\n" at end */
                        if (okay) {
-                               target = xmalloc(serverlen + posn - i - 6);
-                               memcpy(target, base, serverlen);
-                               memcpy(target + serverlen, data + i,
-                                      posn - i - 7);
-                               target[serverlen + posn - i - 7] = 0;
+                               struct strbuf target = STRBUF_INIT;
+                               strbuf_add(&target, base, serverlen);
+                               strbuf_add(&target, data + i, posn - i - 7);
                                if (walker->get_verbosely)
-                                       fprintf(stderr,
-                                               "Also look at %s\n", target);
+                                       fprintf(stderr, "Also look at %s\n",
+                                               target.buf);
                                newalt = xmalloc(sizeof(*newalt));
                                newalt->next = NULL;
-                               newalt->base = target;
+                               newalt->base = strbuf_detach(&target, NULL);
                                newalt->got_indices = 0;
                                newalt->packs = NULL;
 
@@ -341,8 +338,7 @@ static void fetch_alternates(struct walker *walker, const char *base)
        if (walker->get_verbosely)
                fprintf(stderr, "Getting alternates list for %s\n", base);
 
-       url = xmalloc(strlen(base) + 31);
-       sprintf(url, "%s/objects/info/http-alternates", base);
+       url = xstrfmt("%s/objects/info/http-alternates", base);
 
        /*
         * Use a callback to process the result, since another request
@@ -566,8 +562,7 @@ struct walker *get_http_walker(const char *url)
        struct walker *walker = xmalloc(sizeof(struct walker));
 
        data->alt = xmalloc(sizeof(*data->alt));
-       data->alt->base = xmalloc(strlen(url) + 1);
-       strcpy(data->alt->base, url);
+       data->alt->base = xstrdup(url);
        for (s = data->alt->base + strlen(data->alt->base) - 1; *s == '/'; --s)
                *s = 0;