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

Tehreer / SheenBidi / 15192346582

22 May 2025 04:13PM UTC coverage: 79.545% (+1.0%) from 78.546%
15192346582

push

github

mta452
[make] Set C++ standard version to 14

1400 of 1760 relevant lines covered (79.55%)

868008.5 hits per line

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

3.15
/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 <SBConfig.h>
18
#include "SBBase.h"
19

20
#define TAG(a, b, c, d) \
21
(SBUInt32)              \
22
(                       \
23
   ((SBUInt8)(a) << 24) \
24
 | ((SBUInt8)(b) << 16) \
25
 | ((SBUInt8)(c) <<  8) \
26
 | ((SBUInt8)(d) <<  0) \
27
)
28

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

62
    if (*rangeOffset < actualLength) {
861,949✔
63
        SBUInteger possibleLimit = *rangeOffset + *rangeLength;
861,949✔
64

65
        if (*rangeOffset <= possibleLimit && possibleLimit <= actualLength) {
861,949✔
66
            /* The range is valid. Nothing to do here. */
67
        } else {
68
            *rangeLength = actualLength - *rangeOffset;
×
69
        }
70
    } else {
71
        *rangeOffset = SBInvalidIndex;
×
72
        *rangeLength = 0;
×
73
    }
74
}
861,949✔
75

76
SB_INTERNAL SBBoolean SBUIntegerVerifyRange(SBUInteger actualLength,
861,949✔
77
    SBUInteger rangeOffset, SBUInteger rangeLength)
78
{
79
    SBUInteger possibleLimit = rangeOffset + rangeLength;
861,949✔
80

81
    return rangeOffset < actualLength
82
        && rangeOffset <= possibleLimit
861,949✔
83
        && possibleLimit <= actualLength;
1,723,898✔
84
}
85

