• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

Tehreer / SheenBidi / 19308576644

12 Nov 2025 06:56PM UTC coverage: 95.907% (+16.4%) from 79.545%
19308576644

push

github

mta452
[lib] Fix memory management issues

13 of 13 new or added lines in 3 files covered. (100.0%)

29 existing lines in 10 files now uncovered.

3866 of 4031 relevant lines covered (95.91%)

462026.31 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

99.72
/Source/SBBase.c
1
/*
2
 * Copyright (C) 2016-2025 Muhammad Tayyab Akram
3
 *
4
 * Licensed under the Apache License, Version 2.0 (the "License");
5
 * you may not use this file except in compliance with the License.
6
 * You may obtain a copy of the License at
7
 *
8
 *      http://www.apache.org/licenses/LICENSE-2.0
9
 *
10
 * Unless required by applicable law or agreed to in writing, software
11
 * distributed under the License is distributed on an "AS IS" BASIS,
12
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
 * See the License for the specific language governing permissions and
14
 * limitations under the License.
15
 */
16

17
#include <SheenBidi/SBConfig.h>
18
#include <SheenBidi/SBVersion.h>
19

20
#include "SBBase.h"
21

22
static const char LibraryVersion[] = SHEENBIDI_VERSION_STRING;
23

24
#define TAG(a, b, c, d) \
25
(SBUInt32)              \
26
(                       \
27
   ((SBUInt8)(a) << 24) \
28
 | ((SBUInt8)(b) << 16) \
29
 | ((SBUInt8)(c) <<  8) \
30
 | ((SBUInt8)(d) <<  0) \
31
)
32

33
SB_INTERNAL void SBUIntegerNormalizeRange(SBUInteger actualLength,
862,043✔
34
    SBUInteger *rangeOffset, SBUInteger *rangeLength)
35
{
36
    /**
37
     * Assume:
38
     *      Actual Length = 10
39
     *
40
     * Case 1:
41
     *      Offset = 0, Length = 10
42
     * Result:
43
     *      Offset = 0, Length = 10
44
     *
45
     * Case 2:
46
     *      Offset = 0, Length = 11
47
     * Result:
48
     *      Offset = 0, Length = 10
49
     *
50
     * Case 3:
51
     *      Offset = 1, Length = -1 (MAX)
52
     * Result:
53
     *      Offset = 1, Length = 9
54
     *
55
     * Case 4:
56
     *      Offset = 10, Length = 0
57
     * Result:
58
     *      Offset = Invalid, Length = 0
59
     *
60
     * Case 5:
61
     *      Offset = -1 (MAX), Length = 1
62
     * Result:
63
     *      Offset = Invalid, Length = 0
64
     */
65

66
    if (*rangeOffset < actualLength) {
862,043✔
67
        SBUInteger possibleLimit = *rangeOffset + *rangeLength;
862,029✔
68

69
        if (*rangeOffset <= possibleLimit && possibleLimit <= actualLength) {
862,029✔
70
            /* The range is valid. Nothing to do here. */
71
        } else {
72
            *rangeLength = actualLength - *rangeOffset;
5✔
73
        }
74
    } else {
75
        *rangeOffset = SBInvalidIndex;
14✔
76
        *rangeLength = 0;
14✔
77
    }
78
}
862,043✔
79

80
SB_INTERNAL SBBoolean SBUIntegerVerifyRange(SBUInteger actualLength,
862,297✔
81
    SBUInteger rangeOffset, SBUInteger rangeLength)
82
{
83
    SBUInteger possibleLimit = rangeOffset + rangeLength;
862,297✔
84

85
    return rangeOffset < actualLength
86
        && rangeOffset <= possibleLimit
862,297✔
87
        && possibleLimit <= actualLength;
1,724,594✔
88
}
89

