@@ -71,6 +71,9 @@ static const unsigned short EncUNICODE_ISO_8859_1_CtypeTable[256] = {
71
71
0x30e2 , 0x30e2 , 0x30e2 , 0x30e2 , 0x30e2 , 0x30e2 , 0x30e2 , 0x30e2
72
72
};
73
73
74
+ /* use bottom bytes for actual code point count; 3 bits is more than enough */
75
+ #define OnigCodePointCount (n ) ((n)&0x111)
76
+
74
77
typedef struct {
75
78
int n ;
76
79
OnigCodePoint code [3 ];
@@ -247,7 +250,7 @@ onigenc_unicode_mbc_case_fold(OnigEncoding enc,
247
250
#endif
248
251
249
252
if ((to = onigenc_unicode_fold_lookup (code )) != 0 ) {
250
- if (to -> n == 1 ) {
253
+ if (OnigCodePointCount ( to -> n ) == 1 ) {
251
254
return ONIGENC_CODE_TO_MBC (enc , to -> code [0 ], fold );
252
255
}
253
256
#if 0
@@ -258,7 +261,7 @@ onigenc_unicode_mbc_case_fold(OnigEncoding enc,
258
261
#endif
259
262
{
260
263
rlen = 0 ;
261
- for (i = 0 ; i < to -> n ; i ++ ) {
264
+ for (i = 0 ; i < OnigCodePointCount ( to -> n ) ; i ++ ) {
262
265
len = ONIGENC_CODE_TO_MBC (enc , to -> code [i ], fold );
263
266
fold += len ;
264
267
rlen += len ;
@@ -284,7 +287,7 @@ onigenc_unicode_apply_all_case_fold(OnigCaseFoldType flag,
284
287
285
288
for (i = 0 ; i < numberof (CaseUnfold_11 ); i ++ ) {
286
289
p11 = & CaseUnfold_11 [i ];
287
- for (j = 0 ; j < p11 -> to .n ; j ++ ) {
290
+ for (j = 0 ; j < OnigCodePointCount ( p11 -> to .n ) ; j ++ ) {
288
291
code = p11 -> from ;
289
292
r = (* f )(p11 -> to .code [j ], & code , 1 , arg );
290
293
if (r != 0 ) return r ;
@@ -323,7 +326,7 @@ onigenc_unicode_apply_all_case_fold(OnigCaseFoldType flag,
323
326
#endif
324
327
for (i = 0 ; i < numberof (CaseUnfold_11_Locale ); i ++ ) {
325
328
p11 = & CaseUnfold_11_Locale [i ];
326
- for (j = 0 ; j < p11 -> to .n ; j ++ ) {
329
+ for (j = 0 ; j < OnigCodePointCount ( p11 -> to .n ) ; j ++ ) {
327
330
code = p11 -> from ;
328
331
r = (* f )(p11 -> to .code [j ], & code , 1 , arg );
329
332
if (r != 0 ) return r ;
@@ -349,12 +352,12 @@ onigenc_unicode_apply_all_case_fold(OnigCaseFoldType flag,
349
352
350
353
if ((flag & INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR ) != 0 ) {
351
354
for (i = 0 ; i < numberof (CaseUnfold_12 ); i ++ ) {
352
- for (j = 0 ; j < CaseUnfold_12 [i ].to .n ; j ++ ) {
355
+ for (j = 0 ; j < OnigCodePointCount ( CaseUnfold_12 [i ].to .n ) ; j ++ ) {
353
356
r = (* f )(CaseUnfold_12 [i ].to .code [j ],
354
357
(OnigCodePoint * )CaseUnfold_12 [i ].from , 2 , arg );
355
358
if (r != 0 ) return r ;
356
359
357
- for (k = 0 ; k < CaseUnfold_12 [i ].to .n ; k ++ ) {
360
+ for (k = 0 ; k < OnigCodePointCount ( CaseUnfold_12 [i ].to .n ) ; k ++ ) {
358
361
if (k == j ) continue ;
359
362
360
363
r = (* f )(CaseUnfold_12 [i ].to .code [j ],
@@ -368,12 +371,12 @@ onigenc_unicode_apply_all_case_fold(OnigCaseFoldType flag,
368
371
if ((flag & ONIGENC_CASE_FOLD_TURKISH_AZERI ) == 0 ) {
369
372
#endif
370
373
for (i = 0 ; i < numberof (CaseUnfold_12_Locale ); i ++ ) {
371
- for (j = 0 ; j < CaseUnfold_12_Locale [i ].to .n ; j ++ ) {
374
+ for (j = 0 ; j < OnigCodePointCount ( CaseUnfold_12_Locale [i ].to .n ) ; j ++ ) {
372
375
r = (* f )(CaseUnfold_12_Locale [i ].to .code [j ],
373
376
(OnigCodePoint * )CaseUnfold_12_Locale [i ].from , 2 , arg );
374
377
if (r != 0 ) return r ;
375
378
376
- for (k = 0 ; k < CaseUnfold_12_Locale [i ].to .n ; k ++ ) {
379
+ for (k = 0 ; k < OnigCodePointCount ( CaseUnfold_12_Locale [i ].to .n ) ; k ++ ) {
377
380
if (k == j ) continue ;
378
381
379
382
r = (* f )(CaseUnfold_12_Locale [i ].to .code [j ],
@@ -388,12 +391,12 @@ onigenc_unicode_apply_all_case_fold(OnigCaseFoldType flag,
388
391
#endif
389
392
390
393
for (i = 0 ; i < numberof (CaseUnfold_13 ); i ++ ) {
391
- for (j = 0 ; j < CaseUnfold_13 [i ].to .n ; j ++ ) {
394
+ for (j = 0 ; j < OnigCodePointCount ( CaseUnfold_13 [i ].to .n ) ; j ++ ) {
392
395
r = (* f )(CaseUnfold_13 [i ].to .code [j ],
393
396
(OnigCodePoint * )CaseUnfold_13 [i ].from , 3 , arg );
394
397
if (r != 0 ) return r ;
395
398
396
- for (k = 0 ; k < CaseUnfold_13 [i ].to .n ; k ++ ) {
399
+ for (k = 0 ; k < OnigCodePointCount ( CaseUnfold_13 [i ].to .n ) ; k ++ ) {
397
400
if (k == j ) continue ;
398
401
399
402
r = (* f )(CaseUnfold_13 [i ].to .code [j ],
@@ -452,7 +455,7 @@ onigenc_unicode_get_case_fold_codes_by_str(OnigEncoding enc,
452
455
#endif
453
456
454
457
if ((to = onigenc_unicode_fold_lookup (code )) != 0 ) {
455
- if (to -> n == 1 ) {
458
+ if (OnigCodePointCount ( to -> n ) == 1 ) {
456
459
OnigCodePoint orig_code = code ;
457
460
458
461
items [0 ].byte_len = len ;
@@ -462,7 +465,7 @@ onigenc_unicode_get_case_fold_codes_by_str(OnigEncoding enc,
462
465
463
466
code = to -> code [0 ];
464
467
if ((to = onigenc_unicode_unfold1_lookup (code )) != 0 ) {
465
- for (i = 0 ; i < to -> n ; i ++ ) {
468
+ for (i = 0 ; i < OnigCodePointCount ( to -> n ) ; i ++ ) {
466
469
if (to -> code [i ] != orig_code ) {
467
470
items [n ].byte_len = len ;
468
471
items [n ].code_len = 1 ;
@@ -476,13 +479,13 @@ onigenc_unicode_get_case_fold_codes_by_str(OnigEncoding enc,
476
479
OnigCodePoint cs [3 ][4 ];
477
480
int fn , ncs [3 ];
478
481
479
- for (fn = 0 ; fn < to -> n ; fn ++ ) {
482
+ for (fn = 0 ; fn < OnigCodePointCount ( to -> n ) ; fn ++ ) {
480
483
cs [fn ][0 ] = to -> code [fn ];
481
484
if ((z3 = onigenc_unicode_unfold1_lookup (cs [fn ][0 ])) != 0 ) {
482
- for (i = 0 ; i < z3 -> n ; i ++ ) {
485
+ for (i = 0 ; i < OnigCodePointCount ( z3 -> n ) ; i ++ ) {
483
486
cs [fn ][i + 1 ] = z3 -> code [i ];
484
487
}
485
- ncs [fn ] = z3 -> n + 1 ;
488
+ ncs [fn ] = OnigCodePointCount ( z3 -> n ) + 1 ;
486
489
}
487
490
else
488
491
ncs [fn ] = 1 ;
@@ -500,7 +503,7 @@ onigenc_unicode_get_case_fold_codes_by_str(OnigEncoding enc,
500
503
}
501
504
502
505
if ((z2 = onigenc_unicode_unfold2_lookup (to -> code )) != 0 ) {
503
- for (i = 0 ; i < z2 -> n ; i ++ ) {
506
+ for (i = 0 ; i < OnigCodePointCount ( z2 -> n ) ; i ++ ) {
504
507
if (z2 -> code [i ] == code ) continue ;
505
508
506
509
items [n ].byte_len = len ;
@@ -525,7 +528,7 @@ onigenc_unicode_get_case_fold_codes_by_str(OnigEncoding enc,
525
528
}
526
529
527
530
if ((z2 = onigenc_unicode_unfold3_lookup (to -> code )) != 0 ) {
528
- for (i = 0 ; i < z2 -> n ; i ++ ) {
531
+ for (i = 0 ; i < OnigCodePointCount ( z2 -> n ) ; i ++ ) {
529
532
if (z2 -> code [i ] == code ) continue ;
530
533
531
534
items [n ].byte_len = len ;
@@ -542,7 +545,7 @@ onigenc_unicode_get_case_fold_codes_by_str(OnigEncoding enc,
542
545
}
543
546
else {
544
547
if ((to = onigenc_unicode_unfold1_lookup (code )) != 0 ) {
545
- for (i = 0 ; i < to -> n ; i ++ ) {
548
+ for (i = 0 ; i < OnigCodePointCount ( to -> n ) ; i ++ ) {
546
549
items [n ].byte_len = len ;
547
550
items [n ].code_len = 1 ;
548
551
items [n ].code [0 ] = to -> code [i ];
@@ -560,7 +563,7 @@ onigenc_unicode_get_case_fold_codes_by_str(OnigEncoding enc,
560
563
codes [0 ] = code ;
561
564
code = ONIGENC_MBC_TO_CODE (enc , p , end );
562
565
if ((to = onigenc_unicode_fold_lookup (code )) != 0
563
- && to -> n == 1 ) {
566
+ && OnigCodePointCount ( to -> n ) == 1 ) {
564
567
codes [1 ] = to -> code [0 ];
565
568
}
566
569
else
@@ -569,7 +572,7 @@ onigenc_unicode_get_case_fold_codes_by_str(OnigEncoding enc,
569
572
clen = enclen (enc , p , end );
570
573
len += clen ;
571
574
if ((z2 = onigenc_unicode_unfold2_lookup (codes )) != 0 ) {
572
- for (i = 0 ; i < z2 -> n ; i ++ ) {
575
+ for (i = 0 ; i < OnigCodePointCount ( z2 -> n ) ; i ++ ) {
573
576
items [n ].byte_len = len ;
574
577
items [n ].code_len = 1 ;
575
578
items [n ].code [0 ] = z2 -> code [i ];
@@ -581,7 +584,7 @@ onigenc_unicode_get_case_fold_codes_by_str(OnigEncoding enc,
581
584
if (p < end ) {
582
585
code = ONIGENC_MBC_TO_CODE (enc , p , end );
583
586
if ((to = onigenc_unicode_fold_lookup (code )) != 0
584
- && to -> n == 1 ) {
587
+ && OnigCodePointCount ( to -> n ) == 1 ) {
585
588
codes [2 ] = to -> code [0 ];
586
589
}
587
590
else
@@ -590,7 +593,7 @@ onigenc_unicode_get_case_fold_codes_by_str(OnigEncoding enc,
590
593
clen = enclen (enc , p , end );
591
594
len += clen ;
592
595
if ((z2 = onigenc_unicode_unfold3_lookup (codes )) != 0 ) {
593
- for (i = 0 ; i < z2 -> n ; i ++ ) {
596
+ for (i = 0 ; i < OnigCodePointCount ( z2 -> n ) ; i ++ ) {
594
597
items [n ].byte_len = len ;
595
598
items [n ].code_len = 1 ;
596
599
items [n ].code [0 ] = z2 -> code [i ];
0 commit comments