Coverage Report

Created: 2026-02-26 07:07

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/haproxy/include/import/slz.h
Line
Count
Source
1
/*
2
 * Copyright (C) 2013-2015 Willy Tarreau <w@1wt.eu>
3
 *
4
 * Permission is hereby granted, free of charge, to any person obtaining
5
 * a copy of this software and associated documentation files (the
6
 * "Software"), to deal in the Software without restriction, including
7
 * without limitation the rights to use, copy, modify, merge, publish,
8
 * distribute, sublicense, and/or sell copies of the Software, and to
9
 * permit persons to whom the Software is furnished to do so, subject to
10
 * the following conditions:
11
 *
12
 * The above copyright notice and this permission notice shall be
13
 * included in all copies or substantial portions of the Software.
14
 *
15
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
17
 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
19
 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
20
 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22
 * OTHER DEALINGS IN THE SOFTWARE.
23
 */
24
25
#ifndef _SLZ_H
26
#define _SLZ_H
27
28
#include <inttypes.h>
29
30
/* We have two macros UNALIGNED_LE_OK and UNALIGNED_FASTER. The latter indicates
31
 * that using unaligned data is faster than a simple shift. On x86 32-bit at
32
 * least it is not the case as the per-byte access is 30% faster. A core2-duo on
33
 * x86_64 is 7% faster to read one byte + shifting by 8 than to read one word,
34
 * but a core i5 is 7% faster doing the unaligned read, so we privilege more
35
 * recent implementations here.
36
 */
37
#if defined(__x86_64__)
38
#define UNALIGNED_LE_OK
39
#define UNALIGNED_FASTER
40
#define USE_64BIT_QUEUE
41
#define HAVE_FAST_MULT
42
#elif defined(__i386__) || defined(__i486__) || defined(__i586__) || defined(__i686__)
43
#define UNALIGNED_LE_OK
44
//#define UNALIGNED_FASTER
45
#elif defined(__ARMEL__) && defined(__ARM_ARCH_7A__)
46
#define UNALIGNED_LE_OK
47
#define UNALIGNED_FASTER
48
#elif defined(__ARM_ARCH_8A) || defined(__ARM_FEATURE_UNALIGNED)
49
#define UNALIGNED_LE_OK
50
#define UNALIGNED_FASTER
51
#define HAVE_FAST_MULT
52
#endif
53
54
/* Log2 of the size of the hash table used for the references table. */
55
0
#define HASH_BITS 13
56
57
enum slz_state {
58
  SLZ_ST_INIT,  /* stream initialized */
59
  SLZ_ST_EOB,   /* header or end of block already sent */
60
  SLZ_ST_FIXED, /* inside a fixed huffman sequence */
61
  SLZ_ST_LAST,  /* last block, BFINAL sent */
62
  SLZ_ST_DONE,  /* BFINAL+EOB sent BFINAL */
63
  SLZ_ST_END    /* end sent (BFINAL, EOB, CRC + len) */
64
};
65
66
enum {
67
  SLZ_FMT_GZIP,    /* RFC1952: gzip envelope and crc32 for CRC */
68
  SLZ_FMT_ZLIB,    /* RFC1950: zlib envelope and adler-32 for CRC */
69
  SLZ_FMT_DEFLATE, /* RFC1951: raw deflate, and no crc */
70
};
71
72
struct slz_stream {
73
#ifdef USE_64BIT_QUEUE
74
  uint64_t queue; /* last pending bits, LSB first */
75
#else
76
  uint32_t queue; /* last pending bits, LSB first */
77
#endif
78
  uint32_t qbits; /* number of bits in queue, < 8 on 32-bit, < 32 on 64-bit */
79
  unsigned char *outbuf; /* set by encode() */
80
  uint16_t state; /* one of slz_state */
81
  uint8_t level:1; /* 0 = no compression, 1 = compression */
82
  uint8_t format:2; /* SLZ_FMT_* */
83
  uint8_t unused1; /* unused for now */
84
  uint32_t crc32;
85
  uint32_t ilen;
86
};
87
88
/* Functions specific to rfc1951 (deflate) */
89
long slz_rfc1951_encode(struct slz_stream *strm, unsigned char *out, const unsigned char *in, long ilen, int more);
90
int slz_rfc1951_init(struct slz_stream *strm, int level);
91
int slz_rfc1951_flush(struct slz_stream *strm, unsigned char *buf);
92
int slz_rfc1951_finish(struct slz_stream *strm, unsigned char *buf);
93
94
/* Functions specific to rfc1952 (gzip) */
95
uint32_t slz_crc32_by1(uint32_t crc, const unsigned char *buf, int len);
96
uint32_t slz_crc32_by4(uint32_t crc, const unsigned char *buf, int len);
97
long slz_rfc1952_encode(struct slz_stream *strm, unsigned char *out, const unsigned char *in, long ilen, int more);
98
int slz_rfc1952_send_header(struct slz_stream *strm, unsigned char *buf);
99
int slz_rfc1952_init(struct slz_stream *strm, int level);
100
int slz_rfc1952_flush(struct slz_stream *strm, unsigned char *buf);
101
int slz_rfc1952_finish(struct slz_stream *strm, unsigned char *buf);
102
103
/* Functions specific to rfc1950 (zlib) */
104
uint32_t slz_adler32_by1(uint32_t crc, const unsigned char *buf, int len);
105
uint32_t slz_adler32_block(uint32_t crc, const unsigned char *buf, long len);
106
long slz_rfc1950_encode(struct slz_stream *strm, unsigned char *out, const unsigned char *in, long ilen, int more);
107
int slz_rfc1950_send_header(struct slz_stream *strm, unsigned char *buf);
108
int slz_rfc1950_init(struct slz_stream *strm, int level);
109
int slz_rfc1950_flush(struct slz_stream *strm, unsigned char *buf);
110
int slz_rfc1950_finish(struct slz_stream *strm, unsigned char *buf);
111
112
/* generic functions */
113
114
/* Initializes stream <strm>. It will configure the stream to use format
115
 * <format> for the data, which must be one of SLZ_FMT_*. The compression level
116
 * passed in <level> is set. This value can only be 0 (no compression) or 1
117
 * (compression) and other values will lead to unpredictable behaviour. The
118
 * function should always return 0.
119
 */
