Example #1
0
static void
devpath_dump(uint8_t *data, size_t datalen)
{
	char buffer[1024];

	efidp_format_device_path(buffer, sizeof(buffer),
	    (const_efidp)data, datalen);
	if (!Nflag)
		printf(": ");
	printf("%s\n", buffer);
}
Example #2
0
int
main(int argc, char **argv)
{
	void *data;
	ssize_t len;

	parse_args(argc, argv);
	len = read_file(STDIN_FILENO, &data);
	if (len == -1)
		err(1, "read");
	if (flag_format) {
		char buffer[4096];
		ssize_t fmtlen;

		fmtlen = efidp_format_device_path(buffer, sizeof(buffer),
		    (const_efidp)data, len);
		if (fmtlen > 0)
			printf("%s\n", buffer);
		free(data);
	} else if (flag_parse) {
		efidp dp;
		ssize_t dplen;
		char *str, *walker;

		dplen = 8192;
		dp = malloc(dplen);
		str = realloc(data, len + 1);
		if (str == NULL || dp == NULL)
			errx(1, "Can't allocate memory.");
		str[len] = '\0';
		walker = str;
		while (isspace(*walker))
			walker++;
		dplen = efidp_parse_device_path(walker, dp, dplen);
		if (dplen == -1)
			errx(1, "Can't parse %s", walker);
		write(STDOUT_FILENO, dp, dplen);
		free(dp);
		free(str);
	}
}
Example #3
0
static void
print_boot_entry(efi_load_option *loadopt, size_t data_size)
{
	char *text_path = NULL;
	size_t text_path_len = 0;
	uint8_t *optional_data = NULL;
	size_t optional_data_len = 0;
	uint16_t pathlen;
	const unsigned char const *desc;
	char *raw;
	size_t raw_len;

	ssize_t rc;
	efidp dp = NULL;

	printf("%c ", (efi_loadopt_attrs(loadopt) & LOAD_OPTION_ACTIVE)
	              ? '*' : ' ');

	desc = efi_loadopt_desc(loadopt, data_size);
	if (!desc)
		printf("<invalid description> ");
	else if (desc[0])
		printf("%s ", desc);

	dp = efi_loadopt_path(loadopt, data_size);
	pathlen = efi_loadopt_pathlen(loadopt, data_size);

	rc = efidp_format_device_path(NULL, 0, dp, pathlen);
	if (rc < 0) {
		printf("<bad device path>");
		return;
	}
	text_path_len = rc + 1;
	text_path = alloca(text_path_len);
	if (!text_path)
		error(100, "Couldn't allocate memory");
	rc = efidp_format_device_path(text_path, text_path_len,
				      dp, pathlen);
	if (rc < 0) {
		printf("<bad device path>");
		return;
	}
	if (text_path && text_path_len >= 1)
		printf("%s", text_path);

	rc = efi_loadopt_optional_data(loadopt, data_size,
				       &optional_data, &optional_data_len);
	if (rc < 0) {
		printf("<bad optional_data>");
		return;
	}

	rc = unparse_raw_text(NULL, 0, optional_data, optional_data_len);
	if (rc < 0) {
		printf("<bad optional data>");
		return;
	}

	raw_len = rc + 1;
	raw = alloca(raw_len);
	if (!raw)
		error(101, "Couldn't allocate memory");

	rc = unparse_raw_text(raw, raw_len, optional_data, optional_data_len);
	if (rc < 0) {
		printf("<bad optional data>");
	} else if (rc > 0) {
		for (unsigned int i = 0; i < optional_data_len; i++)
			putchar(isprint(optional_data[i])
				? optional_data[i]
				: '.');
	}

	printf("\n");
}