die("Unable to run helper: git %s", helper->argv[0]);
data->helper = helper;
- write_in_full(data->helper->in, "capabilities\n", 13);
- file = fdopen(helper->out, "r");
+ write_str_in_full(helper->in, "capabilities\n");
+
+ file = xfdopen(helper->out, "r");
while (1) {
if (strbuf_getline(&buf, file, '\n') == EOF)
exit(128); /* child died, message supplied already */
{
struct helper_data *data = transport->data;
if (data->helper) {
- write_in_full(data->helper->in, "\n", 1);
+ write_str_in_full(data->helper->in, "\n");
close(data->helper->in);
finish_command(data->helper);
free((char *)data->helper->argv[0]);
int nr_heads, const struct ref **to_fetch)
{
struct child_process *helper = get_helper(transport);
- FILE *file = fdopen(helper->out, "r");
+ FILE *file = xfdopen(helper->out, "r");
int i;
struct strbuf buf = STRBUF_INIT;
for (i = 0; i < nr_heads; i++) {
- struct ref *posn = to_fetch[i];
+ const struct ref *posn = to_fetch[i];
if (posn->status & REF_STATUS_UPTODATE)
continue;
- write_in_full(helper->in, "fetch ", 6);
- write_in_full(helper->in, sha1_to_hex(posn->old_sha1), 40);
- write_in_full(helper->in, " ", 1);
- write_in_full(helper->in, posn->name, strlen(posn->name));
- write_in_full(helper->in, "\n", 1);
+
+ strbuf_addf(&buf, "fetch %s %s\n",
+ sha1_to_hex(posn->old_sha1), posn->name);
+ write_in_full(helper->in, buf.buf, buf.len);
+ strbuf_reset(&buf);
+
if (strbuf_getline(&buf, file, '\n') == EOF)
exit(128); /* child died, message supplied already */
}
FILE *file;
helper = get_helper(transport);
- write_in_full(helper->in, "list\n", 5);
- file = fdopen(helper->out, "r");
+ write_str_in_full(helper->in, "list\n");
+
+ file = xfdopen(helper->out, "r");
while (1) {
char *eov, *eon;
if (strbuf_getline(&buf, file, '\n') == EOF)
return ret;
}
-int transport_helper_init(struct transport *transport)
+int transport_helper_init(struct transport *transport, const char *name)
{
struct helper_data *data = xcalloc(sizeof(*data), 1);
- char *eom = strchr(transport->url, ':');
- if (!eom)
- return -1;
- data->name = xstrndup(transport->url, eom - transport->url);
+ data->name = name;
transport->data = data;
transport->get_refs_list = get_refs_list;