int efi_setvar(char *name, uuid_t *vendor, uint32_t attrib, size_t datasize, void *data) { struct iodev_efivar_req req; int error; req.namesize = 0; error = libefi_utf8_to_ucs2(name, &req.namesize, &req.name); if (error) return (error); req.vendor = *vendor; req.attrib = attrib; req.datasize = datasize; req.data = data; req.access = IODEV_EFIVAR_SETVAR; error = libefi_efivar(&req); free(req.name); return (error); }
int efi_nextvarname(size_t *namesize, char *name, uuid_t *vendor) { struct iodev_efivar_req req; int error; req.namesize = *namesize; error = libefi_utf8_to_ucs2(name, &req.namesize, &req.name); if (error) return (error); req.vendor = *vendor; req.access = IODEV_EFIVAR_NEXTNAME; error = libefi_efivar(&req); *namesize = req.namesize; if (!error) { error = libefi_ucs2_to_utf8(req.name, namesize, name); if (!error) *vendor = req.vendor; } free(req.name); return (error); }