120
static inline int slz_init(struct slz_stream *strm, int level, int format)
121
0
{
122
0
  int ret;
123
0
124
0
  if (format == SLZ_FMT_GZIP)
125
0
    ret = slz_rfc1952_init(strm, level);
126
0
  else if (format == SLZ_FMT_ZLIB)
127
0
    ret = slz_rfc1950_init(strm, level);
128
0
  else { /* deflate for anything else */
129
0
    ret = slz_rfc1951_init(strm, level);
130
0
    strm->format = format;
131
0
  }
132
0
  return ret;
133
0
}
Unexecuted instantiation: cfgparse.c:slz_init
Unexecuted instantiation: cli.c:slz_init
Unexecuted instantiation: clock.c:slz_init
Unexecuted instantiation: connection.c:slz_init
Unexecuted instantiation: debug.c:slz_init
Unexecuted instantiation: dynbuf.c:slz_init
Unexecuted instantiation: errors.c:slz_init
Unexecuted instantiation: fd.c:slz_init
Unexecuted instantiation: frontend.c:slz_init
Unexecuted instantiation: http_ana.c:slz_init
Unexecuted instantiation: http_ext.c:slz_init
Unexecuted instantiation: http_htx.c:slz_init
Unexecuted instantiation: http_rules.c:slz_init
Unexecuted instantiation: htx.c:slz_init
Unexecuted instantiation: limits.c:slz_init
Unexecuted instantiation: listener.c:slz_init
Unexecuted instantiation: log.c:slz_init
Unexecuted instantiation: mailers.c:slz_init
Unexecuted instantiation: mworker.c:slz_init
Unexecuted instantiation: peers.c:slz_init
Unexecuted instantiation: pool.c:slz_init
Unexecuted instantiation: proto_rhttp.c:slz_init
Unexecuted instantiation: proto_sockpair.c:slz_init
Unexecuted instantiation: protocol.c:slz_init
Unexecuted instantiation: proxy.c:slz_init
Unexecuted instantiation: queue.c:slz_init
Unexecuted instantiation: regex.c:slz_init
Unexecuted instantiation: resolvers.c:slz_init
Unexecuted instantiation: ring.c:slz_init
Unexecuted instantiation: sample.c:slz_init
Unexecuted instantiation: server.c:slz_init
Unexecuted instantiation: session.c:slz_init
Unexecuted instantiation: signal.c:slz_init
Unexecuted instantiation: sink.c:slz_init
Unexecuted instantiation: sock.c:slz_init
Unexecuted instantiation: sock_inet.c:slz_init
Unexecuted instantiation: stats-html.c:slz_init
Unexecuted instantiation: stats.c:slz_init
Unexecuted instantiation: stconn.c:slz_init
Unexecuted instantiation: stick_table.c:slz_init
Unexecuted instantiation: stream.c:slz_init
Unexecuted instantiation: systemd.c:slz_init
Unexecuted instantiation: task.c:slz_init
Unexecuted instantiation: tcp_rules.c:slz_init
Unexecuted instantiation: tcpcheck.c:slz_init
Unexecuted instantiation: thread.c:slz_init
Unexecuted instantiation: tools.c:slz_init
Unexecuted instantiation: trace.c:slz_init
Unexecuted instantiation: uri_auth.c:slz_init
Unexecuted instantiation: vars.c:slz_init
Unexecuted instantiation: version.c:slz_init
Unexecuted instantiation: acl.c:slz_init
Unexecuted instantiation: action.c:slz_init
Unexecuted instantiation: activity.c:slz_init
Unexecuted instantiation: applet.c:slz_init
Unexecuted instantiation: arg.c:slz_init
Unexecuted instantiation: auth.c:slz_init
Unexecuted instantiation: backend.c:slz_init
Unexecuted instantiation: cfgcond.c:slz_init
Unexecuted instantiation: cfgparse-global.c:slz_init
Unexecuted instantiation: cfgparse-listen.c:slz_init
Unexecuted instantiation: channel.c:slz_init
Unexecuted instantiation: check.c:slz_init
Unexecuted instantiation: chunk.c:slz_init
Unexecuted instantiation: compression.c:slz_init
Unexecuted instantiation: counters.c:slz_init
Unexecuted instantiation: dgram.c:slz_init
Unexecuted instantiation: dns.c:slz_init
Unexecuted instantiation: dns_ring.c:slz_init
Unexecuted instantiation: event_hdl.c:slz_init
Unexecuted instantiation: extcheck.c:slz_init
Unexecuted instantiation: filters.c:slz_init
Unexecuted instantiation: fix.c:slz_init
Unexecuted instantiation: flt_http_comp.c:slz_init
Unexecuted instantiation: freq_ctr.c:slz_init
Unexecuted instantiation: guid.c:slz_init
Unexecuted instantiation: h1.c:slz_init
Unexecuted instantiation: haterm.c:slz_init
Unexecuted instantiation: http.c:slz_init
Unexecuted instantiation: http_fetch.c:slz_init
Unexecuted instantiation: lb_chash.c:slz_init
Unexecuted instantiation: lb_fas.c:slz_init
Unexecuted instantiation: lb_fwlc.c:slz_init
Unexecuted instantiation: lb_fwrr.c:slz_init
Unexecuted instantiation: lb_map.c:slz_init
Unexecuted instantiation: lb_ss.c:slz_init
Unexecuted instantiation: mqtt.c:slz_init
Unexecuted instantiation: mux_spop.c:slz_init
Unexecuted instantiation: pattern.c:slz_init
Unexecuted instantiation: payload.c:slz_init
Unexecuted instantiation: pipe.c:slz_init
Unexecuted instantiation: proto_tcp.c:slz_init
Unexecuted instantiation: slz.c:slz_init
Unexecuted instantiation: stats-file.c:slz_init
Unexecuted instantiation: stats-json.c:slz_init
Unexecuted instantiation: stats-proxy.c:slz_init
Unexecuted instantiation: cache.c:slz_init
Unexecuted instantiation: fcgi-app.c:slz_init
Unexecuted instantiation: flt_spoe.c:slz_init
Unexecuted instantiation: h1_htx.c:slz_init
Unexecuted instantiation: shctx.c:slz_init
134
135
/* Encodes the block according to the format used by the stream. This means
136
 * that the CRC of the input block may be computed according to the CRC32 or
137
 * adler-32 algorithms. The number of output bytes is returned.
138
 */
