LCOV - code coverage report
Current view: top level - unit_test/spdm_unit_test_common - support.c (source / functions) Coverage Total Hit
Test: coverage.info Lines: 70.7 % 58 41
Test Date: 2025-06-29 08:09:00 Functions: 100.0 % 5 5

            Line data    Source code
       1              : /**
       2              :  *  Copyright Notice:
       3              :  *  Copyright 2021-2022 DMTF. All rights reserved.
       4              :  *  License: BSD 3-Clause License. For full text see link: https://github.com/DMTF/libspdm/blob/main/LICENSE.md
       5              :  **/
       6              : 
       7              : #include "spdm_unit_test.h"
       8              : 
       9              : #if !(defined(_WIN32) || (defined(__clang__) && (defined (LIBSPDM_CPU_AARCH64) || \
      10              :     defined(LIBSPDM_CPU_ARM))))
      11              :     #include <fcntl.h>
      12              :     #include <unistd.h>
      13              :     #include <sys/stat.h>
      14              : #endif
      15              : 
      16           71 : void libspdm_dump_hex_str(const uint8_t *buffer, size_t buffer_size)
      17              : {
      18              :     size_t index;
      19              : 
      20          923 :     for (index = 0; index < buffer_size; index++) {
      21          852 :         printf("%02x", buffer[index]);
      22              :     }
      23           71 : }
      24              : 
      25         1583 : void libspdm_dump_data(const uint8_t *buffer, size_t buffer_size)
      26              : {
      27              :     size_t index;
      28              : 
      29        49475 :     for (index = 0; index < buffer_size; index++) {
      30        47892 :         printf("%02x ", buffer[index]);
      31              :     }
      32         1583 : }
      33              : 
      34          185 : void libspdm_dump_hex(const uint8_t *data, size_t size)
      35              : {
      36              :     size_t index;
      37              :     size_t count;
      38              :     size_t left;
      39              : 
      40              : #define COLUME_SIZE (16 * 2)
      41              : 
      42          185 :     count = size / COLUME_SIZE;
      43          185 :     left = size % COLUME_SIZE;
      44         1610 :     for (index = 0; index < count; index++) {
      45         1425 :         printf("%04x: ", (uint32_t)(index * COLUME_SIZE));
      46         1425 :         libspdm_dump_data(data + index * COLUME_SIZE, COLUME_SIZE);
      47         1425 :         printf("\n");
      48              :     }
      49              : 
      50          185 :     if (left != 0) {
      51          157 :         printf("%04x: ", (uint32_t)(index * COLUME_SIZE));
      52          157 :         libspdm_dump_data(data + index * COLUME_SIZE, left);
      53          157 :         printf("\n");
      54              :     }
      55          185 : }
      56              : 
      57         1116 : bool libspdm_read_input_file(const char *file_name, void **file_data,
      58              :                              size_t *file_size)
      59              : {
      60              : #if defined(_WIN32) || (defined(__clang__) && (defined (LIBSPDM_CPU_AARCH64) || \
      61              :     defined(LIBSPDM_CPU_ARM)))
      62              :     FILE *fp_in;
      63              :     size_t temp_result;
      64              : #else
      65              :     int32_t temp_result;
      66              :     int64_t fp_in;
      67              : #endif
      68              : 
      69              : #if defined(_WIN32) || (defined(__clang__) && (defined (LIBSPDM_CPU_AARCH64) || \
      70              :     defined(LIBSPDM_CPU_ARM)))
      71              :     if ((fp_in = fopen(file_name, "rb")) == NULL) {
      72              :         printf("Unable to open file %s\n", file_name);
      73              :         *file_data = NULL;
      74              :         return false;
      75              :     }
      76              : 
      77              :     fseek(fp_in, 0, SEEK_END);
      78              :     *file_size = ftell(fp_in);
      79              : 
      80              :     *file_data = (void *)malloc(*file_size);
      81              :     if (NULL == *file_data) {
      82              :         printf("No sufficient memory to allocate %s\n", file_name);
      83              :         fclose(fp_in);
      84              :         return false;
      85              :     }
      86              : 
      87              :     fseek(fp_in, 0, SEEK_SET);
      88              :     temp_result = fread(*file_data, 1, *file_size, fp_in);
      89              :     if (temp_result != *file_size) {
      90              :         printf("Read input file error %s", file_name);
      91              :         free((void *)*file_data);
      92              :         fclose(fp_in);
      93              :         return false;
      94              :     }
      95              : 
      96              :     fclose(fp_in);
      97              : 
      98              : #else
      99         1116 :     fp_in = open(file_name, O_RDONLY, S_IRWXU);
     100         1116 :     if (fp_in == -1) {
     101           28 :         printf("Unable to open file %s\n", file_name);
     102           28 :         *file_data = NULL;
     103           28 :         return false;
     104              :     }
     105              : 
     106         1088 :     temp_result = lseek(fp_in, 0, SEEK_END);
     107         1088 :     if (temp_result == -1) {
     108            0 :         printf("Unable to open file %s\n", file_name);
     109            0 :         *file_data = NULL;
     110            0 :         return false;
     111              :     } else {
     112         1088 :         *file_size = (size_t)temp_result;
     113              :     }
     114              : 
     115         1088 :     *file_data = (void *)malloc(*file_size);
     116         1088 :     if (NULL == *file_data) {
     117            0 :         printf("No sufficient memory to allocate %s\n", file_name);
     118            0 :         close(fp_in);
     119            0 :         return false;
     120              :     }
     121              : 
     122         1088 :     if (lseek(fp_in, 0, SEEK_SET) == -1) {
     123            0 :         close(fp_in);
     124            0 :         return false;
     125              :     }
     126              : 
     127         1088 :     temp_result = read(fp_in, *file_data, *file_size);
     128         1088 :     if (temp_result != *file_size) {
     129            0 :         printf("Read input file error %s", file_name);
     130            0 :         free((void *)*file_data);
     131            0 :         close(fp_in);
     132            0 :         return false;
     133              :     }
     134              : 
     135         1088 :     close(fp_in);
     136              : #endif
     137              : 
     138         1088 :     return true;
     139              : }
     140              : 
     141           67 : bool libspdm_write_output_file(const char *file_name, const void *file_data,
     142              :                                size_t file_size)
     143              : {
     144              :     FILE *fp_out;
     145              : 
     146           67 :     if ((fp_out = fopen(file_name, "w+b")) == NULL) {
     147            0 :         printf("Unable to open file %s\n", file_name);
     148            0 :         return false;
     149              :     }
     150              : 
     151           67 :     if ((fwrite(file_data, 1, file_size, fp_out)) != file_size) {
     152            0 :         printf("Write output file error %s\n", file_name);
     153            0 :         fclose(fp_out);
     154            0 :         return false;
     155              :     }
     156              : 
     157           67 :     fclose(fp_out);
     158              : 
     159           67 :     return true;
     160              : }
        

Generated by: LCOV version 2.0-1