Coverage Report

Created: 2026-09-28 06:27

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/freeradius-server/src/freeradius-devel/server/module_ctx.h
Line
Count
Source
1
#pragma once
2
/*
3
 *  This program is free software; you can redistribute it and/or modify
4
 *  it under the terms of the GNU General Public License as published by
5
 *  the Free Software Foundation; either version 2 of the License, or
6
 *  (at your option) any later version.
7
 *
8
 *  This program is distributed in the hope that it will be useful,
9
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
10
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
 *  GNU General Public License for more details.
12
 *
13
 *  You should have received a copy of the GNU General Public License
14
 *  along with this program; if not, write to the Free Software
15
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
16
 */
17
18
/**
19
 * $Id: afc53873ffa82103b70995bef50240d7f97fcf5c $
20
 *
21
 * @file lib/server/module_ctx.h
22
 * @brief Temporary argument structures for module calls.
23
 *
24
 * These get used in various places where we may not want to include
25
 * the full module.h.
26
 *
27
 * @copyright 2021 Arran Cudbard-bell <a.cudbardb@freeradius.org>
28
 */
29
RCSIDH(module_ctx_h, "$Id: afc53873ffa82103b70995bef50240d7f97fcf5c $")
30
31
#include <freeradius-devel/util/event.h>
32
33
#ifdef __cplusplus
34
extern "C" {
35
#endif
36
typedef struct module_instance_s module_instance_t;
37
38
/** Temporary structure to hold arguments for module calls
39
 *
40
 */
41
typedef struct {
42
  module_instance_t const   *mi;    //!< Instance of the module being instantiated.
43
  void        *thread;  //!< Thread specific instance data.
44
  void        *env_data;  //!< Per call environment data.
45
  void        *rctx;    //!< Resume ctx that a module previously set.
46
} module_ctx_t;
47
48
/** Temporary structure to hold arguments for instantiation calls
49
 */
50
typedef struct {
51
  module_instance_t   *mi;    //!< Instance of the module being instantiated.
52
} module_inst_ctx_t;
53
54
/** Temporary structure to hold arguments for detach calls
55
 */
56
typedef struct {
57
  module_instance_t   *mi;    //!< Module instance to detach.
58
} module_detach_ctx_t;
59
60
/** Temporary structure to hold arguments for thread_instantiation calls
61
 *
62
 */
63
typedef struct {
64
  module_instance_t const   *mi;    //!< Instance of the module being instantiated.
65
              ///< Must come first to allow cast between
66
              ///< module_inst_ctx.
67
  void        *thread;  //!< Thread instance data.
68
  fr_event_list_t     *el;    //!< Event list to register any IO handlers
69
              ///< and timers against.
70
} module_thread_inst_ctx_t;
71
72
DIAG_OFF(unused-function)
73
/** Allocate a module calling ctx on the heap based on an instance ctx
74
 *
75
 */
76
static module_ctx_t *module_ctx_from_inst(TALLOC_CTX *ctx, module_inst_ctx_t const *mctx)
77
0
{
78
0
  module_ctx_t *nmctx;
79
80
0
  nmctx = talloc_zero(ctx, module_ctx_t);
81
0
  if (unlikely(!nmctx)) return NULL;
82
0
  nmctx->mi = mctx->mi;
83
84
0
  return nmctx;
85
0
}
Unexecuted instantiation: fuzzer_cf.c:module_ctx_from_inst
Unexecuted instantiation: fuzzer_xlat.c:module_ctx_from_inst
Unexecuted instantiation: fuzzer_tmpl.c:module_ctx_from_inst
Unexecuted instantiation: base.c:module_ctx_from_inst
Unexecuted instantiation: cache.c:module_ctx_from_inst
Unexecuted instantiation: conf.c:module_ctx_from_inst
Unexecuted instantiation: connection.c:module_ctx_from_inst
Unexecuted instantiation: ctx.c:module_ctx_from_inst
Unexecuted instantiation: log.c:module_ctx_from_inst
Unexecuted instantiation: pairs.c:module_ctx_from_inst
Unexecuted instantiation: session.c:module_ctx_from_inst
Unexecuted instantiation: strerror.c:module_ctx_from_inst
Unexecuted instantiation: verify.c:module_ctx_from_inst
Unexecuted instantiation: virtual_server.c:module_ctx_from_inst
Unexecuted instantiation: auth.c:module_ctx_from_inst
Unexecuted instantiation: cf_file.c:module_ctx_from_inst
Unexecuted instantiation: cf_parse.c:module_ctx_from_inst
Unexecuted instantiation: client.c:module_ctx_from_inst
Unexecuted instantiation: exec.c:module_ctx_from_inst
Unexecuted instantiation: exfile.c:module_ctx_from_inst
Unexecuted instantiation: global_lib.c:module_ctx_from_inst
Unexecuted instantiation: main_config.c:module_ctx_from_inst
Unexecuted instantiation: main_loop.c:module_ctx_from_inst
Unexecuted instantiation: map.c:module_ctx_from_inst
Unexecuted instantiation: map_proc.c:module_ctx_from_inst
Unexecuted instantiation: module.c:module_ctx_from_inst
Unexecuted instantiation: module_method.c:module_ctx_from_inst
Unexecuted instantiation: module_rlm.c:module_ctx_from_inst
Unexecuted instantiation: paircmp.c:module_ctx_from_inst
Unexecuted instantiation: pairmove.c:module_ctx_from_inst
Unexecuted instantiation: pool.c:module_ctx_from_inst
Unexecuted instantiation: state.c:module_ctx_from_inst
Unexecuted instantiation: tmpl_dcursor.c:module_ctx_from_inst
Unexecuted instantiation: tmpl_eval.c:module_ctx_from_inst
Unexecuted instantiation: tmpl_tokenize.c:module_ctx_from_inst
Unexecuted instantiation: trigger.c:module_ctx_from_inst
Unexecuted instantiation: trunk.c:module_ctx_from_inst
Unexecuted instantiation: users_file.c:module_ctx_from_inst
Unexecuted instantiation: util.c:module_ctx_from_inst
Unexecuted instantiation: virtual_servers.c:module_ctx_from_inst
Unexecuted instantiation: call.c:module_ctx_from_inst
Unexecuted instantiation: call_env.c:module_ctx_from_inst
Unexecuted instantiation: caller.c:module_ctx_from_inst
Unexecuted instantiation: catch.c:module_ctx_from_inst
Unexecuted instantiation: child_request.c:module_ctx_from_inst
Unexecuted instantiation: compile.c:module_ctx_from_inst
Unexecuted instantiation: condition.c:module_ctx_from_inst
Unexecuted instantiation: detach.c:module_ctx_from_inst
Unexecuted instantiation: edit.c:module_ctx_from_inst
Unexecuted instantiation: finally.c:module_ctx_from_inst
Unexecuted instantiation: foreach.c:module_ctx_from_inst
Unexecuted instantiation: function.c:module_ctx_from_inst
Unexecuted instantiation: group.c:module_ctx_from_inst
Unexecuted instantiation: interpret.c:module_ctx_from_inst
Unexecuted instantiation: interpret_synchronous.c:module_ctx_from_inst
Unexecuted instantiation: io.c:module_ctx_from_inst
Unexecuted instantiation: limit.c:module_ctx_from_inst
Unexecuted instantiation: load_balance.c:module_ctx_from_inst
Unexecuted instantiation: map_builtin.c:module_ctx_from_inst
Unexecuted instantiation: parallel.c:module_ctx_from_inst
Unexecuted instantiation: return.c:module_ctx_from_inst
Unexecuted instantiation: subrequest.c:module_ctx_from_inst
Unexecuted instantiation: switch.c:module_ctx_from_inst
Unexecuted instantiation: timeout.c:module_ctx_from_inst
Unexecuted instantiation: tmpl.c:module_ctx_from_inst
Unexecuted instantiation: try.c:module_ctx_from_inst
Unexecuted instantiation: transaction.c:module_ctx_from_inst
Unexecuted instantiation: xlat.c:module_ctx_from_inst
Unexecuted instantiation: xlat_alloc.c:module_ctx_from_inst
Unexecuted instantiation: xlat_builtin.c:module_ctx_from_inst
Unexecuted instantiation: xlat_eval.c:module_ctx_from_inst
Unexecuted instantiation: xlat_expr.c:module_ctx_from_inst
Unexecuted instantiation: xlat_func.c:module_ctx_from_inst
Unexecuted instantiation: xlat_inst.c:module_ctx_from_inst
Unexecuted instantiation: xlat_pair.c:module_ctx_from_inst
Unexecuted instantiation: xlat_profiling.c:module_ctx_from_inst
Unexecuted instantiation: xlat_purify.c:module_ctx_from_inst
Unexecuted instantiation: xlat_redundant.c:module_ctx_from_inst
Unexecuted instantiation: xlat_tokenize.c:module_ctx_from_inst
Unexecuted instantiation: json.c:module_ctx_from_inst
Unexecuted instantiation: jpath.c:module_ctx_from_inst
Unexecuted instantiation: app_io.c:module_ctx_from_inst
Unexecuted instantiation: coord.c:module_ctx_from_inst
Unexecuted instantiation: coord_pair.c:module_ctx_from_inst
Unexecuted instantiation: master.c:module_ctx_from_inst
Unexecuted instantiation: network.c:module_ctx_from_inst
Unexecuted instantiation: schedule.c:module_ctx_from_inst
Unexecuted instantiation: thread.c:module_ctx_from_inst
Unexecuted instantiation: worker.c:module_ctx_from_inst
86
87
/** Allocate a module calling ctx on the heap based on an instance ctx
88
 *
89
 */
90
static module_ctx_t *module_ctx_from_thread_inst(TALLOC_CTX *ctx, module_thread_inst_ctx_t const *mctx)
91
0
{
92
0
  module_ctx_t *nmctx;
93
0
94
0
  nmctx = talloc_zero(ctx, module_ctx_t);
95
0
  if (unlikely(!nmctx)) return NULL;
96
0
  nmctx->mi = mctx->mi;
97
0
  nmctx->thread = mctx->thread;
98
0
99
0
  return nmctx;
100
0
}
Unexecuted instantiation: fuzzer_cf.c:module_ctx_from_thread_inst
Unexecuted instantiation: fuzzer_xlat.c:module_ctx_from_thread_inst
Unexecuted instantiation: fuzzer_tmpl.c:module_ctx_from_thread_inst
Unexecuted instantiation: base.c:module_ctx_from_thread_inst
Unexecuted instantiation: cache.c:module_ctx_from_thread_inst
Unexecuted instantiation: conf.c:module_ctx_from_thread_inst
Unexecuted instantiation: connection.c:module_ctx_from_thread_inst
Unexecuted instantiation: ctx.c:module_ctx_from_thread_inst
Unexecuted instantiation: log.c:module_ctx_from_thread_inst
Unexecuted instantiation: pairs.c:module_ctx_from_thread_inst
Unexecuted instantiation: session.c:module_ctx_from_thread_inst
Unexecuted instantiation: strerror.c:module_ctx_from_thread_inst
Unexecuted instantiation: verify.c:module_ctx_from_thread_inst
Unexecuted instantiation: virtual_server.c:module_ctx_from_thread_inst
Unexecuted instantiation: auth.c:module_ctx_from_thread_inst
Unexecuted instantiation: cf_file.c:module_ctx_from_thread_inst
Unexecuted instantiation: cf_parse.c:module_ctx_from_thread_inst
Unexecuted instantiation: client.c:module_ctx_from_thread_inst
Unexecuted instantiation: exec.c:module_ctx_from_thread_inst
Unexecuted instantiation: exfile.c:module_ctx_from_thread_inst
Unexecuted instantiation: global_lib.c:module_ctx_from_thread_inst
Unexecuted instantiation: main_config.c:module_ctx_from_thread_inst
Unexecuted instantiation: main_loop.c:module_ctx_from_thread_inst
Unexecuted instantiation: map.c:module_ctx_from_thread_inst
Unexecuted instantiation: map_proc.c:module_ctx_from_thread_inst
Unexecuted instantiation: module.c:module_ctx_from_thread_inst
Unexecuted instantiation: module_method.c:module_ctx_from_thread_inst
Unexecuted instantiation: module_rlm.c:module_ctx_from_thread_inst
Unexecuted instantiation: paircmp.c:module_ctx_from_thread_inst
Unexecuted instantiation: pairmove.c:module_ctx_from_thread_inst
Unexecuted instantiation: pool.c:module_ctx_from_thread_inst
Unexecuted instantiation: state.c:module_ctx_from_thread_inst
Unexecuted instantiation: tmpl_dcursor.c:module_ctx_from_thread_inst
Unexecuted instantiation: tmpl_eval.c:module_ctx_from_thread_inst
Unexecuted instantiation: tmpl_tokenize.c:module_ctx_from_thread_inst
Unexecuted instantiation: trigger.c:module_ctx_from_thread_inst
Unexecuted instantiation: trunk.c:module_ctx_from_thread_inst
Unexecuted instantiation: users_file.c:module_ctx_from_thread_inst
Unexecuted instantiation: util.c:module_ctx_from_thread_inst
Unexecuted instantiation: virtual_servers.c:module_ctx_from_thread_inst
Unexecuted instantiation: call.c:module_ctx_from_thread_inst
Unexecuted instantiation: call_env.c:module_ctx_from_thread_inst
Unexecuted instantiation: caller.c:module_ctx_from_thread_inst
Unexecuted instantiation: catch.c:module_ctx_from_thread_inst
Unexecuted instantiation: child_request.c:module_ctx_from_thread_inst
Unexecuted instantiation: compile.c:module_ctx_from_thread_inst
Unexecuted instantiation: condition.c:module_ctx_from_thread_inst
Unexecuted instantiation: detach.c:module_ctx_from_thread_inst
Unexecuted instantiation: edit.c:module_ctx_from_thread_inst
Unexecuted instantiation: finally.c:module_ctx_from_thread_inst
Unexecuted instantiation: foreach.c:module_ctx_from_thread_inst
Unexecuted instantiation: function.c:module_ctx_from_thread_inst
Unexecuted instantiation: group.c:module_ctx_from_thread_inst
Unexecuted instantiation: interpret.c:module_ctx_from_thread_inst
Unexecuted instantiation: interpret_synchronous.c:module_ctx_from_thread_inst
Unexecuted instantiation: io.c:module_ctx_from_thread_inst
Unexecuted instantiation: limit.c:module_ctx_from_thread_inst
Unexecuted instantiation: load_balance.c:module_ctx_from_thread_inst
Unexecuted instantiation: map_builtin.c:module_ctx_from_thread_inst
Unexecuted instantiation: parallel.c:module_ctx_from_thread_inst
Unexecuted instantiation: return.c:module_ctx_from_thread_inst
Unexecuted instantiation: subrequest.c:module_ctx_from_thread_inst
Unexecuted instantiation: switch.c:module_ctx_from_thread_inst
Unexecuted instantiation: timeout.c:module_ctx_from_thread_inst
Unexecuted instantiation: tmpl.c:module_ctx_from_thread_inst
Unexecuted instantiation: try.c:module_ctx_from_thread_inst
Unexecuted instantiation: transaction.c:module_ctx_from_thread_inst
Unexecuted instantiation: xlat.c:module_ctx_from_thread_inst
Unexecuted instantiation: xlat_alloc.c:module_ctx_from_thread_inst
Unexecuted instantiation: xlat_builtin.c:module_ctx_from_thread_inst
Unexecuted instantiation: xlat_eval.c:module_ctx_from_thread_inst
Unexecuted instantiation: xlat_expr.c:module_ctx_from_thread_inst
Unexecuted instantiation: xlat_func.c:module_ctx_from_thread_inst
Unexecuted instantiation: xlat_inst.c:module_ctx_from_thread_inst
Unexecuted instantiation: xlat_pair.c:module_ctx_from_thread_inst
Unexecuted instantiation: xlat_profiling.c:module_ctx_from_thread_inst
Unexecuted instantiation: xlat_purify.c:module_ctx_from_thread_inst
Unexecuted instantiation: xlat_redundant.c:module_ctx_from_thread_inst
Unexecuted instantiation: xlat_tokenize.c:module_ctx_from_thread_inst
Unexecuted instantiation: json.c:module_ctx_from_thread_inst
Unexecuted instantiation: jpath.c:module_ctx_from_thread_inst
Unexecuted instantiation: app_io.c:module_ctx_from_thread_inst
Unexecuted instantiation: coord.c:module_ctx_from_thread_inst
Unexecuted instantiation: coord_pair.c:module_ctx_from_thread_inst
Unexecuted instantiation: master.c:module_ctx_from_thread_inst
Unexecuted instantiation: network.c:module_ctx_from_thread_inst
Unexecuted instantiation: schedule.c:module_ctx_from_thread_inst
Unexecuted instantiation: thread.c:module_ctx_from_thread_inst
Unexecuted instantiation: worker.c:module_ctx_from_thread_inst
101
102
/** Duplicate a stack based module_ctx_t on the heap
103
 *
104
 */
105
static module_ctx_t *module_ctx_dup(TALLOC_CTX *ctx, module_ctx_t const *mctx)
106
0
{
107
0
  module_ctx_t *nmctx;
108
0
109
0
  nmctx = talloc_zero(ctx, module_ctx_t);
110
0
  if (unlikely(!nmctx)) return NULL;
111
0
  memcpy(nmctx, mctx, sizeof(*nmctx));
112
0
113
0
  return nmctx;
114
0
}
Unexecuted instantiation: fuzzer_cf.c:module_ctx_dup
Unexecuted instantiation: fuzzer_xlat.c:module_ctx_dup
Unexecuted instantiation: fuzzer_tmpl.c:module_ctx_dup
Unexecuted instantiation: base.c:module_ctx_dup
Unexecuted instantiation: cache.c:module_ctx_dup
Unexecuted instantiation: conf.c:module_ctx_dup
Unexecuted instantiation: connection.c:module_ctx_dup
Unexecuted instantiation: ctx.c:module_ctx_dup
Unexecuted instantiation: log.c:module_ctx_dup
Unexecuted instantiation: pairs.c:module_ctx_dup
Unexecuted instantiation: session.c:module_ctx_dup
Unexecuted instantiation: strerror.c:module_ctx_dup
Unexecuted instantiation: verify.c:module_ctx_dup
Unexecuted instantiation: virtual_server.c:module_ctx_dup
Unexecuted instantiation: auth.c:module_ctx_dup
Unexecuted instantiation: cf_file.c:module_ctx_dup
Unexecuted instantiation: cf_parse.c:module_ctx_dup
Unexecuted instantiation: client.c:module_ctx_dup
Unexecuted instantiation: exec.c:module_ctx_dup
Unexecuted instantiation: exfile.c:module_ctx_dup
Unexecuted instantiation: global_lib.c:module_ctx_dup
Unexecuted instantiation: main_config.c:module_ctx_dup
Unexecuted instantiation: main_loop.c:module_ctx_dup
Unexecuted instantiation: map.c:module_ctx_dup
Unexecuted instantiation: map_proc.c:module_ctx_dup
Unexecuted instantiation: module.c:module_ctx_dup
Unexecuted instantiation: module_method.c:module_ctx_dup
Unexecuted instantiation: module_rlm.c:module_ctx_dup
Unexecuted instantiation: paircmp.c:module_ctx_dup
Unexecuted instantiation: pairmove.c:module_ctx_dup
Unexecuted instantiation: pool.c:module_ctx_dup
Unexecuted instantiation: state.c:module_ctx_dup
Unexecuted instantiation: tmpl_dcursor.c:module_ctx_dup
Unexecuted instantiation: tmpl_eval.c:module_ctx_dup
Unexecuted instantiation: tmpl_tokenize.c:module_ctx_dup
Unexecuted instantiation: trigger.c:module_ctx_dup
Unexecuted instantiation: trunk.c:module_ctx_dup
Unexecuted instantiation: users_file.c:module_ctx_dup
Unexecuted instantiation: util.c:module_ctx_dup
Unexecuted instantiation: virtual_servers.c:module_ctx_dup
Unexecuted instantiation: call.c:module_ctx_dup
Unexecuted instantiation: call_env.c:module_ctx_dup
Unexecuted instantiation: caller.c:module_ctx_dup
Unexecuted instantiation: catch.c:module_ctx_dup
Unexecuted instantiation: child_request.c:module_ctx_dup
Unexecuted instantiation: compile.c:module_ctx_dup
Unexecuted instantiation: condition.c:module_ctx_dup
Unexecuted instantiation: detach.c:module_ctx_dup
Unexecuted instantiation: edit.c:module_ctx_dup
Unexecuted instantiation: finally.c:module_ctx_dup
Unexecuted instantiation: foreach.c:module_ctx_dup
Unexecuted instantiation: function.c:module_ctx_dup
Unexecuted instantiation: group.c:module_ctx_dup
Unexecuted instantiation: interpret.c:module_ctx_dup
Unexecuted instantiation: interpret_synchronous.c:module_ctx_dup
Unexecuted instantiation: io.c:module_ctx_dup
Unexecuted instantiation: limit.c:module_ctx_dup
Unexecuted instantiation: load_balance.c:module_ctx_dup
Unexecuted instantiation: map_builtin.c:module_ctx_dup
Unexecuted instantiation: parallel.c:module_ctx_dup
Unexecuted instantiation: return.c:module_ctx_dup
Unexecuted instantiation: subrequest.c:module_ctx_dup
Unexecuted instantiation: switch.c:module_ctx_dup
Unexecuted instantiation: timeout.c:module_ctx_dup
Unexecuted instantiation: tmpl.c:module_ctx_dup
Unexecuted instantiation: try.c:module_ctx_dup
Unexecuted instantiation: transaction.c:module_ctx_dup
Unexecuted instantiation: xlat.c:module_ctx_dup
Unexecuted instantiation: xlat_alloc.c:module_ctx_dup
Unexecuted instantiation: xlat_builtin.c:module_ctx_dup
Unexecuted instantiation: xlat_eval.c:module_ctx_dup
Unexecuted instantiation: xlat_expr.c:module_ctx_dup
Unexecuted instantiation: xlat_func.c:module_ctx_dup
Unexecuted instantiation: xlat_inst.c:module_ctx_dup
Unexecuted instantiation: xlat_pair.c:module_ctx_dup
Unexecuted instantiation: xlat_profiling.c:module_ctx_dup
Unexecuted instantiation: xlat_purify.c:module_ctx_dup
Unexecuted instantiation: xlat_redundant.c:module_ctx_dup
Unexecuted instantiation: xlat_tokenize.c:module_ctx_dup
Unexecuted instantiation: json.c:module_ctx_dup
Unexecuted instantiation: jpath.c:module_ctx_dup
Unexecuted instantiation: app_io.c:module_ctx_dup
Unexecuted instantiation: coord.c:module_ctx_dup
Unexecuted instantiation: coord_pair.c:module_ctx_dup
Unexecuted instantiation: master.c:module_ctx_dup
Unexecuted instantiation: network.c:module_ctx_dup
Unexecuted instantiation: schedule.c:module_ctx_dup
Unexecuted instantiation: thread.c:module_ctx_dup
Unexecuted instantiation: worker.c:module_ctx_dup
115
DIAG_ON(unused-function)
116
117
/** Wrapper to create a module_ctx_t as a compound literal
118
 *
119
 * This is used so that the compiler will flag any uses of (module_ctx_t)
120
 * which don't set the required fields.  Additional arguments should be added
121
 * to this macro whenever the module_ctx_t fields are altered.
122
 *
123
 * @param[in] _mi of the module being called.
124
 * @param[in] _thread   instance of the module being called.
125
 * @param[in] _env_data Call environment data.
126
 * @param[in] _rctx Resume ctx (if any).
127
 */
128
0
#define MODULE_CTX(_mi, _thread, _env_data, _rctx) &(module_ctx_t){ .mi = _mi, .thread = _thread, .env_data = _env_data, .rctx = _rctx }
129
130
/** Wrapper to create a module_ctx_t as a compound literal from a module_inst_ctx_t
131
 *
132
 * This is used so that the compiler will flag any uses of (module_ctx_t)
133
 * which don't set the required fields.  Additional arguments should be added
134
 * to this macro whenever the module_ctx_t fields are altered.
135
 *
136
 * @param[in] _mctx to copy fields from.
137
 */
138
#define MODULE_CTX_FROM_INST(_mctx) &(module_ctx_t){ .mi = (_mctx)->mi }
139
140
/** Wrapper to create a module_ctx_t as a compound literal from a module_inst_ctx_t
141
 *
142
 * This is used so that the compiler will flag any uses of (module_ctx_t)
143
 * which don't set the required fields.  Additional arguments should be added
144
 * to this macro whenever the module_ctx_t fields are altered.
145
 *
146
 * @param[in] _mctx to copy fields from.
147
 */
148
#define MODULE_CTX_FROM_THREAD_INST(_mctx) &(module_ctx_t){ .mi = (_mctx)->mi, .thread = (_mctx)->thread, .env_data = (_mctx)->env_data }
149
150
/** Wrapper to create a module_inst_ctx_t as a compound literal
151
 *
152
 * This is used so that the compiler will flag any uses of (module_inst_ctx_t)
153
 * which don't set the required fields.  Additional arguments should be added
154
 * to this macro whenever the module_inst_ctx_t fields are altered.
155
 *
156
 * @param[in] _mi of the module being called..
157
 */
158
0
#define MODULE_INST_CTX(_mi) &(module_inst_ctx_t){ .mi = _mi }
159
160
/** Wrapper to create a module_detach_ctx_t as a compound literal
161
 *
162
 * @param[in] _mi of the module being called..
163
 */
164
0
#define MODULE_DETACH_CTX(_mi) &(module_detach_ctx_t){ .mi = _mi }
165
166
/** Wrapper to create a module_thread_inst_ctx_t as a compound literal
167
 *
168
 * This is used so that the compiler will flag any uses of (module_thread_inst_ctx_t)
169
 * which don't set the required fields.  Additional arguments should be added
170
 * to this macro whenever the module_thread_inst_ctx_t fields are altered.
171
 *
172
 * @param[in] _mi of the module being called.
173
 * @param[in] _thread   instance of the module being called.
174
 * @param[in] _el Thread specific event list.
175
 */
176
0
#define MODULE_THREAD_INST_CTX(_mi, _thread, _el) &(module_thread_inst_ctx_t){ .mi = _mi, .thread = _thread, .el = _el }
177
178
/** Wrapper to create a module_inst_ctx_t as a compound literal from a module_thread_ctx_t
179
 *
180
 * Extract the module_instance_t from a module_thread_inst_ctx_t.
181
 *
182
 * @param[in] _mctx to extract module_thread_inst_ctx_t from.
183
 */
184
#define MODULE_THREAD_INST_CTX_FROM_INST_CTX(_mctx) &(module_ctx_t){ .mi = (_mctx)->mi }
185
186
#ifdef __cplusplus
187
}
188
#endif