139
static inline long slz_encode(struct slz_stream *strm, void *out,
140
                              const void *in, long ilen, int more)
141
0
{
142
0
  long ret;
143
144
0
  if (strm->format == SLZ_FMT_GZIP)
145
0
    ret = slz_rfc1952_encode(strm, (unsigned char *) out, (const unsigned char *) in, ilen, more);
146
0
  else if (strm->format == SLZ_FMT_ZLIB)
147
0
    ret = slz_rfc1950_encode(strm, (unsigned char *) out, (const unsigned char *) in, ilen, more);
148
0
  else /* deflate for other ones */
149
0
    ret = slz_rfc1951_encode(strm, (unsigned char *) out, (const unsigned char *) in, ilen, more);
150
151
0
  return ret;
152
0
}
Unexecuted instantiation: cfgparse.c:slz_encode
Unexecuted instantiation: cli.c:slz_encode
Unexecuted instantiation: clock.c:slz_encode
Unexecuted instantiation: connection.c:slz_encode
Unexecuted instantiation: debug.c:slz_encode
Unexecuted instantiation: dynbuf.c:slz_encode
Unexecuted instantiation: errors.c:slz_encode
Unexecuted instantiation: fd.c:slz_encode
Unexecuted instantiation: frontend.c:slz_encode
Unexecuted instantiation: http_ana.c:slz_encode
Unexecuted instantiation: http_ext.c:slz_encode
Unexecuted instantiation: http_htx.c:slz_encode
Unexecuted instantiation: http_rules.c:slz_encode
Unexecuted instantiation: htx.c:slz_encode
Unexecuted instantiation: limits.c:slz_encode
Unexecuted instantiation: listener.c:slz_encode
Unexecuted instantiation: log.c:slz_encode
Unexecuted instantiation: mailers.c:slz_encode
Unexecuted instantiation: mworker.c:slz_encode
Unexecuted instantiation: peers.c:slz_encode
Unexecuted instantiation: pool.c:slz_encode
Unexecuted instantiation: proto_rhttp.c:slz_encode
Unexecuted instantiation: proto_sockpair.c:slz_encode
Unexecuted instantiation: protocol.c:slz_encode
Unexecuted instantiation: proxy.c:slz_encode
Unexecuted instantiation: queue.c:slz_encode
Unexecuted instantiation: regex.c:slz_encode
Unexecuted instantiation: resolvers.c:slz_encode
Unexecuted instantiation: ring.c:slz_encode
Unexecuted instantiation: sample.c:slz_encode
Unexecuted instantiation: server.c:slz_encode
Unexecuted instantiation: session.c:slz_encode
Unexecuted instantiation: signal.c:slz_encode
Unexecuted instantiation: sink.c:slz_encode
Unexecuted instantiation: sock.c:slz_encode
Unexecuted instantiation: sock_inet.c:slz_encode
Unexecuted instantiation: stats-html.c:slz_encode
Unexecuted instantiation: stats.c:slz_encode
Unexecuted instantiation: stconn.c:slz_encode
Unexecuted instantiation: stick_table.c:slz_encode
Unexecuted instantiation: stream.c:slz_encode
Unexecuted instantiation: systemd.c:slz_encode
Unexecuted instantiation: task.c:slz_encode
Unexecuted instantiation: tcp_rules.c:slz_encode
Unexecuted instantiation: tcpcheck.c:slz_encode
Unexecuted instantiation: thread.c:slz_encode
Unexecuted instantiation: tools.c:slz_encode
Unexecuted instantiation: trace.c:slz_encode
Unexecuted instantiation: uri_auth.c:slz_encode
Unexecuted instantiation: vars.c:slz_encode
Unexecuted instantiation: version.c:slz_encode
Unexecuted instantiation: acl.c:slz_encode
Unexecuted instantiation: action.c:slz_encode
Unexecuted instantiation: activity.c:slz_encode
Unexecuted instantiation: applet.c:slz_encode
Unexecuted instantiation: arg.c:slz_encode
Unexecuted instantiation: auth.c:slz_encode
Unexecuted instantiation: backend.c:slz_encode
Unexecuted instantiation: cfgcond.c:slz_encode
Unexecuted instantiation: cfgparse-global.c:slz_encode
Unexecuted instantiation: cfgparse-listen.c:slz_encode
Unexecuted instantiation: channel.c:slz_encode
Unexecuted instantiation: check.c:slz_encode
Unexecuted instantiation: chunk.c:slz_encode
Unexecuted instantiation: compression.c:slz_encode
Unexecuted instantiation: counters.c:slz_encode
Unexecuted instantiation: dgram.c:slz_encode
Unexecuted instantiation: dns.c:slz_encode
Unexecuted instantiation: dns_ring.c:slz_encode
Unexecuted instantiation: event_hdl.c:slz_encode
Unexecuted instantiation: extcheck.c:slz_encode
Unexecuted instantiation: filters.c:slz_encode
Unexecuted instantiation: fix.c:slz_encode
Unexecuted instantiation: flt_http_comp.c:slz_encode
Unexecuted instantiation: freq_ctr.c:slz_encode
Unexecuted instantiation: guid.c:slz_encode
Unexecuted instantiation: h1.c:slz_encode
Unexecuted instantiation: haterm.c:slz_encode
Unexecuted instantiation: http.c:slz_encode
Unexecuted instantiation: http_fetch.c:slz_encode
Unexecuted instantiation: lb_chash.c:slz_encode
Unexecuted instantiation: lb_fas.c:slz_encode
Unexecuted instantiation: lb_fwlc.c:slz_encode
Unexecuted instantiation: lb_fwrr.c:slz_encode
Unexecuted instantiation: lb_map.c:slz_encode
Unexecuted instantiation: lb_ss.c:slz_encode
Unexecuted instantiation: mqtt.c:slz_encode
Unexecuted instantiation: mux_spop.c:slz_encode
Unexecuted instantiation: pattern.c:slz_encode
Unexecuted instantiation: payload.c:slz_encode
Unexecuted instantiation: pipe.c:slz_encode
Unexecuted instantiation: proto_tcp.c:slz_encode
Unexecuted instantiation: slz.c:slz_encode
Unexecuted instantiation: stats-file.c:slz_encode
Unexecuted instantiation: stats-json.c:slz_encode
Unexecuted instantiation: stats-proxy.c:slz_encode
Unexecuted instantiation: cache.c:slz_encode
Unexecuted instantiation: fcgi-app.c:slz_encode
Unexecuted instantiation: flt_spoe.c:slz_encode
Unexecuted instantiation: h1_htx.c:slz_encode
Unexecuted instantiation: shctx.c:slz_encode
153
154
/* Flushes pending bits and sends the trailer for stream <strm> into buffer
155
 * <buf> if needed. When it's done, the stream state is updated to SLZ_ST_END.
156
 * It returns the number of bytes emitted. The trailer consists in flushing the
157
 * possibly pending bits from the queue (up to 24 bits), rounding to the next
158
 * byte, then 4 bytes for the CRC when doing zlib/gzip, then another 4 bytes
159
 * for the input length for gzip. That may about to 4+4+4 = 12 bytes, that the
160
 * caller must ensure are available before calling the function. Note that if
161
 * the initial header was never sent, it will be sent first as well (up to 10
162
 * extra bytes).
163
 */
