Coverage Report

Created: 2025-12-11 06:06

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/c-blosc/internal-complibs/zstd-1.5.6/common/error_private.h
Line
Count
Source
1
/*
2
 * Copyright (c) Meta Platforms, Inc. and affiliates.
3
 * All rights reserved.
4
 *
5
 * This source code is licensed under both the BSD-style license (found in the
6
 * LICENSE file in the root directory of this source tree) and the GPLv2 (found
7
 * in the COPYING file in the root directory of this source tree).
8
 * You may select, at your option, one of the above-listed licenses.
9
 */
10
11
/* Note : this module is expected to remain private, do not expose it */
12
13
#ifndef ERROR_H_MODULE
14
#define ERROR_H_MODULE
15
16
#if defined (__cplusplus)
17
extern "C" {
18
#endif
19
20
21
/* ****************************************
22
*  Dependencies
23
******************************************/
24
#include "../zstd_errors.h"  /* enum list */
25
#include "compiler.h"
26
#include "debug.h"
27
#include "zstd_deps.h"       /* size_t */
28
29
30
/* ****************************************
31
*  Compiler-specific
32
******************************************/
33
#if defined(__GNUC__)
34
#  define ERR_STATIC static __attribute__((unused))
35
#elif defined (__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */)
36
#  define ERR_STATIC static inline
37
#elif defined(_MSC_VER)
38
#  define ERR_STATIC static __inline
39
#else
40
#  define ERR_STATIC static  /* this version may generate warnings for unused static functions; disable the relevant warning */
41
#endif
42
43
44
/*-****************************************
45
*  Customization (error_public.h)
46
******************************************/
47
typedef ZSTD_ErrorCode ERR_enum;
48
25.0M
#define PREFIX(name) ZSTD_error_##name
49
50
51
/*-****************************************
52
*  Error codes handling
53
******************************************/
54
#undef ERROR   /* already defined on Visual Studio */
55
25.0M
#define ERROR(name) ZSTD_ERROR(name)
56
25.0M
#define ZSTD_ERROR(name) ((size_t)-PREFIX(name))
57
58
24.7M
ERR_STATIC unsigned ERR_isError(size_t code) { return (code > ERROR(maxCode)); }
zstd_common.c:ERR_isError
Line
Count
Source
58
127k
ERR_STATIC unsigned ERR_isError(size_t code) { return (code > ERROR(maxCode)); }
zstd_compress.c:ERR_isError
Line
Count
Source
58
2.94M
ERR_STATIC unsigned ERR_isError(size_t code) { return (code > ERROR(maxCode)); }
zstd_compress_literals.c:ERR_isError
Line
Count
Source
58
45.0k
ERR_STATIC unsigned ERR_isError(size_t code) { return (code > ERROR(maxCode)); }
zstd_compress_sequences.c:ERR_isError
Line
Count
Source
58
831k
ERR_STATIC unsigned ERR_isError(size_t code) { return (code > ERROR(maxCode)); }
Unexecuted instantiation: zstd_compress_superblock.c:ERR_isError
Unexecuted instantiation: zstd_double_fast.c:ERR_isError
Unexecuted instantiation: zstd_fast.c:ERR_isError
Unexecuted instantiation: zstd_lazy.c:ERR_isError
Unexecuted instantiation: zstd_ldm.c:ERR_isError
Unexecuted instantiation: zstd_opt.c:ERR_isError
zstd_decompress.c:ERR_isError
Line
Count
Source
58
12.0M
ERR_STATIC unsigned ERR_isError(size_t code) { return (code > ERROR(maxCode)); }
zstd_decompress_block.c:ERR_isError
Line
Count
Source
58
6.53M
ERR_STATIC unsigned ERR_isError(size_t code) { return (code > ERROR(maxCode)); }
entropy_common.c:ERR_isError
Line
Count
Source
58
41.3k
ERR_STATIC unsigned ERR_isError(size_t code) { return (code > ERROR(maxCode)); }
Unexecuted instantiation: error_private.c:ERR_isError
fse_decompress.c:ERR_isError
Line
Count
Source
58
121k
ERR_STATIC unsigned ERR_isError(size_t code) { return (code > ERROR(maxCode)); }
fse_compress.c:ERR_isError
Line
Count
Source
58
135k
ERR_STATIC unsigned ERR_isError(size_t code) { return (code > ERROR(maxCode)); }
Unexecuted instantiation: hist.c:ERR_isError
huf_compress.c:ERR_isError
Line
Count
Source
58
1.61M
ERR_STATIC unsigned ERR_isError(size_t code) { return (code > ERROR(maxCode)); }
huf_decompress.c:ERR_isError
Line
Count
Source
58
291k
ERR_STATIC unsigned ERR_isError(size_t code) { return (code > ERROR(maxCode)); }
Unexecuted instantiation: zstd_ddict.c:ERR_isError
59
60
20.7k
ERR_STATIC ERR_enum ERR_getErrorCode(size_t code) { if (!ERR_isError(code)) return (ERR_enum)0; return (ERR_enum) (0-code); }
zstd_common.c:ERR_getErrorCode
Line
Count
Source
60
20.7k
ERR_STATIC ERR_enum ERR_getErrorCode(size_t code) { if (!ERR_isError(code)) return (ERR_enum)0; return (ERR_enum) (0-code); }
Unexecuted instantiation: zstd_compress.c:ERR_getErrorCode
Unexecuted instantiation: zstd_compress_literals.c:ERR_getErrorCode
Unexecuted instantiation: zstd_compress_sequences.c:ERR_getErrorCode
Unexecuted instantiation: zstd_compress_superblock.c:ERR_getErrorCode
Unexecuted instantiation: zstd_double_fast.c:ERR_getErrorCode
Unexecuted instantiation: zstd_fast.c:ERR_getErrorCode
Unexecuted instantiation: zstd_lazy.c:ERR_getErrorCode
Unexecuted instantiation: zstd_ldm.c:ERR_getErrorCode
Unexecuted instantiation: zstd_opt.c:ERR_getErrorCode
Unexecuted instantiation: zstd_decompress.c:ERR_getErrorCode
Unexecuted instantiation: zstd_decompress_block.c:ERR_getErrorCode
Unexecuted instantiation: entropy_common.c:ERR_getErrorCode
Unexecuted instantiation: error_private.c:ERR_getErrorCode
Unexecuted instantiation: fse_decompress.c:ERR_getErrorCode
Unexecuted instantiation: fse_compress.c:ERR_getErrorCode
Unexecuted instantiation: hist.c:ERR_getErrorCode
Unexecuted instantiation: huf_compress.c:ERR_getErrorCode
Unexecuted instantiation: huf_decompress.c:ERR_getErrorCode
Unexecuted instantiation: zstd_ddict.c:ERR_getErrorCode
61
62
/* check and forward error code */
63
#define CHECK_V_F(e, f)     \
64
1.24M
    size_t const e = f;     \
65
1.24M
    do {                    \
66
1.24M
        if (ERR_isError(e)) \
67
1.24M
            return e;       \
68
1.24M
    } while (0)
69
433k
#define CHECK_F(f)   do { CHECK_V_F(_var_err__, f); } while (0)
70
71
72
/*-****************************************
73
*  Error Strings
74
******************************************/
75
76
const char* ERR_getErrorString(ERR_enum code);   /* error_private.c */
77
78
ERR_STATIC const char* ERR_getErrorName(size_t code)
79
0
{
80
0
    return ERR_getErrorString(ERR_getErrorCode(code));
81
0
}
Unexecuted instantiation: zstd_common.c:ERR_getErrorName
Unexecuted instantiation: zstd_compress.c:ERR_getErrorName
Unexecuted instantiation: zstd_compress_literals.c:ERR_getErrorName
Unexecuted instantiation: zstd_compress_sequences.c:ERR_getErrorName
Unexecuted instantiation: zstd_compress_superblock.c:ERR_getErrorName
Unexecuted instantiation: zstd_double_fast.c:ERR_getErrorName
Unexecuted instantiation: zstd_fast.c:ERR_getErrorName
Unexecuted instantiation: zstd_lazy.c:ERR_getErrorName
Unexecuted instantiation: zstd_ldm.c:ERR_getErrorName
Unexecuted instantiation: zstd_opt.c:ERR_getErrorName
Unexecuted instantiation: zstd_decompress.c:ERR_getErrorName
Unexecuted instantiation: zstd_decompress_block.c:ERR_getErrorName
Unexecuted instantiation: entropy_common.c:ERR_getErrorName
Unexecuted instantiation: error_private.c:ERR_getErrorName
Unexecuted instantiation: fse_decompress.c:ERR_getErrorName
Unexecuted instantiation: fse_compress.c:ERR_getErrorName
Unexecuted instantiation: hist.c:ERR_getErrorName
Unexecuted instantiation: huf_compress.c:ERR_getErrorName
Unexecuted instantiation: huf_decompress.c:ERR_getErrorName
Unexecuted instantiation: zstd_ddict.c:ERR_getErrorName
82
83
/**
84
 * Ignore: this is an internal helper.
85
 *
86
 * This is a helper function to help force C99-correctness during compilation.
87
 * Under strict compilation modes, variadic macro arguments can't be empty.
88
 * However, variadic function arguments can be. Using a function therefore lets
89
 * us statically check that at least one (string) argument was passed,
90
 * independent of the compilation flags.
91
 */
92
static INLINE_KEYWORD UNUSED_ATTR
93
0
void _force_has_format_string(const char *format, ...) {
94
0
  (void)format;
95
0
}
Unexecuted instantiation: zstd_common.c:_force_has_format_string
Unexecuted instantiation: zstd_compress.c:_force_has_format_string
Unexecuted instantiation: zstd_compress_literals.c:_force_has_format_string
Unexecuted instantiation: zstd_compress_sequences.c:_force_has_format_string
Unexecuted instantiation: zstd_compress_superblock.c:_force_has_format_string
Unexecuted instantiation: zstd_double_fast.c:_force_has_format_string
Unexecuted instantiation: zstd_fast.c:_force_has_format_string
Unexecuted instantiation: zstd_lazy.c:_force_has_format_string
Unexecuted instantiation: zstd_ldm.c:_force_has_format_string
Unexecuted instantiation: zstd_opt.c:_force_has_format_string
Unexecuted instantiation: zstd_decompress.c:_force_has_format_string
Unexecuted instantiation: zstd_decompress_block.c:_force_has_format_string
Unexecuted instantiation: entropy_common.c:_force_has_format_string
Unexecuted instantiation: error_private.c:_force_has_format_string
Unexecuted instantiation: fse_decompress.c:_force_has_format_string
Unexecuted instantiation: fse_compress.c:_force_has_format_string
Unexecuted instantiation: hist.c:_force_has_format_string
Unexecuted instantiation: huf_compress.c:_force_has_format_string
Unexecuted instantiation: huf_decompress.c:_force_has_format_string
Unexecuted instantiation: zstd_ddict.c:_force_has_format_string
96
97
/**
98
 * Ignore: this is an internal helper.
99
 *
100
 * We want to force this function invocation to be syntactically correct, but
101
 * we don't want to force runtime evaluation of its arguments.
102
 */
103
#define _FORCE_HAS_FORMAT_STRING(...)              \
104
101k
    do {                                           \
105
101k
        if (0) {                                   \
106
0
            _force_has_format_string(__VA_ARGS__); \
107
0
        }                                          \
108
101k
    } while (0)
109
110
#define ERR_QUOTE(str) #str
111
112
/**
113
 * Return the specified error if the condition evaluates to true.
114
 *
115
 * In debug modes, prints additional information.
116
 * In order to do that (particularly, printing the conditional that failed),
117
 * this can't just wrap RETURN_ERROR().
118
 */
119
#define RETURN_ERROR_IF(cond, err, ...)                                        \
120
28.3M
    do {                                                                       \
121
29.7M
        if (cond) {                                                            \
122
20.6k
            RAWLOG(3, "%s:%d: ERROR!: check %s failed, returning %s",          \
123
20.6k
                  __FILE__, __LINE__, ERR_QUOTE(cond), ERR_QUOTE(ERROR(err))); \
124
20.6k
            _FORCE_HAS_FORMAT_STRING(__VA_ARGS__);                             \
125
20.6k
            RAWLOG(3, ": " __VA_ARGS__);                                       \
126
20.6k
            RAWLOG(3, "\n");                                                   \
127
20.6k
            return ERROR(err);                                                 \
128
20.6k
        }                                                                      \
129
28.3M
    } while (0)
130
131
/**
132
 * Unconditionally return the specified error.
133
 *
134
 * In debug modes, prints additional information.
135
 */
136
#define RETURN_ERROR(err, ...)                                               \
137
144
    do {                                                                     \
138
144
        RAWLOG(3, "%s:%d: ERROR!: unconditional check failed, returning %s", \
139
144
              __FILE__, __LINE__, ERR_QUOTE(ERROR(err)));                    \
140
144
        _FORCE_HAS_FORMAT_STRING(__VA_ARGS__);                               \
141
144
        RAWLOG(3, ": " __VA_ARGS__);                                         \
142
144
        RAWLOG(3, "\n");                                                     \
143
144
        return ERROR(err);                                                   \
144
144
    } while(0)
145
146
/**
147
 * If the provided expression evaluates to an error code, returns that error code.
148
 *
149
 * In debug modes, prints additional information.
150
 */
151
#define FORWARD_IF_ERROR(err, ...)                                                 \
152
8.50M
    do {                                                                           \
153
8.50M
        size_t const err_code = (err);                                             \
154
8.50M
        if (ERR_isError(err_code)) {                                               \
155
80.2k
            RAWLOG(3, "%s:%d: ERROR!: forwarding error in %s: %s",                 \
156
80.2k
                  __FILE__, __LINE__, ERR_QUOTE(err), ERR_getErrorName(err_code)); \
157
80.2k
            _FORCE_HAS_FORMAT_STRING(__VA_ARGS__);                                 \
158
80.2k
            RAWLOG(3, ": " __VA_ARGS__);                                           \
159
80.2k
            RAWLOG(3, "\n");                                                       \
160
80.2k
            return err_code;                                                       \
161
80.2k
        }                                                                          \
162
8.50M
    } while(0)
163
164
#if defined (__cplusplus)
165
}
166
#endif
167
168
#endif /* ERROR_H_MODULE */