int git_config_parse_parameter(const char *text, config_fn_t fn, void *data) { struct strbuf **pair; pair = strbuf_split_str(text, '=', 2); if (!pair[0]) return error("bogus config parameter: %s", text); if (pair[0]->len && pair[0]->buf[pair[0]->len - 1] == '=') strbuf_setlen(pair[0], pair[0]->len - 1); strbuf_trim(pair[0]); if (!pair[0]->len) { strbuf_list_free(pair); return error("bogus config parameter: %s", text); } lowercase(pair[0]->buf); if (fn(pair[0]->buf, pair[1] ? pair[1]->buf : NULL, data) < 0) { strbuf_list_free(pair); return -1; } strbuf_list_free(pair); return 0; }
int subprocess_read_status(int fd, struct strbuf *status) { struct strbuf **pair; char *line; int len; for (;;) { len = packet_read_line_gently(fd, NULL, &line); if ((len < 0) || !line) break; pair = strbuf_split_str(line, '=', 2); if (pair[0] && pair[0]->len && pair[1]) { /* the last "status=<foo>" line wins */ if (!strcmp(pair[0]->buf, "status=")) { strbuf_reset(status); strbuf_addbuf(status, pair[1]); } } strbuf_list_free(pair); } return (len < 0) ? len : 0; }