/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 |