Changeset View
Changeset View
Standalone View
Standalone View
sys/contrib/openzfs/lib/libzfs/libzfs_pool.c
Show First 20 Lines • Show All 4,489 Lines • ▼ Show 20 Lines | (void) zpool_standard_error_fmt(zhp->zpool_hdl, error, | ||||
dgettext(TEXT_DOMAIN, "error waiting in pool '%s'"), | dgettext(TEXT_DOMAIN, "error waiting in pool '%s'"), | ||||
zhp->zpool_name); | zhp->zpool_name); | ||||
} | } | ||||
return (error); | return (error); | ||||
} | } | ||||
int | int | ||||
zpool_set_bootenv(zpool_handle_t *zhp, const char *envmap) | zpool_set_bootenv(zpool_handle_t *zhp, const nvlist_t *envmap) | ||||
{ | { | ||||
int error = lzc_set_bootenv(zhp->zpool_name, envmap); | int error = lzc_set_bootenv(zhp->zpool_name, envmap); | ||||
if (error != 0) { | if (error != 0) { | ||||
(void) zpool_standard_error_fmt(zhp->zpool_hdl, error, | (void) zpool_standard_error_fmt(zhp->zpool_hdl, error, | ||||
dgettext(TEXT_DOMAIN, | dgettext(TEXT_DOMAIN, | ||||
"error setting bootenv in pool '%s'"), zhp->zpool_name); | "error setting bootenv in pool '%s'"), zhp->zpool_name); | ||||
} | } | ||||
return (error); | return (error); | ||||
} | } | ||||
int | int | ||||
zpool_get_bootenv(zpool_handle_t *zhp, char *outbuf, size_t size, off_t offset) | zpool_get_bootenv(zpool_handle_t *zhp, nvlist_t **nvlp) | ||||
{ | { | ||||
nvlist_t *nvl = NULL; | nvlist_t *nvl; | ||||
int error = lzc_get_bootenv(zhp->zpool_name, &nvl); | int error; | ||||
nvl = NULL; | |||||
error = lzc_get_bootenv(zhp->zpool_name, &nvl); | |||||
if (error != 0) { | if (error != 0) { | ||||
(void) zpool_standard_error_fmt(zhp->zpool_hdl, error, | (void) zpool_standard_error_fmt(zhp->zpool_hdl, error, | ||||
dgettext(TEXT_DOMAIN, | dgettext(TEXT_DOMAIN, | ||||
"error getting bootenv in pool '%s'"), zhp->zpool_name); | "error getting bootenv in pool '%s'"), zhp->zpool_name); | ||||
return (-1); | } else { | ||||
*nvlp = nvl; | |||||
} | } | ||||
char *envmap = fnvlist_lookup_string(nvl, "envmap"); | |||||
if (offset >= strlen(envmap)) { | |||||
fnvlist_free(nvl); | |||||
return (0); | |||||
} | |||||
strncpy(outbuf, envmap + offset, size); | return (error); | ||||
int bytes = MIN(strlen(envmap + offset), size); | |||||
fnvlist_free(nvl); | |||||
return (bytes); | |||||
} | } |