* Dump content of nvlist. */
| 437 | * Dump content of nvlist. |
| 438 | */ |
| 439 | void |
| 440 | nvlist_dump(const nvlist_t *nvl, int fd) |
| 441 | { |
| 442 | const nvlist_t *tmpnvl; |
| 443 | nvpair_t *nvp, *tmpnvp; |
| 444 | void *cookie; |
| 445 | int level; |
| 446 | |
| 447 | level = 0; |
| 448 | if (nvlist_dump_error_check(nvl, fd, level)) |
| 449 | return; |
| 450 | |
| 451 | nvp = nvlist_first_nvpair(nvl); |
| 452 | while (nvp != NULL) { |
| 453 | dprintf(fd, "%*s%s (%s):", level * 4, "", nvpair_name(nvp), |
| 454 | nvpair_type_string(nvpair_type(nvp))); |
| 455 | switch (nvpair_type(nvp)) { |
| 456 | case NV_TYPE_NULL: |
| 457 | dprintf(fd, " null\n"); |
| 458 | break; |
| 459 | case NV_TYPE_BOOL: |
| 460 | dprintf(fd, " %s\n", nvpair_get_bool(nvp) ? |
| 461 | "TRUE" : "FALSE"); |
| 462 | break; |
| 463 | case NV_TYPE_NUMBER: |
| 464 | dprintf(fd, " %ju (%jd) (0x%jx)\n", |
| 465 | (uintmax_t)nvpair_get_number(nvp), |
| 466 | (intmax_t)nvpair_get_number(nvp), |
| 467 | (uintmax_t)nvpair_get_number(nvp)); |
| 468 | break; |
| 469 | case NV_TYPE_STRING: |
| 470 | dprintf(fd, " [%s]\n", nvpair_get_string(nvp)); |
| 471 | break; |
| 472 | case NV_TYPE_NVLIST: |
| 473 | dprintf(fd, "\n"); |
| 474 | tmpnvl = nvpair_get_nvlist(nvp); |
| 475 | if (nvlist_dump_error_check(tmpnvl, fd, level + 1)) |
| 476 | break; |
| 477 | tmpnvp = nvlist_first_nvpair(tmpnvl); |
| 478 | if (tmpnvp != NULL) { |
| 479 | nvl = tmpnvl; |
| 480 | nvp = tmpnvp; |
| 481 | level++; |
| 482 | continue; |
| 483 | } |
| 484 | break; |
| 485 | case NV_TYPE_DESCRIPTOR: |
| 486 | dprintf(fd, " %d\n", nvpair_get_descriptor(nvp)); |
| 487 | break; |
| 488 | case NV_TYPE_BINARY: |
| 489 | { |
| 490 | const unsigned char *binary; |
| 491 | unsigned int ii; |
| 492 | size_t size; |
| 493 | |
| 494 | binary = nvpair_get_binary(nvp, &size); |
| 495 | dprintf(fd, " %zu ", size); |
| 496 | for (ii = 0; ii < size; ii++) |
no test coverage detected