Coverage Report

Created: 2024-01-26 01:52

/work/toxcore/events/group_self_join.c
Line
Count
Source (jump to first uncovered line)
1
/* SPDX-License-Identifier: GPL-3.0-or-later
2
 * Copyright © 2023-2024 The TokTok team.
3
 */
4
5
#include "events_alloc.h"
6
7
#include <assert.h>
8
9
#include "../bin_pack.h"
10
#include "../bin_unpack.h"
11
#include "../ccompat.h"
12
#include "../mem.h"
13
#include "../tox.h"
14
#include "../tox_events.h"
15
16
17
/*****************************************************
18
 *
19
 * :: struct and accessors
20
 *
21
 *****************************************************/
22
23
24
struct Tox_Event_Group_Self_Join {
25
    uint32_t group_number;
26
};
27
28
non_null()
29
static void tox_event_group_self_join_set_group_number(Tox_Event_Group_Self_Join *group_self_join,
30
        uint32_t group_number)
31
103
{
32
103
    assert(group_self_join != nullptr);
33
103
    group_self_join->group_number = group_number;
34
103
}
35
uint32_t tox_event_group_self_join_get_group_number(const Tox_Event_Group_Self_Join *group_self_join)
36
2
{
37
2
    assert(group_self_join != nullptr);
38
2
    return group_self_join->group_number;
39
2
}
40
41
non_null()
42
static void tox_event_group_self_join_construct(Tox_Event_Group_Self_Join *group_self_join)
43
126
{
44
126
    *group_self_join = (Tox_Event_Group_Self_Join) {
45
126
        0
46
126
    };
47
126
}
48
non_null()
49
static void tox_event_group_self_join_destruct(Tox_Event_Group_Self_Join *group_self_join, const Memory *mem)
50
126
{
51
126
    return;
52
126
}
53
54
bool tox_event_group_self_join_pack(
55
    const Tox_Event_Group_Self_Join *event, Bin_Pack *bp)
56
24
{
57
24
    return bin_pack_u32(bp, event->group_number);
58
24
}
59
60
non_null()
61
static bool tox_event_group_self_join_unpack_into(
62
    Tox_Event_Group_Self_Join *event, Bin_Unpack *bu)
63
23
{
64
23
    assert(event != nullptr);
65
23
    return bin_unpack_u32(bu, &event->group_number);
66
23
}
67
68
69
/*****************************************************
70
 *
71
 * :: new/free/add/get/size/unpack
72
 *
73
 *****************************************************/
74
75
const Tox_Event_Group_Self_Join *tox_event_get_group_self_join(const Tox_Event *event)
76
0
{
77
0
    return event->type == TOX_EVENT_GROUP_SELF_JOIN ? event->data.group_self_join : nullptr;
78
0
}
79
80
Tox_Event_Group_Self_Join *tox_event_group_self_join_new(const Memory *mem)
81
128
{
82
128
    Tox_Event_Group_Self_Join *const group_self_join =
83
128
        (Tox_Event_Group_Self_Join *)mem_alloc(mem, sizeof(Tox_Event_Group_Self_Join));
84
85
128
    if (group_self_join == nullptr) {
86
2
        return nullptr;
87
2
    }
88
89
126
    tox_event_group_self_join_construct(group_self_join);
90
126
    return group_self_join;
91
128
}
92
93
void tox_event_group_self_join_free(Tox_Event_Group_Self_Join *group_self_join, const Memory *mem)
94
127
{
95
127
    if (group_self_join != nullptr) {
96
126
        tox_event_group_self_join_destruct(group_self_join, mem);
97
126
    }
98
127
    mem_delete(mem, group_self_join);
99
127
}
100
101
non_null()
102
static Tox_Event_Group_Self_Join *tox_events_add_group_self_join(Tox_Events *events, const Memory *mem)
103
104
{
104
104
    Tox_Event_Group_Self_Join *const group_self_join = tox_event_group_self_join_new(mem);
105
106
104
    if (group_self_join == nullptr) {
107
1
        return nullptr;
108
1
    }
109
110
103
    Tox_Event event;
111
103
    event.type = TOX_EVENT_GROUP_SELF_JOIN;
112
103
    event.data.group_self_join = group_self_join;
113
114
103
    tox_events_add(events, &event);
115
103
    return group_self_join;
116
104
}
117
118
bool tox_event_group_self_join_unpack(
119
    Tox_Event_Group_Self_Join **event, Bin_Unpack *bu, const Memory *mem)
120
24
{
121
24
    assert(event != nullptr);
122
24
    assert(*event == nullptr);
123
24
    *event = tox_event_group_self_join_new(mem);
124
125
24
    if (*event == nullptr) {
126
1
        return false;
127
1
    }
128
129
23
    return tox_event_group_self_join_unpack_into(*event, bu);
130
24
}
131
132
non_null()
133
static Tox_Event_Group_Self_Join *tox_event_group_self_join_alloc(void *user_data)
134
105
{
135
105
    Tox_Events_State *state = tox_events_alloc(user_data);
136
105
    assert(state != nullptr);
137
138
105
    if (state->events == nullptr) {
139
1
        return nullptr;
140
1
    }
141
142
104
    Tox_Event_Group_Self_Join *group_self_join = tox_events_add_group_self_join(state->events, state->mem);
143
144
104
    if (group_self_join == nullptr) {
145
1
        state->error = TOX_ERR_EVENTS_ITERATE_MALLOC;
146
1
        return nullptr;
147
1
    }
148
149
103
    return group_self_join;
150
104
}
151
152
153
/*****************************************************
154
 *
155
 * :: event handler
156
 *
157
 *****************************************************/
158
159
160
void tox_events_handle_group_self_join(Tox *tox, uint32_t group_number,
161
        void *user_data)
162
105
{
163
105
    Tox_Event_Group_Self_Join *group_self_join = tox_event_group_self_join_alloc(user_data);
164
165
105
    if (group_self_join == nullptr) {
166
2
        return;
167
2
    }
168
169
103
    tox_event_group_self_join_set_group_number(group_self_join, group_number);
170
103
}