/* * trigger.c - convert data between trigger related messages and perl HVs */ #include #include #include #include "ppport.h" #include #include "slurm-perl.h" /* * convert trigger_info_t to perl HV */ int trigger_info_to_hv(trigger_info_t *trigger_info, HV *hv) { STORE_FIELD(hv, trigger_info, trig_id, uint32_t); STORE_FIELD(hv, trigger_info, res_type, uint16_t); if (trigger_info->res_id) STORE_FIELD(hv, trigger_info, res_id, charp); STORE_FIELD(hv, trigger_info, trig_type, uint32_t); STORE_FIELD(hv, trigger_info, offset, uint16_t); STORE_FIELD(hv, trigger_info, user_id, uint32_t); if(trigger_info->program) STORE_FIELD(hv, trigger_info, program, charp); return 0; } /* * convert perl HV to trigger_info_t */ int hv_to_trigger_info(HV *hv, trigger_info_t *trigger_info) { memset(trigger_info, 0, sizeof(trigger_info_t)); FETCH_FIELD(hv, trigger_info, trig_id, uint32_t, FALSE); FETCH_FIELD(hv, trigger_info, res_type, uint8_t, FALSE); FETCH_FIELD(hv, trigger_info, res_id, charp, FALSE); FETCH_FIELD(hv, trigger_info, trig_type, uint32_t, FALSE); FETCH_FIELD(hv, trigger_info, offset, uint16_t, FALSE); FETCH_FIELD(hv, trigger_info, user_id, uint32_t, FALSE); FETCH_FIELD(hv, trigger_info, program, charp, FALSE); return 0; } /* * convert trigger_info_msg_t to perl HV */ int trigger_info_msg_to_hv(trigger_info_msg_t *trigger_info_msg, HV *hv) { int i; HV *hv_info; AV *av; /* record_count implied in node_array */ av = newAV(); for (i = 0; i < trigger_info_msg->record_count; i ++) { hv_info =newHV(); if (trigger_info_to_hv(trigger_info_msg->trigger_array + i, hv_info) < 0) { SvREFCNT_dec((SV*)hv_info); SvREFCNT_dec((SV*)av); return -1; } av_store(av, i, newRV_noinc((SV*)hv_info)); } hv_store_sv(hv, "trigger_array", newRV_noinc((SV*)av)); return 0; }