/* frecnt-v2.c -- Test for decoder in libsframe. Copyright (C) 2022-2025 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include "sframe-test.h" /* * SFrame info from the following source (2 fde 8 fres): * static int cnt; * int foo() { return ++cnt; } * int main() { return foo(); } * * Generate SFrame V2 section. */ #define DATA "DATA-V2" int main (void) { sframe_decoder_ctx *dctx = NULL; uint32_t nfres, fsize; int32_t fstart; unsigned char finfo; unsigned int i; int err = 0; FILE *fp; struct stat st; char *sf_buf; size_t sf_size; uint8_t rep_block_size; fp = fopen (DATA, "r"); if (fp == NULL) goto setup_fail; if (fstat (fileno (fp), &st) < 0) { perror ("fstat"); fclose (fp); goto setup_fail; } sf_buf = malloc (st.st_size); if (sf_buf == NULL) { perror ("malloc"); goto setup_fail; } /* Execute tests. */ sf_size = fread (sf_buf, 1, st.st_size, fp); fclose (fp); TEST (sf_size != 0, "frecnt-v2: Read data"); dctx = sframe_decode (sf_buf, sf_size, &err); TEST (dctx != NULL, "frecnt-v2: Decode setup"); unsigned int fde_cnt = sframe_decoder_get_num_fidx (dctx); TEST (fde_cnt == 2, "frecnt-v2: Decode FDE count"); for (i = 0; i < fde_cnt; ++i) { err = sframe_decoder_get_funcdesc_v2 (dctx, i, &nfres, &fsize, &fstart, &finfo, &rep_block_size); TEST (err == 0, "frecnt-v2: Decode get FDE%d", i); TEST (nfres == 4, "frecnt-v2: Decode num FREs for FDE%d", i); } free (sf_buf); sf_buf = NULL; sframe_decoder_free (&dctx); return 0; setup_fail: sframe_decoder_free (&dctx); fail ("frecnt-v2: Test setup"); return 1; }