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); }
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); } }
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"); }