Coverage Report

Created: 2024-01-26 01:52

/work/toxcore/events/events_alloc.c
Line
Count
Source (jump to first uncovered line)
1
/* SPDX-License-Identifier: GPL-3.0-or-later
2
 * Copyright © 2022 The TokTok team.
3
 */
4
5
#include "events_alloc.h"
6
7
#include <assert.h>
8
9
#include "../ccompat.h"
10
#include "../mem.h"
11
#include "../tox_event.h"
12
#include "../tox_events.h"
13
14
Tox_Events_State *tox_events_alloc(void *user_data)
15
422k
{
16
422k
    Tox_Events_State *state = (Tox_Events_State *)user_data;
17
422k
    assert(state != nullptr);
18
422k
    assert(state->mem != nullptr);
19
20
422k
    if (state->events != nullptr) {
21
        // Already allocated.
22
397k
        return state;
23
397k
    }
24
25
25.0k
    Tox_Events *events = (Tox_Events *)mem_alloc(state->mem, sizeof(Tox_Events));
26
27
25.0k
    if (events == nullptr) {
28
        // It's still null => allocation failed.
29
121
        state->events = nullptr;
30
121
        state->error = TOX_ERR_EVENTS_ITERATE_MALLOC;
31
121
        return state;
32
121
    }
33
34
24.9k
    *events = (Tox_Events) {
35
24.9k
        nullptr
36
24.9k
    };
37
24.9k
    state->events = events;
38
24.9k
    state->events->mem = state->mem;
39
40
24.9k
    return state;
41
25.0k
}
42
43
void tox_events_free(Tox_Events *events)
44
195k
{
45
195k
    if (events == nullptr) {
46
169k
        return;
47
169k
    }
48
49
449k
    for (uint32_t i = 0; i < events->events_size; ++i) {
50
423k
        tox_event_destruct(&events->events[i], events->mem);
51
423k
    }
52
53
25.9k
    mem_delete(events->mem, events->events);
54
25.9k
    mem_delete(events->mem, events);
55
25.9k
}
56
57
bool tox_events_add(Tox_Events *events, const Tox_Event *event)
58
423k
{
59
423k
    if (events->events_size == UINT32_MAX) {
60
0
        return false;
61
0
    }
62
63
423k
    if (events->events_size == events->events_capacity) {
64
70.7k
        const uint32_t new_events_capacity = events->events_capacity * 2 + 1;
65
70.7k
        Tox_Event *new_events = (Tox_Event *)mem_vrealloc(
66
70.7k
                    events->mem, events->events, new_events_capacity, sizeof(Tox_Event));
67
68
70.7k
        if (new_events == nullptr) {
69
103
            return false;
70
103
        }
71
72
70.6k
        events->events = new_events;
73
70.6k
        events->events_capacity = new_events_capacity;
74
70.6k
    }
75
76
423k
    events->events[events->events_size] = *event;
77
423k
    ++events->events_size;
78
79
423k
    return true;
80
423k
}