]> git.proxmox.com Git - libgit2.git/commitdiff
Use git_buf in the git request
authorCarlos Martín Nieto <carlos@cmartin.tk>
Fri, 30 Sep 2011 14:55:05 +0000 (16:55 +0200)
committerCarlos Martín Nieto <carlos@cmartin.tk>
Fri, 30 Sep 2011 22:41:08 +0000 (00:41 +0200)
This is clearer and sidesteps the issue of what the return value of
snprintf is on the particular OS we're running on.

Signed-off-by: Carlos Martín Nieto <carlos@cmartin.tk>
src/transport_git.c

index bcc612b43d4381c5ffa7651a70e298b1023d82a1..a1c54ca8356c8b1967d5274ac7f23130fd8b6d5c 100644 (file)
@@ -35,10 +35,11 @@ typedef struct {
  */
 static int gen_proto(char **out, int *outlen, const char *cmd, const char *url)
 {
-       char *delim, *repo, *ptr;
+       char *delim, *repo;
        char default_command[] = "git-upload-pack";
        char host[] = "host=";
        int len;
+       git_buf buf = GIT_BUF_INIT;
 
        delim = strchr(url, '/');
        if (delim == NULL)
@@ -53,17 +54,16 @@ static int gen_proto(char **out, int *outlen, const char *cmd, const char *url)
        if (cmd == NULL)
                cmd = default_command;
 
-       len = 4 + strlen(cmd) + 1 + strlen(repo) + 1 + strlen(host) + (delim - url) + 2;
+       len = 4 + strlen(cmd) + 1 + strlen(repo) + 1 + strlen(host) + (delim - url) + 1 + 1;
 
-       *out = git__malloc(len);
-       if (*out == NULL)
-               return GIT_ENOMEM;
+       git_buf_grow(&buf, len);
+
+       git_buf_printf(&buf, "%04x%s %s%c%s", len, cmd, repo, 0, host);
+       git_buf_put(&buf, url, delim - url);
+       git_buf_putc(&buf, '\0');
 
-       *outlen = len - 1;
-       ptr = *out;
-       memset(ptr, 0x0, len);
-       /* We expect the return value to be > len - 1 so don't bother checking it */
-       snprintf(ptr, len -1, "%04x%s %s%c%s%s", len - 1, cmd, repo, 0, host, url);
+       *outlen = len;
+       *out = buf.ptr;
 
        return GIT_SUCCESS;
 }