Coverage Report

Created: 2025-07-09 06:28

/src/w3m/libwc/priv.c
Line
Count
Source (jump to first uncovered line)
1
2
#include "wc.h"
3
#include "wtf.h"
4
5
Str
6
wc_conv_from_priv1(Str is, wc_ces ces)
7
465
{
8
465
    Str os;
9
465
    wc_uchar *sp = (wc_uchar *)is->ptr;
10
465
    wc_uchar *ep = sp + is->length;
11
465
    wc_uchar *p;
12
465
    wc_ccs ccs = WcCesInfo[WC_CCS_INDEX(ces)].gset[1].ccs;
13
14
1.14k
    for (p = sp; p < ep && *p < 0x80; p++)
15
682
  ;
16
465
    if (p == ep)
17
87
  return is;
18
378
    os = Strnew_size(is->length);
19
378
    if (p > sp)
20
38
  Strcat_charp_n(os, is->ptr, (int)(p - sp));
21
22
4.06M
    for (; p < ep; p++) {
23
4.06M
  if (*p & 0x80)
24
3.72M
      wtf_push(os, ccs, (wc_uint32)*p);
25
335k
  else
26
335k
      Strcat_char(os, (char)*p);
27
4.06M
    }
28
378
    return os;
29
465
}
30
31
Str
32
wc_char_conv_from_priv1(wc_uchar c, wc_status *st)
33
0
{
34
0
    Str os = Strnew_size(1);
35
36
0
    if (c & 0x80)
37
0
  wtf_push(os, st->ces_info->gset[1].ccs, (wc_uint32)c);
38
0
    else
39
0
  Strcat_char(os, (char)c);
40
0
    return os;
41
0
}
42
43
Str
44
wc_conv_from_ascii(Str is, wc_ces ces)
45
1.36k
{
46
1.36k
    Str os;
47
1.36k
    wc_uchar *sp = (wc_uchar *)is->ptr;
48
1.36k
    wc_uchar *ep = sp + is->length;
49
1.36k
    wc_uchar *p;
50
51
15.9k
    for (p = sp; p < ep && *p < 0x80; p++)
52
14.6k
  ;
53
1.36k
    if (p == ep)
54
949
  return is;
55
420
    os = Strnew_size(is->length);
56
420
    if (p > sp)
57
118
  Strcat_charp_n(os, is->ptr, (int)(p - sp));
58
59
2.18M
    for (; p < ep; p++) {
60
2.18M
  if (*p & 0x80)
61
1.22M
      wtf_push_unknown(os, p, 1);
62
957k
  else
63
957k
      Strcat_char(os, (char)*p);
64
2.18M
    }
65
420
    return os;
66
1.36k
}
67
68
void
69
wc_push_to_raw(Str os, wc_wchar_t cc, wc_status *st)
70
988k
{
71
72
988k
    switch (cc.ccs) {
73
350
    case WC_CCS_US_ASCII:
74
951k
    case WC_CCS_RAW:
75
951k
  Strcat_char(os, (char)cc.code);
76
988k
    }
77
988k
    return;
78
988k
}