/* frecnt-2.c -- Test for decoder in libsframe. Copyright (C) 2022 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 "config.h" #include #include #include #include "sframe-api.h" /* DejaGnu should not use gnulib's vsnprintf replacement here. */ #undef vsnprintf #include /* * SFrame info from the following source (2 fde 8 fres): * static int cnt; * int foo() { return ++cnt; } * int main() { return foo(); } */ #define DATA "DATA2" 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; #define TEST(name, cond) \ do \ { \ if (cond) \ pass (name); \ else \ fail (name); \ } \ while (0) 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 ("frecnt-2: Read data", sf_size != 0); dctx = sframe_decode (sf_buf, sf_size, &err); TEST ("frecnt-2: Decode setup", dctx != NULL); unsigned int fde_cnt = sframe_decoder_get_num_fidx (dctx); TEST ("frecnt-2: Decode FDE count", fde_cnt == 2); for (i = 0; i < fde_cnt; ++i) { err = sframe_decoder_get_funcdesc (dctx, i, &nfres, &fsize, &fstart, &finfo); TEST ("frecnt-2: Decode get FDE", err == 0); TEST ("frecnt-2: Decode get FRE", nfres == 4); } sframe_decoder_free (&dctx); return 0; setup_fail: sframe_decoder_free (&dctx); fail ("frecnt-2: Test setup"); return 1; }