Coverage Report

Created: 2026-11-06 06:15

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/open5gs/lib/sbi/openapi/model/ext_snssai.c
Line
Count
Source
1
2
#include <stdlib.h>
3
#include <string.h>
4
#include <stdio.h>
5
#include "ext_snssai.h"
6
7
OpenAPI_ext_snssai_t *OpenAPI_ext_snssai_create(
8
    int sst,
9
    char *sd,
10
    OpenAPI_list_t *sd_ranges,
11
    bool is_wildcard_sd,
12
    int wildcard_sd
13
)
14
4.08k
{
15
4.08k
    OpenAPI_ext_snssai_t *ext_snssai_local_var = ogs_malloc(sizeof(OpenAPI_ext_snssai_t));
16
4.08k
    ogs_assert(ext_snssai_local_var);
17
18
4.08k
    ext_snssai_local_var->sst = sst;
19
4.08k
    ext_snssai_local_var->sd = sd;
20
4.08k
    ext_snssai_local_var->sd_ranges = sd_ranges;
21
4.08k
    ext_snssai_local_var->is_wildcard_sd = is_wildcard_sd;
22
4.08k
    ext_snssai_local_var->wildcard_sd = wildcard_sd;
23
24
4.08k
    return ext_snssai_local_var;
25
4.08k
}
26
27
void OpenAPI_ext_snssai_free(OpenAPI_ext_snssai_t *ext_snssai)
28
4.08k
{
29
4.08k
    OpenAPI_lnode_t *node = NULL;
30
31
4.08k
    if (NULL == ext_snssai) {
32
0
        return;
33
0
    }
34
4.08k
    if (ext_snssai->sd) {
35
470
        ogs_free(ext_snssai->sd);
36
470
        ext_snssai->sd = NULL;
37
470
    }
38
4.08k
    if (ext_snssai->sd_ranges) {
39
1.18k
        OpenAPI_list_for_each(ext_snssai->sd_ranges, node) {
40
1.18k
            OpenAPI_sd_range_free(node->data);
41
1.18k
        }
42
381
        OpenAPI_list_free(ext_snssai->sd_ranges);
43
381
        ext_snssai->sd_ranges = NULL;
44
381
    }
45
4.08k
    ogs_free(ext_snssai);
46
4.08k
}
47
48
cJSON *OpenAPI_ext_snssai_convertToJSON(OpenAPI_ext_snssai_t *ext_snssai)
49
0
{
50
0
    cJSON *item = NULL;
51
0
    OpenAPI_lnode_t *node = NULL;
52
53
0
    if (ext_snssai == NULL) {
54
0
        ogs_error("OpenAPI_ext_snssai_convertToJSON() failed [ExtSnssai]");
55
0
        return NULL;
56
0
    }
57
58
0
    item = cJSON_CreateObject();
59
0
    if (cJSON_AddNumberToObject(item, "sst", ext_snssai->sst) == NULL) {
60
0
        ogs_error("OpenAPI_ext_snssai_convertToJSON() failed [sst]");
61
0
        goto end;
62
0
    }
63
64
0
    if (ext_snssai->sd) {
65
0
    if (cJSON_AddStringToObject(item, "sd", ext_snssai->sd) == NULL) {
66
0
        ogs_error("OpenAPI_ext_snssai_convertToJSON() failed [sd]");
67
0
        goto end;
68
0
    }
69
0
    }
70
71
0
    if (ext_snssai->sd_ranges) {
72
0
    cJSON *sd_rangesList = cJSON_AddArrayToObject(item, "sdRanges");
73
0
    if (sd_rangesList == NULL) {
74
0
        ogs_error("OpenAPI_ext_snssai_convertToJSON() failed [sd_ranges]");
75
0
        goto end;
76
0
    }
77
0
    OpenAPI_list_for_each(ext_snssai->sd_ranges, node) {
78
0
        cJSON *itemLocal = OpenAPI_sd_range_convertToJSON(node->data);
79
0
        if (itemLocal == NULL) {
80
0
            ogs_error("OpenAPI_ext_snssai_convertToJSON() failed [sd_ranges]");
81
0
            goto end;
82
0
        }
83
0
        cJSON_AddItemToArray(sd_rangesList, itemLocal);
84
0
    }
85
0
    }
86
87
0
    if (ext_snssai->is_wildcard_sd) {
88
0
    if (cJSON_AddBoolToObject(item, "wildcardSd", ext_snssai->wildcard_sd) == NULL) {
89
0
        ogs_error("OpenAPI_ext_snssai_convertToJSON() failed [wildcard_sd]");
90
0
        goto end;
91
0
    }
92
0
    }
93
94
0
end:
95
0
    return item;
96
0
}
97
98
OpenAPI_ext_snssai_t *OpenAPI_ext_snssai_parseFromJSON(cJSON *ext_snssaiJSON)
99
5.79k
{
100
5.79k
    OpenAPI_ext_snssai_t *ext_snssai_local_var = NULL;
101
5.79k
    OpenAPI_lnode_t *node = NULL;
102
5.79k
    cJSON *sst = NULL;
103
5.79k
    cJSON *sd = NULL;
104
5.79k
    cJSON *sd_ranges = NULL;
105
5.79k
    OpenAPI_list_t *sd_rangesList = NULL;
106
5.79k
    cJSON *wildcard_sd = NULL;
107
5.79k
    sst = cJSON_GetObjectItemCaseSensitive(ext_snssaiJSON, "sst");
108
5.79k
    if (!sst) {
109
1.61k
        ogs_error("OpenAPI_ext_snssai_parseFromJSON() failed [sst]");
110
1.61k
        goto end;
111
1.61k
    }
112
4.18k
    if (!cJSON_IsNumber(sst)) {
113
66
        ogs_error("OpenAPI_ext_snssai_parseFromJSON() failed [sst]");
114
66
        goto end;
115
66
    }
116
117
4.11k
    sd = cJSON_GetObjectItemCaseSensitive(ext_snssaiJSON, "sd");
118
4.11k
    if (sd) {
119
709
    if (!cJSON_IsString(sd) && !cJSON_IsNull(sd)) {
120
19
        ogs_error("OpenAPI_ext_snssai_parseFromJSON() failed [sd]");
121
19
        goto end;
122
19
    }
123
709
    }
124
125
4.09k
    sd_ranges = cJSON_GetObjectItemCaseSensitive(ext_snssaiJSON, "sdRanges");
126
4.09k
    if (sd_ranges) {
127
394
        cJSON *sd_ranges_local = NULL;
128
394
        if (!cJSON_IsArray(sd_ranges)) {
129
1
            ogs_error("OpenAPI_ext_snssai_parseFromJSON() failed [sd_ranges]");
130
1
            goto end;
131
1
        }
132
133
393
        sd_rangesList = OpenAPI_list_create();
134
135
1.39k
        cJSON_ArrayForEach(sd_ranges_local, sd_ranges) {
136
1.39k
            if (!cJSON_IsObject(sd_ranges_local)) {
137
7
                ogs_error("OpenAPI_ext_snssai_parseFromJSON() failed [sd_ranges]");
138
7
                goto end;
139
7
            }
140
1.39k
            OpenAPI_sd_range_t *sd_rangesItem = OpenAPI_sd_range_parseFromJSON(sd_ranges_local);
141
1.39k
            if (!sd_rangesItem) {
142
5
                ogs_error("No sd_rangesItem");
143
5
                goto end;
144
5
            }
145
1.38k
            OpenAPI_list_add(sd_rangesList, sd_rangesItem);
146
1.38k
        }
147
393
    }
148
149
4.08k
    wildcard_sd = cJSON_GetObjectItemCaseSensitive(ext_snssaiJSON, "wildcardSd");
150
4.08k
    if (wildcard_sd) {
151
1
    if (!cJSON_IsBool(wildcard_sd)) {
152
1
        ogs_error("OpenAPI_ext_snssai_parseFromJSON() failed [wildcard_sd]");
153
1
        goto end;
154
1
    }
155
1
    }
156
157
4.08k
    ext_snssai_local_var = OpenAPI_ext_snssai_create (
158
        
159
4.08k
        sst->valuedouble,
160
4.08k
        sd && !cJSON_IsNull(sd) ? ogs_strdup(sd->valuestring) : NULL,
161
4.08k
        sd_ranges ? sd_rangesList : NULL,
162
4.08k
        wildcard_sd ? true : false,
163
4.08k
        wildcard_sd ? wildcard_sd->valueint : 0
164
4.08k
    );
165
166
4.08k
    return ext_snssai_local_var;
167
1.71k
end:
168
1.71k
    if (sd_rangesList) {
169
203
        OpenAPI_list_for_each(sd_rangesList, node) {
170
203
            OpenAPI_sd_range_free(node->data);
171
203
        }
172
12
        OpenAPI_list_free(sd_rangesList);
173
12
        sd_rangesList = NULL;
174
12
    }
175
1.71k
    return NULL;
176
4.08k
}
177
178
OpenAPI_ext_snssai_t *OpenAPI_ext_snssai_copy(OpenAPI_ext_snssai_t *dst, OpenAPI_ext_snssai_t *src)
179
0
{
180
0
    cJSON *item = NULL;
181
0
    char *content = NULL;
182
183
0
    ogs_assert(src);
184
0
    item = OpenAPI_ext_snssai_convertToJSON(src);
185
0
    if (!item) {
186
0
        ogs_error("OpenAPI_ext_snssai_convertToJSON() failed");
187
0
        return NULL;
188
0
    }
189
190
0
    content = cJSON_Print(item);
191
0
    cJSON_Delete(item);
192
193
0
    if (!content) {
194
0
        ogs_error("cJSON_Print() failed");
195
0
        return NULL;
196
0
    }
197
198
0
    item = cJSON_Parse(content);
199
0
    ogs_free(content);
200
0
    if (!item) {
201
0
        ogs_error("cJSON_Parse() failed");
202
0
        return NULL;
203
0
    }
204
205
0
    OpenAPI_ext_snssai_free(dst);
206
0
    dst = OpenAPI_ext_snssai_parseFromJSON(item);
207
0
    cJSON_Delete(item);
208
209
0
    return dst;
210
0
}
211