Skip to content

Commit a91a9ba

Browse files
committed
add HMAC module state
This adds the `hmacmodule_state` structure. This structure will grow later, containing interned strings, specific exception types, object types as well as internal data.
1 parent aa68c2d commit a91a9ba

File tree

1 file changed

+45
-0
lines changed

1 file changed

+45
-0
lines changed

Modules/hmacmodule.c

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,19 @@
1818

1919
#include "Python.h"
2020

21+
// --- HMAC module state ------------------------------------------------------
22+
23+
typedef struct hmacmodule_state {
24+
} hmacmodule_state;
25+
26+
static inline hmacmodule_state *
27+
get_hmacmodule_state(PyObject *module)
28+
{
29+
void *state = PyModule_GetState(module);
30+
assert(state != NULL);
31+
return (hmacmodule_state *)state;
32+
}
33+
2134
// --- HMAC module clinic configuration ---------------------------------------
2235

2336
/*[clinic input]
@@ -33,7 +46,36 @@ static PyMethodDef hmacmodule_methods[] = {
3346

3447
// --- HMAC module initialization and finalization functions ------------------
3548

49+
static int
50+
hmacmodule_exec(PyObject *module)
51+
{
52+
hmacmodule_state *state = get_hmacmodule_state(module);
53+
return 0;
54+
}
55+
56+
static int
57+
hmacmodule_traverse(PyObject *mod, visitproc visit, void *arg)
58+
{
59+
Py_VISIT(Py_TYPE(mod));
60+
hmacmodule_state *state = get_hmacmodule_state(mod);
61+
return 0;
62+
}
63+
64+
static int
65+
hmacmodule_clear(PyObject *mod)
66+
{
67+
hmacmodule_state *state = get_hmacmodule_state(mod);
68+
return 0;
69+
}
70+
71+
static inline void
72+
hmacmodule_free(void *mod)
73+
{
74+
(void)hmacmodule_clear((PyObject *)mod);
75+
}
76+
3677
static struct PyModuleDef_Slot hmacmodule_slots[] = {
78+
{Py_mod_exec, hmacmodule_exec},
3779
{Py_mod_multiple_interpreters, Py_MOD_PER_INTERPRETER_GIL_SUPPORTED},
3880
{Py_mod_gil, Py_MOD_GIL_NOT_USED},
3981
{0, NULL} /* sentinel */
@@ -45,6 +87,9 @@ static struct PyModuleDef _hmacmodule = {
4587
.m_size = sizeof(hmacmodule_state),
4688
.m_methods = hmacmodule_methods,
4789
.m_slots = hmacmodule_slots,
90+
.m_traverse = hmacmodule_traverse,
91+
.m_clear = hmacmodule_clear,
92+
.m_free = hmacmodule_free,
4893
};
4994

5095
PyMODINIT_FUNC

0 commit comments

Comments
 (0)