57 hdl->agent_errno = err;
58 return (-1);
59 }
60
61 const char *
62 fmd_agent_strerr(int err)
63 {
64 return (strerror(err));
65 }
66
67 const char *
68 fmd_agent_errmsg(fmd_agent_hdl_t *hdl)
69 {
70 return (fmd_agent_strerr(hdl->agent_errno));
71 }
72
73 static int
74 cleanup_set_errno(fmd_agent_hdl_t *hdl, nvlist_t *innvl, nvlist_t *outnvl,
75 int err)
76 {
77 if (innvl != NULL)
78 nvlist_free(innvl);
79 if (outnvl != NULL)
80 nvlist_free(outnvl);
81 return (fmd_agent_seterrno(hdl, err));
82 }
83
84 /*
85 * Perform /dev/fm ioctl. The input and output data are represented by
86 * name-value lists (nvlists).
87 */
88 int
89 fmd_agent_nvl_ioctl(fmd_agent_hdl_t *hdl, int cmd, uint32_t ver,
90 nvlist_t *innvl, nvlist_t **outnvlp)
91 {
92 fm_ioc_data_t fid;
93 int err = 0;
94 char *inbuf = NULL, *outbuf = NULL;
95 size_t insz = 0, outsz = 0;
96
97 if (innvl != NULL) {
98 if ((err = nvlist_size(innvl, &insz, NV_ENCODE_NATIVE)) != 0)
99 return (err);
|
57 hdl->agent_errno = err;
58 return (-1);
59 }
60
61 const char *
62 fmd_agent_strerr(int err)
63 {
64 return (strerror(err));
65 }
66
67 const char *
68 fmd_agent_errmsg(fmd_agent_hdl_t *hdl)
69 {
70 return (fmd_agent_strerr(hdl->agent_errno));
71 }
72
73 static int
74 cleanup_set_errno(fmd_agent_hdl_t *hdl, nvlist_t *innvl, nvlist_t *outnvl,
75 int err)
76 {
77 nvlist_free(innvl);
78 nvlist_free(outnvl);
79 return (fmd_agent_seterrno(hdl, err));
80 }
81
82 /*
83 * Perform /dev/fm ioctl. The input and output data are represented by
84 * name-value lists (nvlists).
85 */
86 int
87 fmd_agent_nvl_ioctl(fmd_agent_hdl_t *hdl, int cmd, uint32_t ver,
88 nvlist_t *innvl, nvlist_t **outnvlp)
89 {
90 fm_ioc_data_t fid;
91 int err = 0;
92 char *inbuf = NULL, *outbuf = NULL;
93 size_t insz = 0, outsz = 0;
94
95 if (innvl != NULL) {
96 if ((err = nvlist_size(innvl, &insz, NV_ENCODE_NATIVE)) != 0)
97 return (err);
|