3463
3464 if (rctlcount == 0) {
3465 error = 0;
3466 goto out;
3467 }
3468 if (nvlist_pack(nvl, &nvl_packed, &nvl_size, NV_ENCODE_NATIVE, 0)
3469 != 0) {
3470 zerror(zlogp, B_FALSE, "%s failed", "nvlist_pack");
3471 goto out;
3472 }
3473
3474 error = 0;
3475 *bufp = nvl_packed;
3476 *bufsizep = nvl_size;
3477
3478 out:
3479 free(rctlblk);
3480 zonecfg_free_rctl_value_list(rctltab.zone_rctl_valptr);
3481 if (error && nvl_packed != NULL)
3482 free(nvl_packed);
3483 if (nvl != NULL)
3484 nvlist_free(nvl);
3485 if (nvlv != NULL)
3486 free(nvlv);
3487 if (handle != NULL)
3488 zonecfg_fini_handle(handle);
3489 return (error);
3490 }
3491
3492 static int
3493 get_implicit_datasets(zlog_t *zlogp, char **retstr)
3494 {
3495 char cmdbuf[2 * MAXPATHLEN];
3496
3497 if (query_hook[0] == '\0')
3498 return (0);
3499
3500 if (snprintf(cmdbuf, sizeof (cmdbuf), "%s datasets", query_hook)
3501 > sizeof (cmdbuf))
3502 return (-1);
3503
|
3463
3464 if (rctlcount == 0) {
3465 error = 0;
3466 goto out;
3467 }
3468 if (nvlist_pack(nvl, &nvl_packed, &nvl_size, NV_ENCODE_NATIVE, 0)
3469 != 0) {
3470 zerror(zlogp, B_FALSE, "%s failed", "nvlist_pack");
3471 goto out;
3472 }
3473
3474 error = 0;
3475 *bufp = nvl_packed;
3476 *bufsizep = nvl_size;
3477
3478 out:
3479 free(rctlblk);
3480 zonecfg_free_rctl_value_list(rctltab.zone_rctl_valptr);
3481 if (error && nvl_packed != NULL)
3482 free(nvl_packed);
3483 nvlist_free(nvl);
3484 if (nvlv != NULL)
3485 free(nvlv);
3486 if (handle != NULL)
3487 zonecfg_fini_handle(handle);
3488 return (error);
3489 }
3490
3491 static int
3492 get_implicit_datasets(zlog_t *zlogp, char **retstr)
3493 {
3494 char cmdbuf[2 * MAXPATHLEN];
3495
3496 if (query_hook[0] == '\0')
3497 return (0);
3498
3499 if (snprintf(cmdbuf, sizeof (cmdbuf), "%s datasets", query_hook)
3500 > sizeof (cmdbuf))
3501 return (-1);
3502
|