90
SBUInt32 SBScriptGetOpenTypeTag(SBScript script)
256✔
91
{
92
    /* Reference: https://docs.microsoft.com/en-us/typography/opentype/spec/scripttags */
93
    /* Dated: 05/31/2024 */
94

95
    switch (script) {
256✔
96
    case SBScriptADLM:
1✔
97
        return TAG('a', 'd', 'l', 'm');
1✔
98
    case SBScriptAHOM:
1✔
99
        return TAG('a', 'h', 'o', 'm');
1✔
100
    case SBScriptHLUW:
1✔
101
        return TAG('h', 'l', 'u', 'w');
1✔
102
    case SBScriptARAB:
1✔
103
        return TAG('a', 'r', 'a', 'b');
1✔
104
    case SBScriptARMN:
1✔
105
        return TAG('a', 'r', 'm', 'n');
1✔
106
    case SBScriptAVST:
1✔
107
        return TAG('a', 'v', 's', 't');
1✔
108
    case SBScriptBALI:
1✔
109
        return TAG('b', 'a', 'l', 'i');
1✔
110
    case SBScriptBAMU:
1✔
111
        return TAG('b', 'a', 'm', 'u');
1✔
112
    case SBScriptBASS:
1✔
113
        return TAG('b', 'a', 's', 's');
1✔
114
    case SBScriptBATK:
1✔
115
        return TAG('b', 'a', 't', 'k');
1✔
116
 /* case SBScriptBENG:
117
        return TAG('b', 'e', 'n', 'g'); */
118
    case SBScriptBENG:
1✔
119
        return TAG('b', 'n', 'g', '2');
1✔
120
    case SBScriptBERF:
1✔
121
        return TAG('b', 'e', 'r', 'f');
1✔
122
    case SBScriptBHKS:
1✔
123
        return TAG('b', 'h', 'k', 's');
1✔
124
    case SBScriptBOPO:
1✔
125
        return TAG('b', 'o', 'p', 'o');
1✔
126
    case SBScriptBRAH:
1✔
127
        return TAG('b', 'r', 'a', 'h');
1✔
128
    case SBScriptBRAI:
1✔
129
        return TAG('b', 'r', 'a', 'i');
1✔
130
    case SBScriptBUGI:
1✔
131
        return TAG('b', 'u', 'g', 'i');
1✔
132
    case SBScriptBUHD:
1✔
133
        return TAG('b', 'u', 'h', 'd');
1✔
134
 /* case SBScript____:
135
        return TAG('b', 'y', 'z', 'm'); */
136
    case SBScriptCANS:
1✔
137
        return TAG('c', 'a', 'n', 's');
1✔
138
    case SBScriptCARI:
1✔
139
        return TAG('c', 'a', 'r', 'i');
1✔
140
    case SBScriptAGHB:
1✔
141
        return TAG('a', 'g', 'h', 'b');
1✔
142
    case SBScriptCAKM:
1✔
143
        return TAG('c', 'a', 'k', 'm');
1✔
144
    case SBScriptCHAM:
1✔
145
        return TAG('c', 'h', 'a', 'm');
1✔
146
    case SBScriptCHER:
1✔
147
        return TAG('c', 'h', 'e', 'r');
1✔
148
    case SBScriptCHRS:
1✔
149
        return TAG('c', 'h', 'r', 's');
1✔
150
    case SBScriptHANI:
1✔
151
        return TAG('h', 'a', 'n', 'i');
1✔
152
    case SBScriptCOPT:
1✔
153
        return TAG('c', 'o', 'p', 't');
1✔
154
    case SBScriptCPRT:
1✔
155
        return TAG('c', 'p', 'r', 't');
1✔
156
    case SBScriptCPMN:
1✔
157
        return TAG('c', 'p', 'm', 'n');
1✔
158
    case SBScriptCYRL:
1✔
159
        return TAG('c', 'y', 'r', 'l');
1✔
160
    case SBScriptDSRT:
1✔
161
        return TAG('d', 's', 'r', 't');
1✔
162
 /* case SBScriptDEVA:
163
        return TAG('d', 'e', 'v', 'a'); */
164
    case SBScriptDEVA:
1✔
165
        return TAG('d', 'e', 'v', '2');
1✔
166
    case SBScriptDIAK:
1✔
167
        return TAG('d', 'i', 'a', 'k');
1✔
168
    case SBScriptDOGR:
1✔
169
        return TAG('d', 'o', 'g', 'r');
1✔
170
    case SBScriptDUPL:
1✔
171
        return TAG('d', 'u', 'p', 'l');
1✔
172
    case SBScriptEGYP:
1✔
173
        return TAG('e', 'g', 'y', 'p');
1✔
174
    case SBScriptELBA:
1✔
175
        return TAG('e', 'l', 'b', 'a');
1✔
176
    case SBScriptELYM:
1✔
177
        return TAG('e', 'l', 'y', 'm');
1✔
178
    case SBScriptETHI:
1✔
179
        return TAG('e', 't', 'h', 'i');
1✔
180
    case SBScriptGARA:
1✔
181
        return TAG('g', 'a', 'r', 'a');
1✔
182
    case SBScriptGEOR:
1✔
183
        return TAG('g', 'e', 'o', 'r');
1✔
184
    case SBScriptGLAG:
1✔
185
        return TAG('g', 'l', 'a', 'g');
1✔
186
    case SBScriptGOTH:
1✔
187
        return TAG('g', 'o', 't', 'h');
1✔
188
    case SBScriptGRAN:
1✔
189
        return TAG('g', 'r', 'a', 'n');
1✔
190
    case SBScriptGREK:
1✔
191
        return TAG('g', 'r', 'e', 'k');
1✔
192
 /* case SBScriptGUJR:
193
        return TAG('g', 'u', 'j', 'r'); */
194
    case SBScriptGUJR:
1✔
195
        return TAG('g', 'j', 'r', '2');
1✔
196
    case SBScriptGONG:
1✔
197
        return TAG('g', 'o', 'n', 'g');
1✔
198
 /* case SBScriptGURU:
199
        return TAG('g', 'u', 'r', 'u'); */
200
    case SBScriptGURU:
1✔
201
        return TAG('g', 'u', 'r', '2');
1✔
202
    case SBScriptGUKH:
1✔
203
        return TAG('g', 'u', 'k', 'h');
1✔
204
    case SBScriptHANG:
1✔
205
        return TAG('h', 'a', 'n', 'g');
1✔
206
 /* case SBScriptHANG:
207
        return TAG('j', 'a', 'm', 'o'); */
208
    case SBScriptROHG:
1✔
209
        return TAG('r', 'o', 'h', 'g');
1✔
210
    case SBScriptHANO:
1✔
211
        return TAG('h', 'a', 'n', 'o');
1✔
212
    case SBScriptHATR:
1✔
213
        return TAG('h', 'a', 't', 'r');
1✔
214
    case SBScriptHEBR:
1✔
215
        return TAG('h', 'e', 'b', 'r');
1✔
216
    case SBScriptHIRA:
1✔
217
        return TAG('k', 'a', 'n', 'a');
1✔
218
    case SBScriptARMI:
1✔
219
        return TAG('a', 'r', 'm', 'i');
1✔
220
    case SBScriptPHLI:
1✔
221
        return TAG('p', 'h', 'l', 'i');
1✔
222
    case SBScriptPRTI:
1✔
223
        return TAG('p', 'r', 't', 'i');
1✔
224
    case SBScriptJAVA:
1✔
225
        return TAG('j', 'a', 'v', 'a');
1✔
226
    case SBScriptKTHI:
1✔
227
        return TAG('k', 't', 'h', 'i');
1✔
228
 /* case SBScriptKNDA:
229
        return TAG('k', 'n', 'd', 'a'); */
230
    case SBScriptKNDA:
1✔
231
        return TAG('k', 'n', 'd', '2');
1✔
232
    case SBScriptKANA:
1✔
233
        return TAG('k', 'a', 'n', 'a');
1✔
234
    case SBScriptKAWI:
1✔
235
        return TAG('k', 'a', 'w', 'i');
1✔
236
    case SBScriptKALI:
1✔
237
        return TAG('k', 'a', 'l', 'i');
1✔
238
    case SBScriptKHAR:
1✔
239
        return TAG('k', 'h', 'a', 'r');
1✔
240
    case SBScriptKITS:
1✔
241
        return TAG('k', 'i', 't', 's');
1✔
242
    case SBScriptKHMR:
1✔
243
        return TAG('k', 'h', 'm', 'r');
1✔
244
    case SBScriptKHOJ:
1✔
245
        return TAG('k', 'h', 'o', 'j');
1✔
246
    case SBScriptSIND:
1✔
247
        return TAG('s', 'i', 'n', 'd');
1✔
248
    case SBScriptKRAI:
1✔
249
        return TAG('k', 'r', 'a', 'i');
1✔
250
    case SBScriptLAOO:
1✔
251
        return TAG('l', 'a', 'o', ' ');
1✔
252
    case SBScriptLATN:
1✔
253
        return TAG('l', 'a', 't', 'n');
1✔
254
    case SBScriptLEPC:
1✔
255
        return TAG('l', 'e', 'p', 'c');
1✔
256
    case SBScriptLIMB:
1✔
257
        return TAG('l', 'i', 'm', 'b');
1✔
258
    case SBScriptLINA:
1✔
259
        return TAG('l', 'i', 'n', 'a');
1✔
260
    case SBScriptLINB:
1✔
261
        return TAG('l', 'i', 'n', 'b');
1✔
262
    case SBScriptLISU:
1✔
263
        return TAG('l', 'i', 's', 'u');
1✔
264
    case SBScriptLYCI:
1✔
265
        return TAG('l', 'y', 'c', 'i');
1✔
266
    case SBScriptLYDI:
1✔
267
        return TAG('l', 'y', 'd', 'i');
1✔
268
    case SBScriptMAHJ:
1✔
269
        return TAG('m', 'a', 'h', 'j');
1✔
270
    case SBScriptMAKA:
1✔
271
        return TAG('m', 'a', 'k', 'a');
1✔
272
 /* case SBScriptMLYM:
273
        return TAG('m', 'l', 'y', 'm'); */
274
    case SBScriptMLYM:
1✔
275
        return TAG('m', 'l', 'm', '2');
1✔
276
    case SBScriptMAND:
1✔
277
        return TAG('m', 'a', 'n', 'd');
1✔
278
    case SBScriptMANI:
1✔
279
        return TAG('m', 'a', 'n', 'i');
1✔
280
    case SBScriptMARC:
1✔
281
        return TAG('m', 'a', 'r', 'c');
1✔
282
    case SBScriptGONM:
1✔
283
        return TAG('g', 'o', 'n', 'm');
1✔
284
 /* case SBScript____:
285
        return TAG('m', 'a', 't', 'h'); */
286
    case SBScriptMEDF:
1✔
287
        return TAG('m', 'e', 'd', 'f');
1✔
288
    case SBScriptMTEI:
1✔
289
        return TAG('m', 't', 'e', 'i');
1✔
290
    case SBScriptMEND:
1✔
291
        return TAG('m', 'e', 'n', 'd');
1✔
292
    case SBScriptMERC:
1✔
293
        return TAG('m', 'e', 'r', 'c');
1✔
294
    case SBScriptMERO:
1✔
295
        return TAG('m', 'e', 'r', 'o');
1✔
296
    case SBScriptPLRD:
1✔
297
        return TAG('p', 'l', 'r', 'd');
1✔
298
    case SBScriptMODI:
1✔
299
        return TAG('m', 'o', 'd', 'i');
1✔
300
    case SBScriptMONG:
1✔
301
        return TAG('m', 'o', 'n', 'g');
1✔
302
    case SBScriptMROO:
1✔
303
        return TAG('m', 'r', 'o', 'o');
1✔
304
    case SBScriptMULT:
1✔
305
        return TAG('m', 'u', 'l', 't');
1✔
306
 /* case SBScript___:
307
        return TAG('m', 'u', 's', 'c'); */
308
 /* case SBScriptMYMR:
309
        return TAG('m', 'y', 'm', 'r'); */
310
    case SBScriptMYMR:
1✔
311
        return TAG('m', 'y', 'm', '2');
1✔
312
    case SBScriptNBAT:
1✔
313
        return TAG('n', 'b', 'a', 't');
1✔
314
    case SBScriptNAGM:
1✔
315
        return TAG('n', 'a', 'g', 'm');
1✔
316
    case SBScriptNAND:
1✔
317
        return TAG('n', 'a', 'n', 'd');
1✔
318
    case SBScriptNEWA:
1✔
319
        return TAG('n', 'e', 'w', 'a');
1✔
320
    case SBScriptTALU:
1✔
321
        return TAG('t', 'a', 'l', 'u');
1✔
322
    case SBScriptNKOO:
1✔
323
        return TAG('n', 'k', 'o', ' ');
1✔
324
    case SBScriptNSHU:
1✔
325
        return TAG('n', 's', 'h', 'u');
1✔
326
    case SBScriptHMNP:
1✔
327
        return TAG('h', 'm', 'n', 'p');
1✔
328
 /* case SBScriptORYA:
329
        return TAG('o', 'r', 'y', 'a'); */
330
    case SBScriptORYA:
1✔
331
        return TAG('o', 'r', 'y', '2');
1✔
332
    case SBScriptOGAM:
1✔
333
        return TAG('o', 'g', 'a', 'm');
1✔
334
    case SBScriptOLCK:
1✔
335
        return TAG('o', 'l', 'c', 'k');
1✔
336
    case SBScriptONAO:
1✔
337
        return TAG('o', 'n', 'a', 'o');
1✔
338
    case SBScriptITAL:
1✔
339
        return TAG('i', 't', 'a', 'l');
1✔
340
    case SBScriptHUNG:
1✔
341
        return TAG('h', 'u', 'n', 'g');
1✔
342
    case SBScriptNARB:
1✔
343
        return TAG('n', 'a', 'r', 'b');
1✔
344
    case SBScriptPERM:
1✔
345
        return TAG('p', 'e', 'r', 'm');
1✔
346
    case SBScriptXPEO:
1✔
347
        return TAG('x', 'p', 'e', 'o');
1✔
348
    case SBScriptSOGO:
1✔
349
        return TAG('s', 'o', 'g', 'o');
1✔
350
    case SBScriptSARB:
1✔
351
        return TAG('s', 'a', 'r', 'b');
1✔
352
    case SBScriptORKH:
1✔
353
        return TAG('o', 'r', 'k', 'h');
1✔
354
    case SBScriptOUGR:
1✔
355
        return TAG('o', 'u', 'g', 'r');
1✔
356
    case SBScriptOSGE:
1✔
357
        return TAG('o', 's', 'g', 'e');
1✔
358
    case SBScriptOSMA:
1✔
359
        return TAG('o', 's', 'm', 'a');
1✔
360
    case SBScriptHMNG:
1✔
361
        return TAG('h', 'm', 'n', 'g');
1✔
362
    case SBScriptPALM:
1✔
363
        return TAG('p', 'a', 'l', 'm');
1✔
364
    case SBScriptPAUC:
1✔
365
        return TAG('p', 'a', 'u', 'c');
1✔
366
    case SBScriptPHAG:
1✔
367
        return TAG('p', 'h', 'a', 'g');
1✔
368
    case SBScriptPHNX:
1✔
369
        return TAG('p', 'h', 'n', 'x');
1✔
370
    case SBScriptPHLP:
1✔
371
        return TAG('p', 'h', 'l', 'p');
1✔
372
    case SBScriptRJNG:
1✔
373
        return TAG('r', 'j', 'n', 'g');
1✔
374
    case SBScriptRUNR:
1✔
375
        return TAG('r', 'u', 'n', 'r');
1✔
376
    case SBScriptSAMR:
1✔
377
        return TAG('s', 'a', 'm', 'r');
1✔
378
    case SBScriptSAUR:
1✔
379
        return TAG('s', 'a', 'u', 'r');
1✔
380
    case SBScriptSHRD:
1✔
381
        return TAG('s', 'h', 'r', 'd');
1✔
382
    case SBScriptSHAW:
1✔
383
        return TAG('s', 'h', 'a', 'w');
1✔
384
    case SBScriptSIDD:
1✔
385
        return TAG('s', 'i', 'd', 'd');
1✔
386
    case SBScriptSIDT:
1✔
387
        return TAG('s', 'i', 'd', 't');
1✔
388
    case SBScriptSGNW:
1✔
389
        return TAG('s', 'g', 'n', 'w');
1✔
390
    case SBScriptSINH:
1✔
391
        return TAG('s', 'i', 'n', 'h');
1✔
392
    case SBScriptSOGD:
1✔
393
        return TAG('s', 'o', 'g', 'd');
1✔
394
    case SBScriptSORA:
1✔
395
        return TAG('s', 'o', 'r', 'a');
1✔
396
    case SBScriptSOYO:
1✔
397
        return TAG('s', 'o', 'y', 'o');
1✔
398
    case SBScriptXSUX:
1✔
399
        return TAG('x', 's', 'u', 'x');
1✔
400
    case SBScriptSUND:
1✔
401
        return TAG('s', 'u', 'n', 'd');
1✔
402
    case SBScriptSUNU:
1✔
403
        return TAG('s', 'u', 'n', 'u');
1✔
404
    case SBScriptSYLO:
1✔
405
        return TAG('s', 'y', 'l', 'o');
1✔
406
    case SBScriptSYRC:
1✔
407
        return TAG('s', 'y', 'r', 'c');
1✔
408
    case SBScriptTGLG:
1✔
409
        return TAG('t', 'g', 'l', 'g');
1✔
410
    case SBScriptTAGB:
1✔
411
        return TAG('t', 'a', 'g', 'b');
1✔
412
    case SBScriptTALE:
1✔
413
        return TAG('t', 'a', 'l', 'e');
1✔
414
    case SBScriptLANA:
1✔
415
        return TAG('l', 'a', 'n', 'a');
1✔
416
    case SBScriptTAVT:
1✔
417
        return TAG('t', 'a', 'v', 't');
1✔
418
    case SBScriptTAKR:
1✔
419
        return TAG('t', 'a', 'k', 'r');
1✔
420
 /* case SBScriptTAML:
421
        return TAG('t', 'a', 'm', 'l'); */
422
    case SBScriptTAML:
1✔
423
        return TAG('t', 'm', 'l', '2');
1✔
424
    case SBScriptTNSA:
1✔
425
        return TAG('t', 'n', 's', 'a');
1✔
426
    case SBScriptTANG:
1✔
427
        return TAG('t', 'a', 'n', 'g');
1✔
428
    case SBScriptTAYO:
1✔
429
        return TAG('t', 'a', 'y', 'o');
1✔
430
 /* case SBScriptTELU:
431
        return TAG('t', 'e', 'l', 'u'); */
432
    case SBScriptTELU:
1✔
433
        return TAG('t', 'e', 'l', '2');
1✔
434
    case SBScriptTHAA:
1✔
435
        return TAG('t', 'h', 'a', 'a');
1✔
436
    case SBScriptTHAI:
1✔
437
        return TAG('t', 'h', 'a', 'i');
1✔
438
    case SBScriptTIBT:
1✔
439
        return TAG('t', 'i', 'b', 't');
1✔
440
    case SBScriptTFNG:
1✔
441
        return TAG('t', 'f', 'n', 'g');
1✔
442
    case SBScriptTIRH:
1✔
443
        return TAG('t', 'i', 'r', 'h');
1✔
444
    case SBScriptTODR:
1✔
445
        return TAG('t', 'o', 'd', 'r');
1✔
446
    case SBScriptTOLS:
1✔
447
        return TAG('t', 'o', 'l', 's');
1✔
448
    case SBScriptTOTO:
1✔
449
        return TAG('t', 'o', 't', 'o');
1✔
450
    case SBScriptTUTG:
1✔
451
        return TAG('t', 'u', 't', 'g');
1✔
452
    case SBScriptUGAR:
1✔
453
        return TAG('u', 'g', 'a', 'r');
1✔
454
    case SBScriptVAII:
1✔
455
        return TAG('v', 'a', 'i', ' ');
1✔
456
    case SBScriptVITH:
1✔
457
        return TAG('v', 'i', 't', 'h');
1✔
458
    case SBScriptWCHO:
1✔
459
        return TAG('w', 'c', 'h', 'o');
1✔
460
    case SBScriptWARA:
1✔
461
        return TAG('w', 'a', 'r', 'a');
1✔
462
    case SBScriptYEZI:
1✔
463
        return TAG('y', 'e', 'z', 'i');
1✔
464
    case SBScriptYIII:
1✔
465
        return TAG('y', 'i', ' ', ' ');
1✔
466
    case SBScriptZANB:
1✔
467
        return TAG('z', 'a', 'n', 'b');
1✔
468
    default:
84✔
469
        return TAG('D', 'F', 'L', 'T');
84✔
470
    }
471
}
472