164
static inline int slz_finish(struct slz_stream *strm, void *buf)
165
0
{
166
0
  int ret;
167
168
0
  if (strm->format == SLZ_FMT_GZIP)
169
0
    ret = slz_rfc1952_finish(strm, (unsigned char *) buf);
170
0
  else if (strm->format == SLZ_FMT_ZLIB)
171
0
    ret = slz_rfc1950_finish(strm, (unsigned char *) buf);
172
0
  else /* deflate for other ones */
173
0
    ret = slz_rfc1951_finish(strm, (unsigned char *) buf);
174
175
0
  return ret;
176
0
}
Unexecuted instantiation: cfgparse.c:slz_finish
Unexecuted instantiation: cli.c:slz_finish
Unexecuted instantiation: clock.c:slz_finish
Unexecuted instantiation: connection.c:slz_finish
Unexecuted instantiation: debug.c:slz_finish
Unexecuted instantiation: dynbuf.c:slz_finish
Unexecuted instantiation: errors.c:slz_finish
Unexecuted instantiation: fd.c:slz_finish
Unexecuted instantiation: frontend.c:slz_finish
Unexecuted instantiation: http_ana.c:slz_finish
Unexecuted instantiation: http_ext.c:slz_finish
Unexecuted instantiation: http_htx.c:slz_finish
Unexecuted instantiation: http_rules.c:slz_finish
Unexecuted instantiation: htx.c:slz_finish
Unexecuted instantiation: limits.c:slz_finish
Unexecuted instantiation: listener.c:slz_finish
Unexecuted instantiation: log.c:slz_finish
Unexecuted instantiation: mailers.c:slz_finish
Unexecuted instantiation: mworker.c:slz_finish
Unexecuted instantiation: peers.c:slz_finish
Unexecuted instantiation: pool.c:slz_finish
Unexecuted instantiation: proto_rhttp.c:slz_finish
Unexecuted instantiation: proto_sockpair.c:slz_finish
Unexecuted instantiation: protocol.c:slz_finish
Unexecuted instantiation: proxy.c:slz_finish
Unexecuted instantiation: queue.c:slz_finish
Unexecuted instantiation: regex.c:slz_finish
Unexecuted instantiation: resolvers.c:slz_finish
Unexecuted instantiation: ring.c:slz_finish
Unexecuted instantiation: sample.c:slz_finish
Unexecuted instantiation: server.c:slz_finish
Unexecuted instantiation: session.c:slz_finish
Unexecuted instantiation: signal.c:slz_finish
Unexecuted instantiation: sink.c:slz_finish
Unexecuted instantiation: sock.c:slz_finish
Unexecuted instantiation: sock_inet.c:slz_finish
Unexecuted instantiation: stats-html.c:slz_finish
Unexecuted instantiation: stats.c:slz_finish
Unexecuted instantiation: stconn.c:slz_finish
Unexecuted instantiation: stick_table.c:slz_finish
Unexecuted instantiation: stream.c:slz_finish
Unexecuted instantiation: systemd.c:slz_finish
Unexecuted instantiation: task.c:slz_finish
Unexecuted instantiation: tcp_rules.c:slz_finish
Unexecuted instantiation: tcpcheck.c:slz_finish
Unexecuted instantiation: thread.c:slz_finish
Unexecuted instantiation: tools.c:slz_finish
Unexecuted instantiation: trace.c:slz_finish
Unexecuted instantiation: uri_auth.c:slz_finish
Unexecuted instantiation: vars.c:slz_finish
Unexecuted instantiation: version.c:slz_finish
Unexecuted instantiation: acl.c:slz_finish
Unexecuted instantiation: action.c:slz_finish
Unexecuted instantiation: activity.c:slz_finish
Unexecuted instantiation: applet.c:slz_finish
Unexecuted instantiation: arg.c:slz_finish
Unexecuted instantiation: auth.c:slz_finish
Unexecuted instantiation: backend.c:slz_finish
Unexecuted instantiation: cfgcond.c:slz_finish
Unexecuted instantiation: cfgparse-global.c:slz_finish
Unexecuted instantiation: cfgparse-listen.c:slz_finish
Unexecuted instantiation: channel.c:slz_finish
Unexecuted instantiation: check.c:slz_finish
Unexecuted instantiation: chunk.c:slz_finish
Unexecuted instantiation: compression.c:slz_finish
Unexecuted instantiation: counters.c:slz_finish
Unexecuted instantiation: dgram.c:slz_finish
Unexecuted instantiation: dns.c:slz_finish
Unexecuted instantiation: dns_ring.c:slz_finish
Unexecuted instantiation: event_hdl.c:slz_finish
Unexecuted instantiation: extcheck.c:slz_finish
Unexecuted instantiation: filters.c:slz_finish
Unexecuted instantiation: fix.c:slz_finish
Unexecuted instantiation: flt_http_comp.c:slz_finish
Unexecuted instantiation: freq_ctr.c:slz_finish
Unexecuted instantiation: guid.c:slz_finish
Unexecuted instantiation: h1.c:slz_finish
Unexecuted instantiation: haterm.c:slz_finish
Unexecuted instantiation: http.c:slz_finish
Unexecuted instantiation: http_fetch.c:slz_finish
Unexecuted instantiation: lb_chash.c:slz_finish
Unexecuted instantiation: lb_fas.c:slz_finish
Unexecuted instantiation: lb_fwlc.c:slz_finish
Unexecuted instantiation: lb_fwrr.c:slz_finish
Unexecuted instantiation: lb_map.c:slz_finish
Unexecuted instantiation: lb_ss.c:slz_finish
Unexecuted instantiation: mqtt.c:slz_finish
Unexecuted instantiation: mux_spop.c:slz_finish
Unexecuted instantiation: pattern.c:slz_finish
Unexecuted instantiation: payload.c:slz_finish
Unexecuted instantiation: pipe.c:slz_finish
Unexecuted instantiation: proto_tcp.c:slz_finish
Unexecuted instantiation: slz.c:slz_finish
Unexecuted instantiation: stats-file.c:slz_finish
Unexecuted instantiation: stats-json.c:slz_finish
Unexecuted instantiation: stats-proxy.c:slz_finish
Unexecuted instantiation: cache.c:slz_finish
Unexecuted instantiation: fcgi-app.c:slz_finish
Unexecuted instantiation: flt_spoe.c:slz_finish
Unexecuted instantiation: h1_htx.c:slz_finish
Unexecuted instantiation: shctx.c:slz_finish
177
178
/* Flushes any pending data for stream <strm> into buffer <buf>, then emits an
179
 * empty literal block to byte-align the output, allowing to completely flush
180
 * the queue. Note that if the initial header was never sent, it will be sent
181
 * first as well (0, 2 or 10 extra bytes). This requires that the output buffer
182
 * still has this plus the size of the queue available (up to 4 bytes), plus
183
 * one byte for (BFINAL,BTYPE), plus 4 bytes for LEN+NLEN, or a total of 19
184
 * bytes in the worst case. The number of bytes emitted is returned. It is
185
 * guaranteed that the queue is empty on return. This may cause some overhead
186
 * by adding needless 5-byte blocks if called to often.
187
 */
