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 "SolidSyslogMetaSd.h"
6 : :
7 : : #include <stddef.h>
8 : :
9 : : #include "SolidSyslogAtomicCounter.h"
10 : : #include "SolidSyslogError.h"
11 : : #include "SolidSyslogMetaSdErrors.h"
12 : : #include "SolidSyslogMetaSdPrivate.h"
13 : : #include "SolidSyslogNullSd.h"
14 : : #include "SolidSyslogSdElement.h"
15 : : #include "SolidSyslogSdValue.h"
16 : : #include "SolidSyslogStructuredDataDefinition.h"
17 : :
18 : : const struct SolidSyslogErrorSource SolidSyslogMetaSdErrorSource = {"MetaSd", SolidSyslogMetaSdErrors_Name};
19 : :
20 : : static void MetaSd_Format(struct SolidSyslogStructuredData* base, struct SolidSyslogSdElement* element);
21 : :
22 : : static inline struct SolidSyslogMetaSd* MetaSd_SelfFromBase(struct SolidSyslogStructuredData* base);
23 : :
24 : 185 : void SolidSyslogMetaSd_Initialise(struct SolidSyslogStructuredData* base, const struct SolidSyslogMetaSdConfig* config)
25 : : {
26 : 185 : struct SolidSyslogMetaSd* self = MetaSd_SelfFromBase(base);
27 : 185 : self->Base.Format = MetaSd_Format;
28 : 185 : self->Counter = config->Counter;
29 : 185 : self->GetSysUpTime = config->GetSysUpTime;
30 : 185 : self->GetLanguage = config->GetLanguage;
31 : 185 : self->LanguageContext = config->LanguageContext;
32 : 185 : }
33 : :
34 : 185 : void SolidSyslogMetaSd_Cleanup(struct SolidSyslogStructuredData* base)
35 : : {
36 : : /* Overwrite the abstract base with the shared NullSd vtable so use-after-destroy
37 : : * is a safe no-op rather than a NULL-fn-pointer crash. Derived fields are private
38 : : * to this TU; the next SolidSyslogMetaSd_Initialise overwrites them. */
39 : 185 : *base = *SolidSyslogNullSd_Get();
40 : 185 : }
41 : :
42 : 6404 : static void MetaSd_Format(struct SolidSyslogStructuredData* base, struct SolidSyslogSdElement* element)
43 : : {
44 : 6404 : struct SolidSyslogMetaSd* self = MetaSd_SelfFromBase(base);
45 : :
46 : 6404 : SolidSyslogSdElement_Begin(element, "meta", 0U);
47 : 6404 : SolidSyslogSdValue_Uint32(
48 : : SolidSyslogSdElement_Param(element, "sequenceId"),
49 : : SolidSyslogAtomicCounter_Increment(self->Counter)
50 : : );
51 [ + + ]: 6404 : if (self->GetSysUpTime != NULL)
52 : : {
53 : 48 : SolidSyslogSdValue_Uint32(SolidSyslogSdElement_Param(element, "sysUpTime"), self->GetSysUpTime());
54 : : }
55 [ + + ]: 6404 : if (self->GetLanguage != NULL)
56 : : {
57 : 50 : self->GetLanguage(SolidSyslogSdElement_Param(element, "language"), self->LanguageContext);
58 : : }
59 : 6404 : SolidSyslogSdElement_End(element);
60 : 6404 : }
61 : :
62 : 6589 : static inline struct SolidSyslogMetaSd* MetaSd_SelfFromBase(struct SolidSyslogStructuredData* base)
63 : : {
64 : 6589 : return (struct SolidSyslogMetaSd*) base;
65 : : }
|