static struct ptunit_result fetch_null(struct fetch_fixture *ffix) { const struct pt_decoder_function *dfun; int errcode; errcode = pt_df_fetch(NULL, ffix->config.begin, &ffix->config); ptu_int_eq(errcode, -pte_internal); errcode = pt_df_fetch(&dfun, NULL, &ffix->config); ptu_int_eq(errcode, -pte_nosync); errcode = pt_df_fetch(&dfun, ffix->config.begin, NULL); ptu_int_eq(errcode, -pte_internal); return ptu_passed(); }
int pt_pkt_next(struct pt_packet_decoder *decoder, struct pt_packet *packet, size_t psize) { const struct pt_decoder_function *dfun; struct pt_packet pkt, *ppkt; int errcode, size; if (!packet || !decoder) return -pte_invalid; ppkt = psize == sizeof(pkt) ? packet : &pkt; errcode = pt_df_fetch(&dfun, decoder->pos, &decoder->config); if (errcode < 0) return errcode; if (!dfun) return -pte_internal; if (!dfun->packet) return -pte_internal; size = dfun->packet(decoder, ppkt); if (size < 0) return size; errcode = pkt_to_user(packet, psize, ppkt); if (errcode < 0) return errcode; decoder->pos += size; return size; }
static struct ptunit_result fetch_empty(struct fetch_fixture *ffix) { const struct pt_decoder_function *dfun; int errcode; errcode = pt_df_fetch(&dfun, ffix->config.end, &ffix->config); ptu_int_eq(errcode, -pte_eos); return ptu_passed(); }
static struct ptunit_result fetch_unknown(struct fetch_fixture *ffix) { const struct pt_decoder_function *dfun; int errcode; ffix->config.begin[0] = pt_opc_bad; errcode = pt_df_fetch(&dfun, ffix->config.begin, &ffix->config); ptu_int_eq(errcode, 0); ptu_ptr_eq(dfun, &pt_decode_unknown); return ptu_passed(); }
static struct ptunit_result fetch_packet(struct fetch_fixture *ffix, const struct pt_packet *packet, const struct pt_decoder_function *df) { const struct pt_decoder_function *dfun; int errcode; errcode = pt_enc_next(&ffix->encoder, packet); ptu_int_ge(errcode, 0); errcode = pt_df_fetch(&dfun, ffix->config.begin, &ffix->config); ptu_int_eq(errcode, 0); ptu_ptr_eq(dfun, df); return ptu_passed(); }