188
static inline int slz_flush(struct slz_stream *strm, void *buf)
189
0
{
190
0
  int ret;
191
192
0
  if (strm->format == SLZ_FMT_GZIP)
193
0
    ret = slz_rfc1952_flush(strm, (unsigned char *) buf);
194
0
  else if (strm->format == SLZ_FMT_ZLIB)
195
0
    ret = slz_rfc1950_flush(strm, (unsigned char *) buf);
196
0
  else /* deflate for other ones */
197
0
    ret = slz_rfc1951_flush(strm, (unsigned char *) buf);
198
199
0
  return ret;
200
0
}
Unexecuted instantiation: cfgparse.c:slz_flush
Unexecuted instantiation: cli.c:slz_flush
Unexecuted instantiation: clock.c:slz_flush
Unexecuted instantiation: connection.c:slz_flush
Unexecuted instantiation: debug.c:slz_flush
Unexecuted instantiation: dynbuf.c:slz_flush
Unexecuted instantiation: errors.c:slz_flush
Unexecuted instantiation: fd.c:slz_flush
Unexecuted instantiation: frontend.c:slz_flush
Unexecuted instantiation: http_ana.c:slz_flush
Unexecuted instantiation: http_ext.c:slz_flush
Unexecuted instantiation: http_htx.c:slz_flush
Unexecuted instantiation: http_rules.c:slz_flush
Unexecuted instantiation: htx.c:slz_flush
Unexecuted instantiation: limits.c:slz_flush
Unexecuted instantiation: listener.c:slz_flush
Unexecuted instantiation: log.c:slz_flush
Unexecuted instantiation: mailers.c:slz_flush
Unexecuted instantiation: mworker.c:slz_flush
Unexecuted instantiation: peers.c:slz_flush
Unexecuted instantiation: pool.c:slz_flush
Unexecuted instantiation: proto_rhttp.c:slz_flush
Unexecuted instantiation: proto_sockpair.c:slz_flush
Unexecuted instantiation: protocol.c:slz_flush
Unexecuted instantiation: proxy.c:slz_flush
Unexecuted instantiation: queue.c:slz_flush
Unexecuted instantiation: regex.c:slz_flush
Unexecuted instantiation: resolvers.c:slz_flush
Unexecuted instantiation: ring.c:slz_flush
Unexecuted instantiation: sample.c:slz_flush
Unexecuted instantiation: server.c:slz_flush
Unexecuted instantiation: session.c:slz_flush
Unexecuted instantiation: signal.c:slz_flush
Unexecuted instantiation: sink.c:slz_flush
Unexecuted instantiation: sock.c:slz_flush
Unexecuted instantiation: sock_inet.c:slz_flush
Unexecuted instantiation: stats-html.c:slz_flush
Unexecuted instantiation: stats.c:slz_flush
Unexecuted instantiation: stconn.c:slz_flush
Unexecuted instantiation: stick_table.c:slz_flush
Unexecuted instantiation: stream.c:slz_flush
Unexecuted instantiation: systemd.c:slz_flush
Unexecuted instantiation: task.c:slz_flush
Unexecuted instantiation: tcp_rules.c:slz_flush
Unexecuted instantiation: tcpcheck.c:slz_flush
Unexecuted instantiation: thread.c:slz_flush
Unexecuted instantiation: tools.c:slz_flush
Unexecuted instantiation: trace.c:slz_flush
Unexecuted instantiation: uri_auth.c:slz_flush
Unexecuted instantiation: vars.c:slz_flush
Unexecuted instantiation: version.c:slz_flush
Unexecuted instantiation: acl.c:slz_flush
Unexecuted instantiation: action.c:slz_flush
Unexecuted instantiation: activity.c:slz_flush
Unexecuted instantiation: applet.c:slz_flush
Unexecuted instantiation: arg.c:slz_flush
Unexecuted instantiation: auth.c:slz_flush
Unexecuted instantiation: backend.c:slz_flush
Unexecuted instantiation: cfgcond.c:slz_flush
Unexecuted instantiation: cfgparse-global.c:slz_flush
Unexecuted instantiation: cfgparse-listen.c:slz_flush
Unexecuted instantiation: channel.c:slz_flush
Unexecuted instantiation: check.c:slz_flush
Unexecuted instantiation: chunk.c:slz_flush
Unexecuted instantiation: compression.c:slz_flush
Unexecuted instantiation: counters.c:slz_flush
Unexecuted instantiation: dgram.c:slz_flush
Unexecuted instantiation: dns.c:slz_flush
Unexecuted instantiation: dns_ring.c:slz_flush
Unexecuted instantiation: event_hdl.c:slz_flush
Unexecuted instantiation: extcheck.c:slz_flush
Unexecuted instantiation: filters.c:slz_flush
Unexecuted instantiation: fix.c:slz_flush
Unexecuted instantiation: flt_http_comp.c:slz_flush
Unexecuted instantiation: freq_ctr.c:slz_flush
Unexecuted instantiation: guid.c:slz_flush
Unexecuted instantiation: h1.c:slz_flush
Unexecuted instantiation: haterm.c:slz_flush
Unexecuted instantiation: http.c:slz_flush
Unexecuted instantiation: http_fetch.c:slz_flush
Unexecuted instantiation: lb_chash.c:slz_flush
Unexecuted instantiation: lb_fas.c:slz_flush
Unexecuted instantiation: lb_fwlc.c:slz_flush
Unexecuted instantiation: lb_fwrr.c:slz_flush
Unexecuted instantiation: lb_map.c:slz_flush
Unexecuted instantiation: lb_ss.c:slz_flush
Unexecuted instantiation: mqtt.c:slz_flush
Unexecuted instantiation: mux_spop.c:slz_flush
Unexecuted instantiation: pattern.c:slz_flush
Unexecuted instantiation: payload.c:slz_flush
Unexecuted instantiation: pipe.c:slz_flush
Unexecuted instantiation: proto_tcp.c:slz_flush
Unexecuted instantiation: slz.c:slz_flush
Unexecuted instantiation: stats-file.c:slz_flush
Unexecuted instantiation: stats-json.c:slz_flush
Unexecuted instantiation: stats-proxy.c:slz_flush
Unexecuted instantiation: cache.c:slz_flush
Unexecuted instantiation: fcgi-app.c:slz_flush
Unexecuted instantiation: flt_spoe.c:slz_flush
Unexecuted instantiation: h1_htx.c:slz_flush
Unexecuted instantiation: shctx.c:slz_flush
201
202
#endif