577 }
578 if (nvlist_lookup_nvlist(evi->ei_payload, "attr", &attr_nvl) ||
579 nvlist_lookup_string(attr_nvl, "from-state", &from_state) ||
580 nvlist_lookup_string(attr_nvl, "to-state", &to_state) ||
581 nvlist_lookup_string(attr_nvl, "reason-long", &reason)) {
582 nd_error(nhdl, "Malformed event");
583 nd_dump_nvlist(nhdl, evi->ei_payload);
584 nd_free_event_info(evi);
585 free(fmri);
586 return (-1);
587 }
588 evi->ei_fmri = fmri;
589 evi->ei_to_state = strdup(to_state);
590 evi->ei_from_state = strdup(from_state);
591 evi->ei_reason = strdup(reason);
592 }
593 *ev_info = evi;
594 return (0);
595 }
596
597 static void
598 condfree(void *buf)
599 {
600 if (buf != NULL)
601 free(buf);
602 }
603
604 void
605 nd_free_event_info(nd_ev_info_t *ev_info)
606 {
607 condfree(ev_info->ei_severity);
608 condfree(ev_info->ei_descr);
609 condfree(ev_info->ei_diagcode);
610 condfree(ev_info->ei_url);
611 condfree(ev_info->ei_uuid);
612 condfree(ev_info->ei_fmri);
613 condfree(ev_info->ei_from_state);
614 condfree(ev_info->ei_to_state);
615 condfree(ev_info->ei_reason);
616 fmev_rele(ev_info->ei_ev);
617 free(ev_info);
618 }
|
577 }
578 if (nvlist_lookup_nvlist(evi->ei_payload, "attr", &attr_nvl) ||
579 nvlist_lookup_string(attr_nvl, "from-state", &from_state) ||
580 nvlist_lookup_string(attr_nvl, "to-state", &to_state) ||
581 nvlist_lookup_string(attr_nvl, "reason-long", &reason)) {
582 nd_error(nhdl, "Malformed event");
583 nd_dump_nvlist(nhdl, evi->ei_payload);
584 nd_free_event_info(evi);
585 free(fmri);
586 return (-1);
587 }
588 evi->ei_fmri = fmri;
589 evi->ei_to_state = strdup(to_state);
590 evi->ei_from_state = strdup(from_state);
591 evi->ei_reason = strdup(reason);
592 }
593 *ev_info = evi;
594 return (0);
595 }
596
597 void
598 nd_free_event_info(nd_ev_info_t *ev_info)
599 {
600 free(ev_info->ei_severity);
601 free(ev_info->ei_descr);
602 free(ev_info->ei_diagcode);
603 free(ev_info->ei_url);
604 free(ev_info->ei_uuid);
605 free(ev_info->ei_fmri);
606 free(ev_info->ei_from_state);
607 free(ev_info->ei_to_state);
608 free(ev_info->ei_reason);
609 fmev_rele(ev_info->ei_ev);
610 free(ev_info);
611 }
|