void read_response(mdata_get_t *mdg) { int retries = 3; string_t *resp = dynstr_new(); for (;;) { char buf[2]; ssize_t sz = fread(&buf, 1, 1, mdg->mdg_fp); if (sz == 1) { if (buf[0] == '\n') { process_input(mdg, dynstr_cstr(resp)); dynstr_reset(resp); } else { buf[1] = '\0'; dynstr_append(resp, buf); } } else if ((sz == 0) || (sz == -1 && errno == EAGAIN)) { if (--retries == 0) errx(1, "timed out while reading metadata " "response"); sleep(1); } else { errx(1, "could not read metadata response"); } if (mdg->mdg_state == MDGS_DONE) break; } }
static int plat_send_reset(mdata_plat_t *mpl) { int ret = -1; string_t *str = dynstr_new(); dynstr_append(str, "\n"); if (plat_send(mpl, str) != 0) goto bail; dynstr_reset(str); if (plat_recv(mpl, str, 2000) != 0) goto bail; if (strcmp(dynstr_cstr(str), "invalid command") != 0) goto bail; ret = 0; bail: dynstr_free(str); return (ret); }