SolidSyslog coverage report
Current view: top level - Core/Source - SolidSyslogHeaderField.c (source / functions) Coverage Total Hit
Test: SolidSyslog Lines: 100.0 % 19 19
Test Date: 2026-11-12 23:14:35 Functions: 100.0 % 4 4
Branches: 100.0 % 4 4

             Branch data     Line data    Source code
       1                 :             : /* SPDX-FileCopyrightText: Copyright 2026 Cozens Software Solutions Limited
       2                 :             :  * SPDX-License-Identifier: PolyForm-Noncommercial-1.0.0 OR LicenseRef-PolyForm-Internal-Use-1.0.0 OR LicenseRef-COSOSO-Commercial
       3                 :             :  */
       4                 :             : 
       5                 :             : #include "SolidSyslogHeaderFieldPrivate.h"
       6                 :             : 
       7                 :             : #include <stddef.h>
       8                 :             : 
       9                 :             : #include "SolidSyslogFormatter.h"
      10                 :             : 
      11                 :             : static inline size_t HeaderField_Consumed(const struct SolidSyslogHeaderField* field, size_t before);
      12                 :             : 
      13                 :       19908 : void SolidSyslogHeaderField_FromFormatter(
      14                 :             :     struct SolidSyslogHeaderField* field,
      15                 :             :     struct SolidSyslogFormatter* formatter,
      16                 :             :     size_t maxLength
      17                 :             : )
      18                 :             : {
      19                 :       19908 :     field->Formatter = formatter;
      20                 :       19908 :     field->Remaining = maxLength;
      21                 :       19908 : }
      22                 :             : 
      23                 :         429 : void SolidSyslogHeaderField_PrintUsAscii(struct SolidSyslogHeaderField* field, const char* source, size_t maxLength)
      24                 :             : {
      25                 :         429 :     size_t limit = (maxLength < field->Remaining) ? maxLength : field->Remaining;
      26                 :         429 :     size_t before = SolidSyslogFormatter_Length(field->Formatter);
      27                 :             : 
      28                 :         429 :     SolidSyslogFormatter_PrintUsAsciiString(field->Formatter, source, limit);
      29                 :         429 :     field->Remaining -= HeaderField_Consumed(field, before);
      30                 :         429 : }
      31                 :             : 
      32                 :           4 : void SolidSyslogHeaderField_Uint32(struct SolidSyslogHeaderField* field, uint32_t value)
      33                 :             : {
      34                 :             :     /* Unlike SolidSyslogHeaderField_PrintUsAscii, SolidSyslogHeaderField_Uint32
      35                 :             :      * cannot pre-clamp its output to the field budget (the formatter writes the
      36                 :             :      * whole number), so guard the budget
      37                 :             :      * directly: skip once the field is full, and clamp to zero rather than
      38                 :             :      * letting the size_t subtraction underflow when this number alone overruns
      39                 :             :      * the remainder. A header-field callback may mix any number of appends. */
      40         [ +  + ]:           4 :     if (field->Remaining > 0U)
      41                 :             :     {
      42                 :           3 :         size_t before = SolidSyslogFormatter_Length(field->Formatter);
      43                 :             : 
      44                 :           3 :         SolidSyslogFormatter_Uint32(field->Formatter, value);
      45                 :           3 :         size_t consumed = HeaderField_Consumed(field, before);
      46         [ +  + ]:           3 :         field->Remaining = (consumed >= field->Remaining) ? 0U : (field->Remaining - consumed);
      47                 :             :     }
      48                 :           4 : }
      49                 :             : 
      50                 :         432 : static inline size_t HeaderField_Consumed(const struct SolidSyslogHeaderField* field, size_t before)
      51                 :             : {
      52                 :         432 :     return SolidSyslogFormatter_Length(field->Formatter) - before;
      53                 :             : }
        

Generated by: LCOV version 2.0-1