#include <stdio.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include "libnvpair.h"
char buf[65536];
void
dumpit(FILE *fp)
{
struct stat st;
size_t flen;
int rlen;
nvlist_t *nvl = NULL;
int err;
if (fstat(fileno(fp), &st) < 0) {
perror("fstat");
return;
}
flen = (size_t)st.st_size;
if (flen > sizeof (buf)) {
(void) printf("File too large\n");
return;
}
rlen = fread(buf, 1, flen, fp);
if (rlen <= 0) {
perror("fread");
return;
}
if (rlen != flen) {
(void) printf("Short read %d %d \n", rlen, flen);
return;
}
err = nvlist_unpack(buf, flen, &nvl, 0);
if (err != 0) {
(void) printf("nvlist_unpack, err=%d\n", err);
return;
}
nvlist_print(stdout, nvl);
nvlist_free(nvl);
}
int
main(int argc, char **argv)
{
FILE *fp;
int i;
if (argc < 2) {
(void) fprintf(stderr, "usage: %s {filename} [filename2...]\n",
argv[0]);
return (1);
}
for (i = 1; i < argc; i++) {
fp = fopen(argv[i], "r");
if (fp == NULL) {
perror(argv[i]);
return (1);
}
(void) printf("%s:\n", argv[i]);
dumpit(fp);
(void) fclose(fp);
}
return (0);
}