blob: f426524dce417389be7872f8860fddc868f21e78 [file] [log] [blame]
/*
* trigger.c - convert data between trigger related messages and perl HVs
*/
#include <EXTERN.h>
#include <perl.h>
#include <XSUB.h>
#include "ppport.h"
#include <slurm/slurm.h>
#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;
}