473
SBUInt32 SBScriptGetUnicodeTag(SBScript script)
431✔
474
{
475
    switch (script) {
431✔
476
    case SBScriptADLM:
2✔
477
        return TAG('A', 'd', 'l', 'm');
2✔
478
    case SBScriptAGHB:
2✔
479
        return TAG('A', 'g', 'h', 'b');
2✔
480
    case SBScriptAHOM:
2✔
481
        return TAG('A', 'h', 'o', 'm');
2✔
482
    case SBScriptARAB:
2✔
483
        return TAG('A', 'r', 'a', 'b');
2✔
484
    case SBScriptARMI:
2✔
485
        return TAG('A', 'r', 'm', 'i');
2✔
486
    case SBScriptARMN:
2✔
487
        return TAG('A', 'r', 'm', 'n');
2✔
488
    case SBScriptAVST:
2✔
489
        return TAG('A', 'v', 's', 't');
2✔
490
    case SBScriptBALI:
2✔
491
        return TAG('B', 'a', 'l', 'i');
2✔
492
    case SBScriptBAMU:
2✔
493
        return TAG('B', 'a', 'm', 'u');
2✔
494
    case SBScriptBASS:
2✔
495
        return TAG('B', 'a', 's', 's');
2✔
496
    case SBScriptBATK:
2✔
497
        return TAG('B', 'a', 't', 'k');
2✔
498
    case SBScriptBENG:
2✔
499
        return TAG('B', 'e', 'n', 'g');
2✔
500
    case SBScriptBERF:
2✔
501
        return TAG('B', 'e', 'r', 'f');
2✔
502
    case SBScriptBHKS:
2✔
503
        return TAG('B', 'h', 'k', 's');
2✔
504
    case SBScriptBOPO:
2✔
505
        return TAG('B', 'o', 'p', 'o');
2✔
506
    case SBScriptBRAH:
2✔
507
        return TAG('B', 'r', 'a', 'h');
2✔
508
    case SBScriptBRAI:
2✔
509
        return TAG('B', 'r', 'a', 'i');
2✔
510
    case SBScriptBUGI:
2✔
511
        return TAG('B', 'u', 'g', 'i');
2✔
512
    case SBScriptBUHD:
2✔
513
        return TAG('B', 'u', 'h', 'd');
2✔
514
    case SBScriptCAKM:
2✔
515
        return TAG('C', 'a', 'k', 'm');
2✔
516
    case SBScriptCANS:
2✔
517
        return TAG('C', 'a', 'n', 's');
2✔
518
    case SBScriptCARI:
2✔
519
        return TAG('C', 'a', 'r', 'i');
2✔
520
    case SBScriptCHAM:
2✔
521
        return TAG('C', 'h', 'a', 'm');
2✔
522
    case SBScriptCHER:
2✔
523
        return TAG('C', 'h', 'e', 'r');
2✔
524
    case SBScriptCHRS:
2✔
525
        return TAG('C', 'h', 'r', 's');
2✔
526
    case SBScriptCOPT:
2✔
527
        return TAG('C', 'o', 'p', 't');
2✔
528
    case SBScriptCPMN:
2✔
529
        return TAG('C', 'p', 'm', 'n');
2✔
530
    case SBScriptCPRT:
2✔
531
        return TAG('C', 'p', 'r', 't');
2✔
532
    case SBScriptCYRL:
2✔
533
        return TAG('C', 'y', 'r', 'l');
2✔
534
    case SBScriptDEVA:
2✔
535
        return TAG('D', 'e', 'v', 'a');
2✔
536
    case SBScriptDIAK:
2✔
537
        return TAG('D', 'i', 'a', 'k');
2✔
538
    case SBScriptDOGR:
2✔
539
        return TAG('D', 'o', 'g', 'r');
2✔
540
    case SBScriptDSRT:
2✔
541
        return TAG('D', 's', 'r', 't');
2✔
542
    case SBScriptDUPL:
2✔
543
        return TAG('D', 'u', 'p', 'l');
2✔
544
    case SBScriptEGYP:
2✔
545
        return TAG('E', 'g', 'y', 'p');
2✔
546
    case SBScriptELBA:
2✔
547
        return TAG('E', 'l', 'b', 'a');
2✔
548
    case SBScriptELYM:
2✔
549
        return TAG('E', 'l', 'y', 'm');
2✔
550
    case SBScriptETHI:
2✔
551
        return TAG('E', 't', 'h', 'i');
2✔
552
    case SBScriptGARA:
2✔
553
        return TAG('G', 'a', 'r', 'a');
2✔
554
    case SBScriptGEOR:
2✔
555
        return TAG('G', 'e', 'o', 'r');
2✔
556
    case SBScriptGLAG:
2✔
557
        return TAG('G', 'l', 'a', 'g');
2✔
558
    case SBScriptGONG:
2✔
559
        return TAG('G', 'o', 'n', 'g');
2✔
560
    case SBScriptGONM:
2✔
561
        return TAG('G', 'o', 'n', 'm');
2✔
562
    case SBScriptGOTH:
2✔
563
        return TAG('G', 'o', 't', 'h');
2✔
564
    case SBScriptGRAN:
2✔
565
        return TAG('G', 'r', 'a', 'n');
2✔
566
    case SBScriptGREK:
2✔
567
        return TAG('G', 'r', 'e', 'k');
2✔
568
    case SBScriptGUJR:
2✔
569
        return TAG('G', 'u', 'j', 'r');
2✔
570
    case SBScriptGUKH:
2✔
571
        return TAG('G', 'u', 'k', 'h');
2✔
572
    case SBScriptGURU:
2✔
573
        return TAG('G', 'u', 'r', 'u');
2✔
574
    case SBScriptHANG:
2✔
575
        return TAG('H', 'a', 'n', 'g');
2✔
576
    case SBScriptHANI:
2✔
577
        return TAG('H', 'a', 'n', 'i');
2✔
578
    case SBScriptHANO:
2✔
579
        return TAG('H', 'a', 'n', 'o');
2✔
580
    case SBScriptHATR:
2✔
581
        return TAG('H', 'a', 't', 'r');
2✔
582
    case SBScriptHEBR:
2✔
583
        return TAG('H', 'e', 'b', 'r');
2✔
584
    case SBScriptHIRA:
2✔
585
        return TAG('H', 'i', 'r', 'a');
2✔
586
    case SBScriptHLUW:
2✔
587
        return TAG('H', 'l', 'u', 'w');
2✔
588
    case SBScriptHMNG:
2✔
589
        return TAG('H', 'm', 'n', 'g');
2✔
590
    case SBScriptHMNP:
2✔
591
        return TAG('H', 'm', 'n', 'p');
2✔
592
    case SBScriptHUNG:
2✔
593
        return TAG('H', 'u', 'n', 'g');
2✔
594
    case SBScriptITAL:
2✔
595
        return TAG('I', 't', 'a', 'l');
2✔
596
    case SBScriptJAVA:
2✔
597
        return TAG('J', 'a', 'v', 'a');
2✔
598
    case SBScriptKALI:
2✔
599
        return TAG('K', 'a', 'l', 'i');
2✔
600
    case SBScriptKANA:
2✔
601
        return TAG('K', 'a', 'n', 'a');
2✔
602
    case SBScriptKAWI:
2✔
603
        return TAG('K', 'a', 'w', 'i');
2✔
604
    case SBScriptKHAR:
2✔
605
        return TAG('K', 'h', 'a', 'r');
2✔
606
    case SBScriptKHMR:
2✔
607
        return TAG('K', 'h', 'm', 'r');
2✔
608
    case SBScriptKHOJ:
2✔
609
        return TAG('K', 'h', 'o', 'j');
2✔
610
    case SBScriptKITS:
2✔
611
        return TAG('K', 'i', 't', 's');
2✔
612
    case SBScriptKNDA:
2✔
613
        return TAG('K', 'n', 'd', 'a');
2✔
614
    case SBScriptKRAI:
2✔
615
        return TAG('K', 'r', 'a', 'i');
2✔
616
    case SBScriptKTHI:
2✔
617
        return TAG('K', 't', 'h', 'i');
2✔
618
    case SBScriptLANA:
2✔
619
        return TAG('L', 'a', 'n', 'a');
2✔
620
    case SBScriptLAOO:
2✔
621
        return TAG('L', 'a', 'o', 'o');
2✔
622
    case SBScriptLATN:
2✔
623
        return TAG('L', 'a', 't', 'n');
2✔
624
    case SBScriptLEPC:
2✔
625
        return TAG('L', 'e', 'p', 'c');
2✔
626
    case SBScriptLIMB:
2✔
627
        return TAG('L', 'i', 'm', 'b');
2✔
628
    case SBScriptLINA:
2✔
629
        return TAG('L', 'i', 'n', 'a');
2✔
630
    case SBScriptLINB:
2✔
631
        return TAG('L', 'i', 'n', 'b');
2✔
632
    case SBScriptLISU:
2✔
633
        return TAG('L', 'i', 's', 'u');
2✔
634
    case SBScriptLYCI:
2✔
635
        return TAG('L', 'y', 'c', 'i');
2✔
636
    case SBScriptLYDI:
2✔
637
        return TAG('L', 'y', 'd', 'i');
2✔
638
    case SBScriptMAHJ:
2✔
639
        return TAG('M', 'a', 'h', 'j');
2✔
640
    case SBScriptMAKA:
2✔
641
        return TAG('M', 'a', 'k', 'a');
2✔
642
    case SBScriptMAND:
2✔
643
        return TAG('M', 'a', 'n', 'd');
2✔
644
    case SBScriptMANI:
2✔
645
        return TAG('M', 'a', 'n', 'i');
2✔
646
    case SBScriptMARC:
2✔
647
        return TAG('M', 'a', 'r', 'c');
2✔
648
    case SBScriptMEDF:
2✔
649
        return TAG('M', 'e', 'd', 'f');
2✔
650
    case SBScriptMEND:
2✔
651
        return TAG('M', 'e', 'n', 'd');
2✔
652
    case SBScriptMERC:
2✔
653
        return TAG('M', 'e', 'r', 'c');
2✔
654
    case SBScriptMERO:
2✔
655
        return TAG('M', 'e', 'r', 'o');
2✔
656
    case SBScriptMLYM:
2✔
657
        return TAG('M', 'l', 'y', 'm');
2✔
658
    case SBScriptMODI:
2✔
659
        return TAG('M', 'o', 'd', 'i');
2✔
660
    case SBScriptMONG:
2✔
661
        return TAG('M', 'o', 'n', 'g');
2✔
662
    case SBScriptMROO:
2✔
663
        return TAG('M', 'r', 'o', 'o');
2✔
664
    case SBScriptMTEI:
2✔
665
        return TAG('M', 't', 'e', 'i');
2✔
666
    case SBScriptMULT:
2✔
667
        return TAG('M', 'u', 'l', 't');
2✔
668
    case SBScriptMYMR:
2✔
669
        return TAG('M', 'y', 'm', 'r');
2✔
670
    case SBScriptNAGM:
2✔
671
        return TAG('N', 'a', 'g', 'm');
2✔
672
    case SBScriptNAND:
2✔
673
        return TAG('N', 'a', 'n', 'd');
2✔
674
    case SBScriptNARB:
2✔
675
        return TAG('N', 'a', 'r', 'b');
2✔
676
    case SBScriptNBAT:
2✔
677
        return TAG('N', 'b', 'a', 't');
2✔
678
    case SBScriptNEWA:
2✔
679
        return TAG('N', 'e', 'w', 'a');
2✔
680
    case SBScriptNKOO:
2✔
681
        return TAG('N', 'k', 'o', 'o');
2✔
682
    case SBScriptNSHU:
2✔
683
        return TAG('N', 's', 'h', 'u');
2✔
684
    case SBScriptOGAM:
2✔
685
        return TAG('O', 'g', 'a', 'm');
2✔
686
    case SBScriptOLCK:
2✔
687
        return TAG('O', 'l', 'c', 'k');
2✔
688
    case SBScriptONAO:
2✔
689
        return TAG('O', 'n', 'a', 'o');
2✔
690
    case SBScriptORKH:
2✔
691
        return TAG('O', 'r', 'k', 'h');
2✔
692
    case SBScriptORYA:
2✔
693
        return TAG('O', 'r', 'y', 'a');
2✔
694
    case SBScriptOSGE:
2✔
695
        return TAG('O', 's', 'g', 'e');
2✔
696
    case SBScriptOSMA:
2✔
697
        return TAG('O', 's', 'm', 'a');
2✔
698
    case SBScriptOUGR:
2✔
699
        return TAG('O', 'u', 'g', 'r');
2✔
700
    case SBScriptPALM:
2✔
701
        return TAG('P', 'a', 'l', 'm');
2✔
702
    case SBScriptPAUC:
2✔
703
        return TAG('P', 'a', 'u', 'c');
2✔
704
    case SBScriptPERM:
2✔
705
        return TAG('P', 'e', 'r', 'm');
2✔
706
    case SBScriptPHAG:
2✔
707
        return TAG('P', 'h', 'a', 'g');
2✔
708
    case SBScriptPHLI:
2✔
709
        return TAG('P', 'h', 'l', 'i');
2✔
710
    case SBScriptPHLP:
2✔
711
        return TAG('P', 'h', 'l', 'p');
2✔
712
    case SBScriptPHNX:
2✔
713
        return TAG('P', 'h', 'n', 'x');
2✔
714
    case SBScriptPLRD:
2✔
715
        return TAG('P', 'l', 'r', 'd');
2✔
716
    case SBScriptPRTI:
2✔
717
        return TAG('P', 'r', 't', 'i');
2✔
718
    case SBScriptRJNG:
2✔
719
        return TAG('R', 'j', 'n', 'g');
2✔
720
    case SBScriptROHG:
2✔
721
        return TAG('R', 'o', 'h', 'g');
2✔
722
    case SBScriptRUNR:
2✔
723
        return TAG('R', 'u', 'n', 'r');
2✔
724
    case SBScriptSAMR:
2✔
725
        return TAG('S', 'a', 'm', 'r');
2✔
726
    case SBScriptSARB:
2✔
727
        return TAG('S', 'a', 'r', 'b');
2✔
728
    case SBScriptSAUR:
2✔
729
        return TAG('S', 'a', 'u', 'r');
2✔
730
    case SBScriptSGNW:
2✔
731
        return TAG('S', 'g', 'n', 'w');
2✔
732
    case SBScriptSHAW:
2✔
733
        return TAG('S', 'h', 'a', 'w');
2✔
734
    case SBScriptSHRD:
2✔
735
        return TAG('S', 'h', 'r', 'd');
2✔
736
    case SBScriptSIDD:
2✔
737
        return TAG('S', 'i', 'd', 'd');
2✔
738
    case SBScriptSIDT:
2✔
739
        return TAG('S', 'i', 'd', 't');
2✔
740
    case SBScriptSIND:
2✔
741
        return TAG('S', 'i', 'n', 'd');
2✔
742
    case SBScriptSINH:
2✔
743
        return TAG('S', 'i', 'n', 'h');
2✔
744
    case SBScriptSOGD:
2✔
745
        return TAG('S', 'o', 'g', 'd');
2✔
746
    case SBScriptSOGO:
2✔
747
        return TAG('S', 'o', 'g', 'o');
2✔
748
    case SBScriptSORA:
2✔
749
        return TAG('S', 'o', 'r', 'a');
2✔
750
    case SBScriptSOYO:
2✔
751
        return TAG('S', 'o', 'y', 'o');
2✔
752
    case SBScriptSUND:
2✔
753
        return TAG('S', 'u', 'n', 'd');
2✔
754
    case SBScriptSUNU:
2✔
755
        return TAG('S', 'u', 'n', 'u');
2✔
756
    case SBScriptSYLO:
2✔
757
        return TAG('S', 'y', 'l', 'o');
2✔
758
    case SBScriptSYRC:
2✔
759
        return TAG('S', 'y', 'r', 'c');
2✔
760
    case SBScriptTAGB:
2✔
761
        return TAG('T', 'a', 'g', 'b');
2✔
762
    case SBScriptTAKR:
2✔
763
        return TAG('T', 'a', 'k', 'r');
2✔
764
    case SBScriptTALE:
2✔
765
        return TAG('T', 'a', 'l', 'e');
2✔
766
    case SBScriptTALU:
2✔
767
        return TAG('T', 'a', 'l', 'u');
2✔
768
    case SBScriptTAML:
2✔
769
        return TAG('T', 'a', 'm', 'l');
2✔
770
    case SBScriptTANG:
2✔
771
        return TAG('T', 'a', 'n', 'g');
2✔
772
    case SBScriptTAVT:
2✔
773
        return TAG('T', 'a', 'v', 't');
2✔
774
    case SBScriptTAYO:
2✔
775
        return TAG('T', 'a', 'y', 'o');
2✔
776
    case SBScriptTELU:
2✔
777
        return TAG('T', 'e', 'l', 'u');
2✔
778
    case SBScriptTFNG:
2✔
779
        return TAG('T', 'f', 'n', 'g');
2✔
780
    case SBScriptTGLG:
2✔
781
        return TAG('T', 'g', 'l', 'g');
2✔
782
    case SBScriptTHAA:
2✔
783
        return TAG('T', 'h', 'a', 'a');
2✔
784
    case SBScriptTHAI:
2✔
785
        return TAG('T', 'h', 'a', 'i');
2✔
786
    case SBScriptTIBT:
2✔
787
        return TAG('T', 'i', 'b', 't');
2✔
788
    case SBScriptTIRH:
2✔
789
        return TAG('T', 'i', 'r', 'h');
2✔
790
    case SBScriptTNSA:
2✔
791
        return TAG('T', 'n', 's', 'a');
2✔
792
    case SBScriptTODR:
2✔
793
        return TAG('T', 'o', 'd', 'r');
2✔
794
    case SBScriptTOLS:
2✔
795
        return TAG('T', 'o', 'l', 's');
2✔
796
    case SBScriptTOTO:
2✔
797
        return TAG('T', 'o', 't', 'o');
2✔
798
    case SBScriptTUTG:
2✔
799
        return TAG('T', 'u', 't', 'g');
2✔
800
    case SBScriptUGAR:
2✔
801
        return TAG('U', 'g', 'a', 'r');
2✔
802
    case SBScriptVAII:
2✔
803
        return TAG('V', 'a', 'i', 'i');
2✔
804
    case SBScriptVITH:
2✔
805
        return TAG('V', 'i', 't', 'h');
2✔
806
    case SBScriptWARA:
2✔
807
        return TAG('W', 'a', 'r', 'a');
2✔
808
    case SBScriptWCHO:
2✔
809
        return TAG('W', 'c', 'h', 'o');
2✔
810
    case SBScriptXPEO:
2✔
811
        return TAG('X', 'p', 'e', 'o');
2✔
812
    case SBScriptXSUX:
2✔
813
        return TAG('X', 's', 'u', 'x');
2✔
814
    case SBScriptYEZI:
2✔
815
        return TAG('Y', 'e', 'z', 'i');
2✔
816
    case SBScriptYIII:
2✔
817
        return TAG('Y', 'i', 'i', 'i');
2✔
818
    case SBScriptZANB:
2✔
819
        return TAG('Z', 'a', 'n', 'b');
2✔
820
    case SBScriptZINH:
2✔
821
        return TAG('Z', 'i', 'n', 'h');
2✔
822
    case SBScriptZYYY:
2✔
823
        return TAG('Z', 'y', 'y', 'y');
2✔
824
    case SBScriptZZZZ:
2✔
825
        return TAG('Z', 'z', 'z', 'z');
2✔
826
    default:
81✔
827
        return 0;
81✔
828
    }
829
}
830

UNCOV
831
const char *SBVersionGetString(void)
×
832
{
UNCOV
833
    return LibraryVersion;
×
834
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc