/src/cups/cups/string-private.h
Line | Count | Source (jump to first uncovered line) |
1 | | // |
2 | | // Private string definitions for CUPS. |
3 | | // |
4 | | // Copyright © 2020-2024 by OpenPrinting. |
5 | | // Copyright © 2007-2018 by Apple Inc. |
6 | | // Copyright © 1997-2006 by Easy Software Products. |
7 | | // |
8 | | // Licensed under Apache License v2.0. See the file "LICENSE" for more |
9 | | // information. |
10 | | // |
11 | | |
12 | | #ifndef _CUPS_STRING_PRIVATE_H_ |
13 | | # define _CUPS_STRING_PRIVATE_H_ |
14 | | # include <config.h> |
15 | | # include <stdio.h> |
16 | | # include <stdlib.h> |
17 | | # include <stdarg.h> |
18 | | # include <string.h> |
19 | | # include <ctype.h> |
20 | | # include <errno.h> |
21 | | # include <locale.h> |
22 | | # include <time.h> |
23 | | # include <cups/base.h> |
24 | | # if defined(_WIN32) && !defined(__CUPS_SSIZE_T_DEFINED) |
25 | | # define __CUPS_SSIZE_T_DEFINED |
26 | | # include <stddef.h> |
27 | | // Windows does not support the ssize_t type, so map it to __int64... |
28 | | typedef __int64 ssize_t; // @private@ |
29 | | # endif // _WIN32 && !__CUPS_SSIZE_T_DEFINED |
30 | | # ifdef __cplusplus |
31 | | extern "C" { |
32 | | # endif // __cplusplus |
33 | | |
34 | | |
35 | | // |
36 | | // Structures... |
37 | | // |
38 | | |
39 | | # define _CUPS_STR_GUARD 0x12344321 |
40 | | |
41 | | typedef struct _cups_sp_item_s // String Pool Item |
42 | | { |
43 | | # ifdef DEBUG_GUARDS |
44 | | unsigned int guard; // Guard word |
45 | | # endif // DEBUG_GUARDS |
46 | | unsigned int ref_count; // Reference count |
47 | | char str[1]; // String |
48 | | } _cups_sp_item_t; |
49 | | |
50 | | |
51 | | // |
52 | | // Replacements for the ctype macros that are not affected by locale, since we |
53 | | // really only care about testing for ASCII characters when parsing files, etc. |
54 | | // |
55 | | // The _CUPS_INLINE definition controls whether we get an inline function body, |
56 | | // and external function body, or an external definition. |
57 | | // |
58 | | |
59 | | # if defined(__GNUC__) || __STDC_VERSION__ >= 199901L |
60 | | # define _CUPS_INLINE static inline |
61 | | # elif defined(_MSC_VER) |
62 | | # define _CUPS_INLINE static __inline |
63 | | # elif defined(_CUPS_STRING_C_) |
64 | | # define _CUPS_INLINE |
65 | | # endif // __GNUC__ || __STDC_VERSION__ |
66 | | |
67 | | # ifdef _CUPS_INLINE |
68 | | _CUPS_INLINE int // O - 1 on match, 0 otherwise |
69 | | _cups_isalnum(int ch) // I - Character to test |
70 | 147k | { |
71 | 147k | return ((ch >= '0' && ch <= '9') || |
72 | 147k | (ch >= 'A' && ch <= 'Z') || |
73 | 147k | (ch >= 'a' && ch <= 'z')); |
74 | 147k | } Unexecuted instantiation: fuzz_ppd_gen_1.c:_cups_isalnum Unexecuted instantiation: ppd.c:_cups_isalnum Unexecuted instantiation: ppd-attr.c:_cups_isalnum Unexecuted instantiation: ppd-cache.c:_cups_isalnum Unexecuted instantiation: ppd-conflicts.c:_cups_isalnum Unexecuted instantiation: ppd-custom.c:_cups_isalnum Unexecuted instantiation: ppd-mark.c:_cups_isalnum Unexecuted instantiation: ppd-page.c:_cups_isalnum Unexecuted instantiation: array.c:_cups_isalnum Unexecuted instantiation: encode.c:_cups_isalnum Unexecuted instantiation: file.c:_cups_isalnum Unexecuted instantiation: getputfile.c:_cups_isalnum Unexecuted instantiation: globals.c:_cups_isalnum Unexecuted instantiation: hash.c:_cups_isalnum Unexecuted instantiation: http.c:_cups_isalnum Unexecuted instantiation: http-addr.c:_cups_isalnum Unexecuted instantiation: http-addrlist.c:_cups_isalnum Unexecuted instantiation: http-support.c:_cups_isalnum Unexecuted instantiation: ipp.c:_cups_isalnum Unexecuted instantiation: ipp-support.c:_cups_isalnum Line | Count | Source | 70 | 147k | { | 71 | 147k | return ((ch >= '0' && ch <= '9') || | 72 | 147k | (ch >= 'A' && ch <= 'Z') || | 73 | 147k | (ch >= 'a' && ch <= 'z')); | 74 | 147k | } |
Unexecuted instantiation: md5.c:_cups_isalnum Unexecuted instantiation: options.c:_cups_isalnum Unexecuted instantiation: pwg-media.c:_cups_isalnum Unexecuted instantiation: request.c:_cups_isalnum Unexecuted instantiation: string.c:_cups_isalnum Unexecuted instantiation: tempfile.c:_cups_isalnum Unexecuted instantiation: thread.c:_cups_isalnum Unexecuted instantiation: tls.c:_cups_isalnum Unexecuted instantiation: transcode.c:_cups_isalnum Unexecuted instantiation: usersys.c:_cups_isalnum Unexecuted instantiation: auth.c:_cups_isalnum Unexecuted instantiation: dir.c:_cups_isalnum Unexecuted instantiation: dnssd.c:_cups_isalnum |
75 | | |
76 | | _CUPS_INLINE int // O - 1 on match, 0 otherwise |
77 | | _cups_isalpha(int ch) // I - Character to test |
78 | 29.5k | { |
79 | 29.5k | return ((ch >= 'A' && ch <= 'Z') || |
80 | 29.5k | (ch >= 'a' && ch <= 'z')); |
81 | 29.5k | } Unexecuted instantiation: fuzz_ppd_gen_1.c:_cups_isalpha Line | Count | Source | 78 | 29.5k | { | 79 | 29.5k | return ((ch >= 'A' && ch <= 'Z') || | 80 | 29.5k | (ch >= 'a' && ch <= 'z')); | 81 | 29.5k | } |
Unexecuted instantiation: ppd-attr.c:_cups_isalpha Unexecuted instantiation: ppd-cache.c:_cups_isalpha Unexecuted instantiation: ppd-conflicts.c:_cups_isalpha Unexecuted instantiation: ppd-custom.c:_cups_isalpha Unexecuted instantiation: ppd-mark.c:_cups_isalpha Unexecuted instantiation: ppd-page.c:_cups_isalpha Unexecuted instantiation: array.c:_cups_isalpha Unexecuted instantiation: encode.c:_cups_isalpha Unexecuted instantiation: file.c:_cups_isalpha Unexecuted instantiation: getputfile.c:_cups_isalpha Unexecuted instantiation: globals.c:_cups_isalpha Unexecuted instantiation: hash.c:_cups_isalpha Unexecuted instantiation: http.c:_cups_isalpha Unexecuted instantiation: http-addr.c:_cups_isalpha Unexecuted instantiation: http-addrlist.c:_cups_isalpha Unexecuted instantiation: http-support.c:_cups_isalpha Unexecuted instantiation: ipp.c:_cups_isalpha Unexecuted instantiation: ipp-support.c:_cups_isalpha Unexecuted instantiation: language.c:_cups_isalpha Unexecuted instantiation: md5.c:_cups_isalpha Unexecuted instantiation: options.c:_cups_isalpha Unexecuted instantiation: pwg-media.c:_cups_isalpha Unexecuted instantiation: request.c:_cups_isalpha Unexecuted instantiation: string.c:_cups_isalpha Unexecuted instantiation: tempfile.c:_cups_isalpha Unexecuted instantiation: thread.c:_cups_isalpha Unexecuted instantiation: tls.c:_cups_isalpha Unexecuted instantiation: transcode.c:_cups_isalpha Unexecuted instantiation: usersys.c:_cups_isalpha Unexecuted instantiation: auth.c:_cups_isalpha Unexecuted instantiation: dir.c:_cups_isalpha Unexecuted instantiation: dnssd.c:_cups_isalpha |
82 | | |
83 | | _CUPS_INLINE int // O - 1 on match, 0 otherwise |
84 | | _cups_islower(int ch) // I - Character to test |
85 | 0 | { |
86 | 0 | return (ch >= 'a' && ch <= 'z'); |
87 | 0 | } Unexecuted instantiation: fuzz_ppd_gen_1.c:_cups_islower Unexecuted instantiation: ppd.c:_cups_islower Unexecuted instantiation: ppd-attr.c:_cups_islower Unexecuted instantiation: ppd-cache.c:_cups_islower Unexecuted instantiation: ppd-conflicts.c:_cups_islower Unexecuted instantiation: ppd-custom.c:_cups_islower Unexecuted instantiation: ppd-mark.c:_cups_islower Unexecuted instantiation: ppd-page.c:_cups_islower Unexecuted instantiation: array.c:_cups_islower Unexecuted instantiation: encode.c:_cups_islower Unexecuted instantiation: file.c:_cups_islower Unexecuted instantiation: getputfile.c:_cups_islower Unexecuted instantiation: globals.c:_cups_islower Unexecuted instantiation: hash.c:_cups_islower Unexecuted instantiation: http.c:_cups_islower Unexecuted instantiation: http-addr.c:_cups_islower Unexecuted instantiation: http-addrlist.c:_cups_islower Unexecuted instantiation: http-support.c:_cups_islower Unexecuted instantiation: ipp.c:_cups_islower Unexecuted instantiation: ipp-support.c:_cups_islower Unexecuted instantiation: language.c:_cups_islower Unexecuted instantiation: md5.c:_cups_islower Unexecuted instantiation: options.c:_cups_islower Unexecuted instantiation: pwg-media.c:_cups_islower Unexecuted instantiation: request.c:_cups_islower Unexecuted instantiation: string.c:_cups_islower Unexecuted instantiation: tempfile.c:_cups_islower Unexecuted instantiation: thread.c:_cups_islower Unexecuted instantiation: tls.c:_cups_islower Unexecuted instantiation: transcode.c:_cups_islower Unexecuted instantiation: usersys.c:_cups_islower Unexecuted instantiation: auth.c:_cups_islower Unexecuted instantiation: dir.c:_cups_islower Unexecuted instantiation: dnssd.c:_cups_islower |
88 | | |
89 | | _CUPS_INLINE int // O - 1 on match, 0 otherwise |
90 | | _cups_isspace(int ch) // I - Character to test |
91 | 16.7M | { |
92 | 16.7M | return (ch == ' ' || ch == '\f' || ch == '\n' || ch == '\r' || ch == '\t' || |
93 | 16.7M | ch == '\v'); |
94 | 16.7M | } Unexecuted instantiation: fuzz_ppd_gen_1.c:_cups_isspace Line | Count | Source | 91 | 15.8M | { | 92 | 15.8M | return (ch == ' ' || ch == '\f' || ch == '\n' || ch == '\r' || ch == '\t' || | 93 | 15.8M | ch == '\v'); | 94 | 15.8M | } |
Unexecuted instantiation: ppd-attr.c:_cups_isspace Unexecuted instantiation: ppd-cache.c:_cups_isspace ppd-conflicts.c:_cups_isspace Line | Count | Source | 91 | 657k | { | 92 | 657k | return (ch == ' ' || ch == '\f' || ch == '\n' || ch == '\r' || ch == '\t' || | 93 | 657k | ch == '\v'); | 94 | 657k | } |
Unexecuted instantiation: ppd-custom.c:_cups_isspace Unexecuted instantiation: ppd-mark.c:_cups_isspace Unexecuted instantiation: ppd-page.c:_cups_isspace Unexecuted instantiation: array.c:_cups_isspace Unexecuted instantiation: encode.c:_cups_isspace Unexecuted instantiation: file.c:_cups_isspace Unexecuted instantiation: getputfile.c:_cups_isspace Unexecuted instantiation: globals.c:_cups_isspace Unexecuted instantiation: hash.c:_cups_isspace Unexecuted instantiation: http.c:_cups_isspace Unexecuted instantiation: http-addr.c:_cups_isspace Unexecuted instantiation: http-addrlist.c:_cups_isspace Unexecuted instantiation: http-support.c:_cups_isspace Unexecuted instantiation: ipp.c:_cups_isspace Unexecuted instantiation: ipp-support.c:_cups_isspace Unexecuted instantiation: language.c:_cups_isspace Unexecuted instantiation: md5.c:_cups_isspace Line | Count | Source | 91 | 130k | { | 92 | 130k | return (ch == ' ' || ch == '\f' || ch == '\n' || ch == '\r' || ch == '\t' || | 93 | 130k | ch == '\v'); | 94 | 130k | } |
Unexecuted instantiation: pwg-media.c:_cups_isspace Unexecuted instantiation: request.c:_cups_isspace Line | Count | Source | 91 | 53.3k | { | 92 | 53.3k | return (ch == ' ' || ch == '\f' || ch == '\n' || ch == '\r' || ch == '\t' || | 93 | 53.3k | ch == '\v'); | 94 | 53.3k | } |
Unexecuted instantiation: tempfile.c:_cups_isspace Unexecuted instantiation: thread.c:_cups_isspace Unexecuted instantiation: tls.c:_cups_isspace Unexecuted instantiation: transcode.c:_cups_isspace Unexecuted instantiation: usersys.c:_cups_isspace Unexecuted instantiation: auth.c:_cups_isspace Unexecuted instantiation: dir.c:_cups_isspace Unexecuted instantiation: dnssd.c:_cups_isspace |
95 | | |
96 | | _CUPS_INLINE int // O - 1 on match, 0 otherwise |
97 | | _cups_isupper(int ch) // I - Character to test |
98 | 1.24G | { |
99 | 1.24G | return (ch >= 'A' && ch <= 'Z'); |
100 | 1.24G | } Unexecuted instantiation: fuzz_ppd_gen_1.c:_cups_isupper Unexecuted instantiation: ppd.c:_cups_isupper Unexecuted instantiation: ppd-attr.c:_cups_isupper Unexecuted instantiation: ppd-cache.c:_cups_isupper Unexecuted instantiation: ppd-conflicts.c:_cups_isupper Unexecuted instantiation: ppd-custom.c:_cups_isupper Unexecuted instantiation: ppd-mark.c:_cups_isupper Unexecuted instantiation: ppd-page.c:_cups_isupper Unexecuted instantiation: array.c:_cups_isupper Unexecuted instantiation: encode.c:_cups_isupper Unexecuted instantiation: file.c:_cups_isupper Unexecuted instantiation: getputfile.c:_cups_isupper Unexecuted instantiation: globals.c:_cups_isupper Unexecuted instantiation: hash.c:_cups_isupper Unexecuted instantiation: http.c:_cups_isupper Unexecuted instantiation: http-addr.c:_cups_isupper Unexecuted instantiation: http-addrlist.c:_cups_isupper Unexecuted instantiation: http-support.c:_cups_isupper Unexecuted instantiation: ipp.c:_cups_isupper Unexecuted instantiation: ipp-support.c:_cups_isupper Unexecuted instantiation: language.c:_cups_isupper Unexecuted instantiation: md5.c:_cups_isupper Unexecuted instantiation: options.c:_cups_isupper Unexecuted instantiation: pwg-media.c:_cups_isupper Unexecuted instantiation: request.c:_cups_isupper Line | Count | Source | 98 | 1.24G | { | 99 | 1.24G | return (ch >= 'A' && ch <= 'Z'); | 100 | 1.24G | } |
Unexecuted instantiation: tempfile.c:_cups_isupper Unexecuted instantiation: thread.c:_cups_isupper Unexecuted instantiation: tls.c:_cups_isupper Unexecuted instantiation: transcode.c:_cups_isupper Unexecuted instantiation: usersys.c:_cups_isupper Unexecuted instantiation: auth.c:_cups_isupper Unexecuted instantiation: dir.c:_cups_isupper Unexecuted instantiation: dnssd.c:_cups_isupper |
101 | | |
102 | | _CUPS_INLINE int // O - Converted character |
103 | | _cups_tolower(int ch) // I - Character to convert |
104 | 1.24G | { |
105 | 1.24G | return (_cups_isupper(ch) ? ch - 'A' + 'a' : ch); |
106 | 1.24G | } Unexecuted instantiation: fuzz_ppd_gen_1.c:_cups_tolower Unexecuted instantiation: ppd.c:_cups_tolower Unexecuted instantiation: ppd-attr.c:_cups_tolower Unexecuted instantiation: ppd-cache.c:_cups_tolower Unexecuted instantiation: ppd-conflicts.c:_cups_tolower Unexecuted instantiation: ppd-custom.c:_cups_tolower Unexecuted instantiation: ppd-mark.c:_cups_tolower Unexecuted instantiation: ppd-page.c:_cups_tolower Unexecuted instantiation: array.c:_cups_tolower Unexecuted instantiation: encode.c:_cups_tolower Unexecuted instantiation: file.c:_cups_tolower Unexecuted instantiation: getputfile.c:_cups_tolower Unexecuted instantiation: globals.c:_cups_tolower Unexecuted instantiation: hash.c:_cups_tolower Unexecuted instantiation: http.c:_cups_tolower Unexecuted instantiation: http-addr.c:_cups_tolower Unexecuted instantiation: http-addrlist.c:_cups_tolower Unexecuted instantiation: http-support.c:_cups_tolower Unexecuted instantiation: ipp.c:_cups_tolower Unexecuted instantiation: ipp-support.c:_cups_tolower Unexecuted instantiation: language.c:_cups_tolower Unexecuted instantiation: md5.c:_cups_tolower Unexecuted instantiation: options.c:_cups_tolower Unexecuted instantiation: pwg-media.c:_cups_tolower Unexecuted instantiation: request.c:_cups_tolower Line | Count | Source | 104 | 1.24G | { | 105 | 1.24G | return (_cups_isupper(ch) ? ch - 'A' + 'a' : ch); | 106 | 1.24G | } |
Unexecuted instantiation: tempfile.c:_cups_tolower Unexecuted instantiation: thread.c:_cups_tolower Unexecuted instantiation: tls.c:_cups_tolower Unexecuted instantiation: transcode.c:_cups_tolower Unexecuted instantiation: usersys.c:_cups_tolower Unexecuted instantiation: auth.c:_cups_tolower Unexecuted instantiation: dir.c:_cups_tolower Unexecuted instantiation: dnssd.c:_cups_tolower |
107 | | |
108 | | _CUPS_INLINE int // O - Converted character |
109 | | _cups_toupper(int ch) // I - Character to convert |
110 | 0 | { |
111 | 0 | return (_cups_islower(ch) ? ch - 'a' + 'A' : ch); |
112 | 0 | } Unexecuted instantiation: fuzz_ppd_gen_1.c:_cups_toupper Unexecuted instantiation: ppd.c:_cups_toupper Unexecuted instantiation: ppd-attr.c:_cups_toupper Unexecuted instantiation: ppd-cache.c:_cups_toupper Unexecuted instantiation: ppd-conflicts.c:_cups_toupper Unexecuted instantiation: ppd-custom.c:_cups_toupper Unexecuted instantiation: ppd-mark.c:_cups_toupper Unexecuted instantiation: ppd-page.c:_cups_toupper Unexecuted instantiation: array.c:_cups_toupper Unexecuted instantiation: encode.c:_cups_toupper Unexecuted instantiation: file.c:_cups_toupper Unexecuted instantiation: getputfile.c:_cups_toupper Unexecuted instantiation: globals.c:_cups_toupper Unexecuted instantiation: hash.c:_cups_toupper Unexecuted instantiation: http.c:_cups_toupper Unexecuted instantiation: http-addr.c:_cups_toupper Unexecuted instantiation: http-addrlist.c:_cups_toupper Unexecuted instantiation: http-support.c:_cups_toupper Unexecuted instantiation: ipp.c:_cups_toupper Unexecuted instantiation: ipp-support.c:_cups_toupper Unexecuted instantiation: language.c:_cups_toupper Unexecuted instantiation: md5.c:_cups_toupper Unexecuted instantiation: options.c:_cups_toupper Unexecuted instantiation: pwg-media.c:_cups_toupper Unexecuted instantiation: request.c:_cups_toupper Unexecuted instantiation: string.c:_cups_toupper Unexecuted instantiation: tempfile.c:_cups_toupper Unexecuted instantiation: thread.c:_cups_toupper Unexecuted instantiation: tls.c:_cups_toupper Unexecuted instantiation: transcode.c:_cups_toupper Unexecuted instantiation: usersys.c:_cups_toupper Unexecuted instantiation: auth.c:_cups_toupper Unexecuted instantiation: dir.c:_cups_toupper Unexecuted instantiation: dnssd.c:_cups_toupper |
113 | | # else |
114 | | extern int _cups_isalnum(int ch); |
115 | | extern int _cups_isalpha(int ch); |
116 | | extern int _cups_islower(int ch); |
117 | | extern int _cups_isspace(int ch); |
118 | | extern int _cups_isupper(int ch); |
119 | | extern int _cups_tolower(int ch); |
120 | | extern int _cups_toupper(int ch); |
121 | | # endif // _CUPS_INLINE |
122 | | |
123 | | |
124 | | // |
125 | | // Functions... |
126 | | // |
127 | | |
128 | | extern void _cups_strcpy(char *dst, const char *src) _CUPS_PRIVATE; |
129 | | extern int _cups_strcasecmp(const char *, const char *) _CUPS_PRIVATE; |
130 | | extern int _cups_strncasecmp(const char *, const char *, size_t n) _CUPS_PRIVATE; |
131 | | |
132 | | extern int _cupsArrayStrcasecmp(const char *s, const char *t, void *data) _CUPS_PRIVATE; |
133 | | extern int _cupsArrayStrcmp(const char *s1, const char *s2, void *data) _CUPS_PRIVATE; |
134 | | extern char *_cupsArrayStrdup(const char *element, void *data) _CUPS_PRIVATE; |
135 | | extern void _cupsArrayFree(void *element, void *data) _CUPS_PRIVATE; |
136 | | |
137 | | extern char *_cupsStrAlloc(const char *s) _CUPS_PRIVATE; |
138 | | extern char *_cupsStrDate(char *buf, size_t bufsize, time_t timeval) _CUPS_PRIVATE; |
139 | | extern void _cupsStrFlush(void) _CUPS_PRIVATE; |
140 | | extern char *_cupsStrFormatd(char *buf, char *bufend, double number, struct lconv *loc) _CUPS_PRIVATE; |
141 | | extern void _cupsStrFree(const char *s) _CUPS_PRIVATE; |
142 | | extern char *_cupsStrRetain(const char *s) _CUPS_PRIVATE; |
143 | | extern double _cupsStrScand(const char *buf, char **bufptr, struct lconv *loc) _CUPS_PRIVATE; |
144 | | extern size_t _cupsStrStatistics(size_t *alloc_bytes, size_t *total_bytes) _CUPS_PRIVATE; |
145 | | |
146 | | |
147 | | # ifdef __cplusplus |
148 | | } |
149 | | # endif // __cplusplus |
150 | | #endif // !_CUPS_STRING_H_ |