LCOV - code coverage report
Current view: top level - spdm_common_lib - libspdm_com_msg_log.c (source / functions) Coverage Total Hit
Test: coverage.info Lines: 87.5 % 48 42
Test Date: 2026-10-01 20:56:25 Functions: 100.0 % 6 6
Branches: 54.2 % 24 13

             Branch data     Line data    Source code
       1                 :             : /**
       2                 :             :  *  Copyright Notice:
       3                 :             :  *  Copyright 2021-2024 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 "internal/libspdm_common_lib.h"
       8                 :             : 
       9                 :             : #if LIBSPDM_ENABLE_MSG_LOG
      10                 :           6 : void libspdm_init_msg_log (void *spdm_context, void *msg_buffer, size_t msg_buffer_size)
      11                 :             : {
      12                 :             :     libspdm_context_t *context;
      13                 :             : 
      14   [ +  -  -  + ]:           6 :     LIBSPDM_ASSERT((spdm_context != NULL) && (msg_buffer != NULL));
      15         [ -  + ]:           6 :     LIBSPDM_ASSERT(msg_buffer_size != 0);
      16                 :             : 
      17                 :           6 :     context = spdm_context;
      18                 :           6 :     context->msg_log.buffer = msg_buffer;
      19                 :           6 :     context->msg_log.max_buffer_size = msg_buffer_size;
      20                 :           6 :     context->msg_log.buffer_size = 0;
      21                 :           6 :     context->msg_log.mode = 0;
      22                 :           6 :     context->msg_log.status = 0;
      23                 :           6 : }
      24                 :             : 
      25                 :           6 : void libspdm_set_msg_log_mode (void *spdm_context, uint32_t mode)
      26                 :             : {
      27                 :             :     libspdm_context_t *context;
      28                 :             : 
      29         [ -  + ]:           6 :     LIBSPDM_ASSERT(spdm_context != NULL);
      30                 :             : 
      31                 :           6 :     context = spdm_context;
      32                 :           6 :     context->msg_log.mode = mode;
      33                 :           6 : }
      34                 :             : 
      35                 :           5 : uint32_t libspdm_get_msg_log_status (void *spdm_context)
      36                 :             : {
      37                 :             :     libspdm_context_t *context;
      38                 :             : 
      39         [ -  + ]:           5 :     LIBSPDM_ASSERT(spdm_context != NULL);
      40                 :             : 
      41                 :           5 :     context = spdm_context;
      42                 :             : 
      43                 :           5 :     return context->msg_log.status;
      44                 :             : }
      45                 :             : 
      46                 :       68608 : size_t libspdm_get_msg_log_size (void *spdm_context)
      47                 :             : {
      48                 :             :     libspdm_context_t *context;
      49                 :             : 
      50         [ -  + ]:       68608 :     LIBSPDM_ASSERT(spdm_context != NULL);
      51                 :             : 
      52                 :       68608 :     context = spdm_context;
      53                 :             : 
      54                 :       68608 :     return context->msg_log.buffer_size;
      55                 :             : }
      56                 :             : 
      57                 :           1 : void libspdm_reset_msg_log (void *spdm_context)
      58                 :             : {
      59                 :             :     libspdm_context_t *context;
      60                 :             : 
      61         [ -  + ]:           1 :     LIBSPDM_ASSERT(spdm_context != NULL);
      62                 :             : 
      63                 :           1 :     context = spdm_context;
      64                 :             : 
      65                 :           1 :     context->msg_log.buffer_size = 0;
      66                 :           1 :     context->msg_log.mode = 0;
      67                 :           1 :     context->msg_log.status = 0;
      68                 :           1 : }
      69                 :             : 
      70                 :       70593 : void libspdm_append_msg_log(libspdm_context_t *spdm_context, void *message, size_t message_size)
      71                 :             : {
      72   [ +  -  -  + ]:       70593 :     LIBSPDM_ASSERT((spdm_context != NULL) && (message != NULL));
      73                 :             : 
      74         [ +  + ]:       70593 :     if (((spdm_context->msg_log.mode & LIBSPDM_MSG_LOG_MODE_ENABLE) != 0) &&
      75         [ +  - ]:          79 :         ((spdm_context->msg_log.status & LIBSPDM_MSG_LOG_STATUS_BUFFER_FULL) == 0)) {
      76                 :          79 :         if (spdm_context->msg_log.buffer_size + message_size >
      77         [ -  + ]:          79 :             spdm_context->msg_log.max_buffer_size) {
      78                 :           0 :             libspdm_copy_mem((uint8_t *)spdm_context->msg_log.buffer +
      79                 :           0 :                              spdm_context->msg_log.buffer_size,
      80                 :             :                              spdm_context->msg_log.max_buffer_size, message,
      81                 :           0 :                              spdm_context->msg_log.max_buffer_size -
      82                 :           0 :                              spdm_context->msg_log.buffer_size);
      83                 :           0 :             spdm_context->msg_log.status |= LIBSPDM_MSG_LOG_STATUS_BUFFER_FULL;
      84                 :           0 :             spdm_context->msg_log.buffer_size = spdm_context->msg_log.max_buffer_size;
      85                 :             :         } else {
      86                 :          79 :             libspdm_copy_mem((uint8_t *)spdm_context->msg_log.buffer +
      87                 :          79 :                              spdm_context->msg_log.buffer_size,
      88                 :             :                              spdm_context->msg_log.max_buffer_size, message, message_size);
      89                 :          79 :             spdm_context->msg_log.buffer_size += message_size;
      90                 :             :         }
      91                 :             : 
      92                 :          79 :         LIBSPDM_DEBUG((LIBSPDM_DEBUG_INFO, "Message Logging Status = [%x] Buffer Size = [%zx] "
      93                 :             :                        "Max Buffer Size = [%zx]\n", spdm_context->msg_log.status,
      94                 :             :                        spdm_context->msg_log.buffer_size, spdm_context->msg_log.max_buffer_size));
      95                 :          79 :         LIBSPDM_INTERNAL_DUMP_HEX(spdm_context->msg_log.buffer, spdm_context->msg_log.buffer_size);
      96                 :             :     }
      97                 :       70593 : }
      98                 :             : #endif /* LIBSPDM_ENABLE_MSG_LOG */
        

Generated by: LCOV version 2.0-1