Esempio n. 1
0
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;
	}
}
Esempio n. 2
0
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);
}