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 "SolidSyslogSharedScratch.h"
6 :
7 : #include <stddef.h>
8 :
9 : #include "SolidSyslogError.h"
10 : #include "SolidSyslogMutex.h"
11 : #include "SolidSyslogScratch.h"
12 : #include "SolidSyslogSharedScratchErrors.h"
13 : #include "SolidSyslogSharedScratchPrivate.h"
14 : #include "SolidSyslogStackScratch.h"
15 : #include "SolidSyslogTunables.h"
16 :
17 : const struct SolidSyslogErrorSource SolidSyslogSharedScratchErrorSource = {
18 : "SharedScratch",
19 : SolidSyslogSharedScratchErrors_Name
20 : };
21 :
22 : static void SharedScratch_WithScratch(struct SolidSyslogScratch* base, SolidSyslogScratchUser use, void* context);
23 :
24 : static inline struct SolidSyslogSharedScratch* SharedScratch_SelfFromBase(struct SolidSyslogScratch* base);
25 :
26 23 : void SolidSyslogSharedScratch_Initialise(struct SolidSyslogScratch* base, struct SolidSyslogMutex* mutex)
27 : {
28 23 : struct SolidSyslogSharedScratch* self = SharedScratch_SelfFromBase(base);
29 23 : self->Base.WithScratch = SharedScratch_WithScratch;
30 23 : self->Mutex = mutex;
31 23 : }
32 :
33 23 : void SolidSyslogSharedScratch_Cleanup(struct SolidSyslogScratch* base)
34 : {
35 : /* A stale handle formats on the stack after Destroy, which is safe, rather
36 : * than through a NULL function pointer or a mutex that may be gone. */
37 23 : *base = *SolidSyslogStackScratch_Get();
38 23 : }
39 :
40 10 : static void SharedScratch_WithScratch(struct SolidSyslogScratch* base, SolidSyslogScratchUser use, void* context)
41 : {
42 10 : struct SolidSyslogSharedScratch* self = SharedScratch_SelfFromBase(base);
43 10 : SolidSyslogMutex_Lock(self->Mutex);
44 10 : use(self->Storage, SOLIDSYSLOG_MAX_MESSAGE_SIZE, context);
45 10 : SolidSyslogMutex_Unlock(self->Mutex);
46 10 : }
47 :
48 33 : static inline struct SolidSyslogSharedScratch* SharedScratch_SelfFromBase(struct SolidSyslogScratch* base)
49 : {
50 33 : return (struct SolidSyslogSharedScratch*) base;
51 : }
|