86
SBUInt32 SBScriptGetOpenTypeTag(SBScript script)
×
87
{
88
    /* Reference: https://docs.microsoft.com/en-us/typography/opentype/spec/scripttags */
89
    /* Dated: 07/24/2017 */
90

91
    switch (script) {
×
92
    case SBScriptADLM:
×
93
        return TAG('a', 'd', 'l', 'm');
×
94
    case SBScriptAHOM:
×
95
        return TAG('a', 'h', 'o', 'm');
×
96
    case SBScriptHLUW:
×
97
        return TAG('h', 'l', 'u', 'w');
×
98
    case SBScriptARAB:
×
99
        return TAG('a', 'r', 'a', 'b');
×
100
    case SBScriptARMN:
×
101
        return TAG('a', 'r', 'm', 'n');
×
102
    case SBScriptAVST:
×
103
        return TAG('a', 'v', 's', 't');
×
104
    case SBScriptBALI:
×
105
        return TAG('b', 'a', 'l', 'i');
×
106
    case SBScriptBAMU:
×
107
        return TAG('b', 'a', 'm', 'u');
×
108
    case SBScriptBASS:
×
109
        return TAG('b', 'a', 's', 's');
×
110
    case SBScriptBATK:
×
111
        return TAG('b', 'a', 't', 'k');
×
112
 /* case SBScriptBENG:
113
        return TAG('b', 'e', 'n', 'g'); */
114
    case SBScriptBENG:
×
115
        return TAG('b', 'n', 'g', '2');
×
116
    case SBScriptBHKS:
×
117
        return TAG('b', 'h', 'k', 's');
×
118
    case SBScriptBOPO:
×
119
        return TAG('b', 'o', 'p', 'o');
×
120
    case SBScriptBRAH:
×
121
        return TAG('b', 'r', 'a', 'h');
×
122
    case SBScriptBRAI:
×
123
        return TAG('b', 'r', 'a', 'i');
×
124
    case SBScriptBUGI:
×
125
        return TAG('b', 'u', 'g', 'i');
×
126
    case SBScriptBUHD:
×
127
        return TAG('b', 'u', 'h', 'd');
×
128
 /* case SBScriptBYZM:
129
        return TAG('b', 'y', 'z', 'm'); */
130
    case SBScriptCANS:
×
131
        return TAG('c', 'a', 'n', 's');
×
132
    case SBScriptCARI:
×
133
        return TAG('c', 'a', 'r', 'i');
×
134
    case SBScriptAGHB:
×
135
        return TAG('a', 'g', 'h', 'b');
×
136
    case SBScriptCAKM:
×
137
        return TAG('c', 'a', 'k', 'm');
×
138
    case SBScriptCHAM:
×
139
        return TAG('c', 'h', 'a', 'm');
×
140
    case SBScriptCHER:
×
141
        return TAG('c', 'h', 'e', 'r');
×
142
    case SBScriptHANI:
×
143
        return TAG('h', 'a', 'n', 'i');
×
144
    case SBScriptCOPT:
×
145
        return TAG('c', 'o', 'p', 't');
×
146
    case SBScriptCPRT:
×
147
        return TAG('c', 'p', 'r', 't');
×
148
    case SBScriptCYRL:
×
149
        return TAG('c', 'y', 'r', 'l');
×
150
 /* case SBScriptDFLT:
151
        return TAG('D', 'F', 'L', 'T'); */
152
    case SBScriptDSRT:
×
153
        return TAG('d', 's', 'r', 't');
×
154
 /* case SBScriptDEVA:
155
        return TAG('d', 'e', 'v', 'a'); */
156
    case SBScriptDEVA:
×
157
        return TAG('d', 'e', 'v', '2');
×
158
    case SBScriptDUPL:
×
159
        return TAG('d', 'u', 'p', 'l');
×
160
    case SBScriptEGYP:
×
161
        return TAG('e', 'g', 'y', 'p');
×
162
    case SBScriptELBA:
×
163
        return TAG('e', 'l', 'b', 'a');
×
164
    case SBScriptETHI:
×
165
        return TAG('e', 't', 'h', 'i');
×
166
    case SBScriptGEOR:
×
167
        return TAG('g', 'e', 'o', 'r');
×
168
    case SBScriptGLAG:
×
169
        return TAG('g', 'l', 'a', 'g');
×
170
    case SBScriptGOTH:
×
171
        return TAG('g', 'o', 't', 'h');
×
172
    case SBScriptGRAN:
×
173
        return TAG('g', 'r', 'a', 'n');
×
174
    case SBScriptGREK:
×
175
        return TAG('g', 'r', 'e', 'k');
×
176
 /* case SBScriptGUJR:
177
        return TAG('g', 'u', 'j', 'r'); */
178
    case SBScriptGUJR:
×
179
        return TAG('g', 'j', 'r', '2');
×
180
 /* case SBScriptGURU:
181
        return TAG('g', 'u', 'r', 'u'); */
182
    case SBScriptGURU:
×
183
        return TAG('g', 'u', 'r', '2');
×
184
    case SBScriptHANG:
×
185
        return TAG('h', 'a', 'n', 'g');
×
186
 /* case SBScriptJAMO:
187
        return TAG('j', 'a', 'm', 'o'); */
188
    case SBScriptHANO:
×
189
        return TAG('h', 'a', 'n', 'o');
×
190
    case SBScriptHATR:
×
191
        return TAG('h', 'a', 't', 'r');
×
192
    case SBScriptHEBR:
×
193
        return TAG('h', 'e', 'b', 'r');
×
194
    case SBScriptHIRA:
×
195
        return TAG('k', 'a', 'n', 'a');
×
196
    case SBScriptARMI:
×
197
        return TAG('a', 'r', 'm', 'i');
×
198
    case SBScriptPHLI:
×
199
        return TAG('p', 'h', 'l', 'i');
×
200
    case SBScriptPRTI:
×
201
        return TAG('p', 'r', 't', 'i');
×
202
    case SBScriptJAVA:
×
203
        return TAG('j', 'a', 'v', 'a');
×
204
    case SBScriptKTHI:
×
205
        return TAG('k', 't', 'h', 'i');
×
206
 /* case SBScriptKNDA:
207
        return TAG('k', 'n', 'd', 'a'); */
208
    case SBScriptKNDA:
×
209
        return TAG('k', 'n', 'd', '2');
×
210
    case SBScriptKANA:
×
211
        return TAG('k', 'a', 'n', 'a');
×
212
    case SBScriptKALI:
×
213
        return TAG('k', 'a', 'l', 'i');
×
214
    case SBScriptKHAR:
×
215
        return TAG('k', 'h', 'a', 'r');
×
216
    case SBScriptKHMR:
×
217
        return TAG('k', 'h', 'm', 'r');
×
218
    case SBScriptKHOJ:
×
219
        return TAG('k', 'h', 'o', 'j');
×
220
    case SBScriptSIND:
×
221
        return TAG('s', 'i', 'n', 'd');
×
222
    case SBScriptLAOO:
×
223
        return TAG('l', 'a', 'o', ' ');
×
224
    case SBScriptLATN:
×
225
        return TAG('l', 'a', 't', 'n');
×
226
    case SBScriptLEPC:
×
227
        return TAG('l', 'e', 'p', 'c');
×
228
    case SBScriptLIMB:
×
229
        return TAG('l', 'i', 'm', 'b');
×
230
    case SBScriptLINA:
×
231
        return TAG('l', 'i', 'n', 'a');
×
232
    case SBScriptLINB:
×
233
        return TAG('l', 'i', 'n', 'b');
×
234
    case SBScriptLISU:
×
235
        return TAG('l', 'i', 's', 'u');
×
236
    case SBScriptLYCI:
×
237
        return TAG('l', 'y', 'c', 'i');
×
238
    case SBScriptLYDI:
×
239
        return TAG('l', 'y', 'd', 'i');
×
240
    case SBScriptMAHJ:
×
241
        return TAG('m', 'a', 'h', 'j');
×
242
 /* case SBScriptMLYM:
243
        return TAG('m', 'l', 'y', 'm'); */
244
    case SBScriptMLYM:
×
245
        return TAG('m', 'l', 'm', '2');
×
246
    case SBScriptMAND:
×
247
        return TAG('m', 'a', 'n', 'd');
×
248
    case SBScriptMANI:
×
249
        return TAG('m', 'a', 'n', 'i');
×
250
    case SBScriptMARC:
×
251
        return TAG('m', 'a', 'r', 'c');
×
252
 /* case SBScriptMATH:
253
        return TAG('m', 'a', 't', 'h'); */
254
    case SBScriptMTEI:
×
255
        return TAG('m', 't', 'e', 'i');
×
256
    case SBScriptMEND:
×
257
        return TAG('m', 'e', 'n', 'd');
×
258
    case SBScriptMERC:
×
259
        return TAG('m', 'e', 'r', 'c');
×
260
    case SBScriptMERO:
×
261
        return TAG('m', 'e', 'r', 'o');
×
262
    case SBScriptPLRD:
×
263
        return TAG('p', 'l', 'r', 'd');
×
264
    case SBScriptMODI:
×
265
        return TAG('m', 'o', 'd', 'i');
×
266
    case SBScriptMONG:
×
267
        return TAG('m', 'o', 'n', 'g');
×
268
    case SBScriptMROO:
×
269
        return TAG('m', 'r', 'o', 'o');
×
270
    case SBScriptMULT:
×
271
        return TAG('m', 'u', 'l', 't');
×
272
 /* case SBScriptMUSC:
273
        return TAG('m', 'u', 's', 'c'); */
274
 /* case SBScriptMYMR:
275
        return TAG('m', 'y', 'm', 'r'); */
276
    case SBScriptMYMR:
×
277
        return TAG('m', 'y', 'm', '2');
×
278
    case SBScriptNBAT:
×
279
        return TAG('n', 'b', 'a', 't');
×
280
    case SBScriptNEWA:
×
281
        return TAG('n', 'e', 'w', 'a');
×
282
    case SBScriptTALU:
×
283
        return TAG('t', 'a', 'l', 'u');
×
284
    case SBScriptNKOO:
×
285
        return TAG('n', 'k', 'o', ' ');
×
286
 /* case SBScriptORYA:
287
        return TAG('o', 'r', 'y', 'a'); */
288
    case SBScriptORYA:
×
289
        return TAG('o', 'r', 'y', '2');
×
290
    case SBScriptOGAM:
×
291
        return TAG('o', 'g', 'a', 'm');
×
292
    case SBScriptOLCK:
×
293
        return TAG('o', 'l', 'c', 'k');
×
294
    case SBScriptITAL:
×
295
        return TAG('i', 't', 'a', 'l');
×
296
    case SBScriptHUNG:
×
297
        return TAG('h', 'u', 'n', 'g');
×
298
    case SBScriptNARB:
×
299
        return TAG('n', 'a', 'r', 'b');
×
300
    case SBScriptPERM:
×
301
        return TAG('p', 'e', 'r', 'm');
×
302
    case SBScriptXPEO:
×
303
        return TAG('x', 'p', 'e', 'o');
×
304
    case SBScriptSARB:
×
305
        return TAG('s', 'a', 'r', 'b');
×
306
    case SBScriptORKH:
×
307
        return TAG('o', 'r', 'k', 'h');
×
308
    case SBScriptOSGE:
×
309
        return TAG('o', 's', 'g', 'e');
×
310
    case SBScriptOSMA:
×
311
        return TAG('o', 's', 'm', 'a');
×
312
    case SBScriptHMNG:
×
313
        return TAG('h', 'm', 'n', 'g');
×
314
    case SBScriptPALM:
×
315
        return TAG('p', 'a', 'l', 'm');
×
316
    case SBScriptPAUC:
×
317
        return TAG('p', 'a', 'u', 'c');
×
318
    case SBScriptPHAG:
×
319
        return TAG('p', 'h', 'a', 'g');
×
320
    case SBScriptPHNX:
×
321
        return TAG('p', 'h', 'n', 'x');
×
322
    case SBScriptPHLP:
×
323
        return TAG('p', 'h', 'l', 'p');
×
324
    case SBScriptRJNG:
×
325
        return TAG('r', 'j', 'n', 'g');
×
326
    case SBScriptRUNR:
×
327
        return TAG('r', 'u', 'n', 'r');
×
328
    case SBScriptSAMR:
×
329
        return TAG('s', 'a', 'm', 'r');
×
330
    case SBScriptSAUR:
×
331
        return TAG('s', 'a', 'u', 'r');
×
332
    case SBScriptSHRD:
×
333
        return TAG('s', 'h', 'r', 'd');
×
334
    case SBScriptSHAW:
×
335
        return TAG('s', 'h', 'a', 'w');
×
336
    case SBScriptSIDD:
×
337
        return TAG('s', 'i', 'd', 'd');
×
338
    case SBScriptSGNW:
×
339
        return TAG('s', 'g', 'n', 'w');
×
340
    case SBScriptSINH:
×
341
        return TAG('s', 'i', 'n', 'h');
×
342
    case SBScriptSORA:
×
343
        return TAG('s', 'o', 'r', 'a');
×
344
    case SBScriptXSUX:
×
345
        return TAG('x', 's', 'u', 'x');
×
346
    case SBScriptSUND:
×
347
        return TAG('s', 'u', 'n', 'd');
×
348
    case SBScriptSYLO:
×
349
        return TAG('s', 'y', 'l', 'o');
×
350
    case SBScriptSYRC:
×
351
        return TAG('s', 'y', 'r', 'c');
×
352
    case SBScriptTGLG:
×
353
        return TAG('t', 'g', 'l', 'g');
×
354
    case SBScriptTAGB:
×
355
        return TAG('t', 'a', 'g', 'b');
×
356
    case SBScriptTALE:
×
357
        return TAG('t', 'a', 'l', 'e');
×
358
    case SBScriptLANA:
×
359
        return TAG('l', 'a', 'n', 'a');
×
360
    case SBScriptTAVT:
×
361
        return TAG('t', 'a', 'v', 't');
×
362
    case SBScriptTAKR:
×
363
        return TAG('t', 'a', 'k', 'r');
×
364
 /* case SBScriptTAML:
365
        return TAG('t', 'a', 'm', 'l'); */
366
    case SBScriptTAML:
×
367
        return TAG('t', 'm', 'l', '2');
×
368
    case SBScriptTANG:
×
369
        return TAG('t', 'a', 'n', 'g');
×
370
 /* case SBScriptTELU:
371
        return TAG('t', 'e', 'l', 'u'); */
372
    case SBScriptTELU:
×
373
        return TAG('t', 'e', 'l', '2');
×
374
    case SBScriptTHAA:
×
375
        return TAG('t', 'h', 'a', 'a');
×
376
    case SBScriptTHAI:
×
377
        return TAG('t', 'h', 'a', 'i');
×
378
    case SBScriptTIBT:
×
379
        return TAG('t', 'i', 'b', 't');
×
380
    case SBScriptTFNG:
×
381
        return TAG('t', 'f', 'n', 'g');
×
382
    case SBScriptTIRH:
×
383
        return TAG('t', 'i', 'r', 'h');
×
384
    case SBScriptUGAR:
×
385
        return TAG('u', 'g', 'a', 'r');
×
386
    case SBScriptVAII:
×
387
        return TAG('v', 'a', 'i', ' ');
×
388
    case SBScriptWARA:
×
389
        return TAG('w', 'a', 'r', 'a');
×
390
    case SBScriptYIII:
×
391
        return TAG('y', 'i', ' ', ' ');
×
392
    default:
×
393
        return TAG('D', 'F', 'L', 'T');
×
394
    }
395
}
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