static int read_event_data(SCLPEvent *event, EventBufferHeader *evt_buf_hdr, int *slen) { int avail, rc; size_t src_len; uint8_t *to; OprtnsCommand *oc = (OprtnsCommand *) evt_buf_hdr; if (!event->event_pending) { /* no data pending */ return 0; } to = (uint8_t *)&oc->data; avail = *slen - sizeof(OprtnsCommand); rc = get_console_data(event, to, &src_len, avail); if (rc) { /* data didn't fit, try next SCCB */ return 1; } oc->message_unit.mdmsu.gds_id = GDS_ID_MDSMU; oc->message_unit.mdmsu.length = cpu_to_be16(sizeof(struct MDMSU)); oc->message_unit.cpmsu.gds_id = GDS_ID_CPMSU; oc->message_unit.cpmsu.length = cpu_to_be16(sizeof(struct MDMSU) - sizeof(GdsVector)); oc->message_unit.text_command.gds_id = GDS_ID_TEXTCMD; oc->message_unit.text_command.length = cpu_to_be16(sizeof(struct MDMSU) - (2 * sizeof(GdsVector))); oc->message_unit.self_def_text_message.key = GDS_KEY_SELFDEFTEXTMSG; oc->message_unit.self_def_text_message.length = cpu_to_be16(sizeof(struct MDMSU) - (3 * sizeof(GdsVector))); oc->message_unit.text_message.key = GDS_KEY_TEXTMSG; oc->message_unit.text_message.length = cpu_to_be16(sizeof(GdsSubvector) + src_len); oc->header.length = cpu_to_be16(sizeof(OprtnsCommand) + src_len); oc->header.type = SCLP_EVENT_OPRTNS_COMMAND; *slen = avail - src_len; return 1; }
static int read_event_data(SCLPEvent *event, EventBufferHeader *evt_buf_hdr, int *slen) { int avail; size_t src_len; uint8_t *to; ASCIIConsoleData *acd = (ASCIIConsoleData *) evt_buf_hdr; if (!event->event_pending) { /* no data pending */ return 0; } to = (uint8_t *)&acd->data; avail = *slen - sizeof(ASCIIConsoleData); get_console_data(event, to, &src_len, avail); acd->ebh.length = cpu_to_be16(sizeof(ASCIIConsoleData) + src_len); acd->ebh.type = SCLP_EVENT_ASCII_CONSOLE_DATA; acd->ebh.flags |= SCLP_EVENT_BUFFER_ACCEPTED; *slen = avail - src_len; return 1; }