Coverage Report

Created: 2025-06-10 07:06

/src/ghostpdl/base/wrfont.c
Line
Count
Source (jump to first uncovered line)
1
/* Copyright (C) 2001-2024 Artifex Software, Inc.
2
   All Rights Reserved.
3
4
   This software is provided AS-IS with no warranty, either express or
5
   implied.
6
7
   This software is distributed under license and may not be copied,
8
   modified or distributed except as expressly authorized under the terms
9
   of the license contained in the file LICENSE in this distribution.
10
11
   Refer to licensing information at http://www.artifex.com or contact
12
   Artifex Software, Inc.,  39 Mesa Street, Suite 108A, San Francisco,
13
   CA 94129, USA, for further information.
14
*/
15
16
/*
17
Support functions to serialize fonts as PostScript code that can
18
then be passed to FreeType via the FAPI FreeType bridge.
19
Started by Graham Asher, 9th August 2002.
20
*/
21
22
#include "wrfont.h"
23
#include "stdio_.h"
24
#include "assert_.h"
25
#include "stdint_.h"
26
27
82.6k
#define EEXEC_KEY 55665
28
20.5M
#define EEXEC_FACTOR 52845
29
20.5M
#define EEXEC_OFFSET 22719
30
31
void
32
WRF_init(WRF_output * a_output, unsigned char *a_buffer, long a_buffer_size)
33
82.6k
{
34
82.6k
    a_output->m_pos = a_buffer;
35
82.6k
    a_output->m_limit = a_buffer_size;
36
82.6k
    a_output->m_count = 0;
37
82.6k
    a_output->m_encrypt = false;
38
82.6k
    a_output->m_key = EEXEC_KEY;
39
82.6k
}
40
41
void
42
WRF_wbyte(const gs_memory_t *memory, WRF_output * a_output, unsigned char a_byte)
43
58.2M
{
44
58.2M
    if (a_output->m_count < a_output->m_limit && a_output->m_pos != NULL) {
45
30.0M
        if (a_output->m_encrypt) {
46
20.5M
            a_byte ^= (a_output->m_key >> 8);
47
20.5M
            a_output->m_key =
48
20.5M
                (unsigned short)((((uint64_t)a_output->m_key + a_byte) * EEXEC_FACTOR +
49
20.5M
                                 EEXEC_OFFSET) & 0xffff);
50
20.5M
        }
51
30.0M
        *a_output->m_pos++ = a_byte;
52
30.0M
    }
53
58.2M
    a_output->m_count++;
54
58.2M
}
55
56
void
57
WRF_wtext(const gs_memory_t *memory, WRF_output * a_output, const unsigned char *a_string, long a_length)
58
662k
{
59
4.20M
    while (a_length > 0) {
60
3.54M
        WRF_wbyte(memory, a_output, *a_string++);
61
3.54M
        a_length--;
62
3.54M
    }
63
662k
}
64
65
void
66
WRF_wstring(const gs_memory_t *memory, WRF_output * a_output, const char *a_string)
67
9.37M
{
68
58.9M
    while (*a_string)
69
49.5M
        WRF_wbyte(memory, a_output, *a_string++);
70
9.37M
}
71
72
void
73
WRF_wfloat(const gs_memory_t *memory, WRF_output * a_output, double a_float)
74
569k
{
75
569k
    char buffer[32];
76
569k
    int l;
77
78
569k
    l = gs_snprintf(buffer, sizeof (buffer), "%f", a_float);
79
569k
    if (l > sizeof (buffer)) {
80
0
        emprintf(memory, "Warning: Font real number value truncated\n");
81
0
    }
82
569k
    WRF_wstring(memory, a_output, buffer);
83
569k
}
84
85
void
86
WRF_wint(const gs_memory_t *memory, WRF_output * a_output, long a_int)
87
4.29M
{
88
4.29M
    char buffer[32];
89
4.29M
    int l;
90
91
4.29M
    l = gs_snprintf(buffer, sizeof(buffer), "%ld", a_int);
92
4.29M
    if (l > sizeof (buffer)) {
93
0
        emprintf(memory, "Warning: Font integer number value truncated\n");
94
0
    }
95
4.29M
    WRF_wstring(memory, a_output, buffer);
96
4.29M
}