grpc 1.60.2 → 1.61.0.pre2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Makefile +208 -165
- data/include/grpc/event_engine/event_engine.h +59 -12
- data/include/grpc/event_engine/internal/memory_allocator_impl.h +6 -0
- data/include/grpc/event_engine/internal/slice_cast.h +12 -0
- data/include/grpc/event_engine/memory_allocator.h +3 -1
- data/include/grpc/event_engine/slice.h +5 -0
- data/include/grpc/grpc_security.h +22 -1
- data/include/grpc/impl/call.h +29 -0
- data/include/grpc/impl/channel_arg_names.h +12 -1
- data/include/grpc/impl/slice_type.h +1 -1
- data/include/grpc/module.modulemap +1 -0
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +54 -7
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +20 -6
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +10 -13
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +18 -10
- data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +326 -0
- data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.h +143 -0
- data/src/core/ext/filters/client_channel/backend_metric.cc +2 -2
- data/src/core/ext/filters/client_channel/client_channel.cc +32 -6
- data/src/core/ext/filters/client_channel/client_channel_internal.h +2 -0
- data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +54 -21
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +3 -2
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +2 -1
- data/src/core/ext/filters/client_channel/lb_policy/endpoint_list.cc +12 -15
- data/src/core/ext/filters/client_channel/lb_policy/endpoint_list.h +8 -5
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +139 -92
- data/src/core/ext/filters/client_channel/lb_policy/health_check_client.cc +9 -4
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +9 -4
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +10 -11
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +94 -93
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +5 -3
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +12 -15
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +38 -16
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +25 -28
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +10 -10
- data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +37 -35
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +11 -9
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +504 -461
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +232 -122
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +8 -6
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +642 -251
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.h +2 -6
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +7 -8
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +2 -1
- data/src/core/ext/filters/client_channel/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +3 -1
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +2 -2
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +2 -2
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +6 -8
- data/src/core/ext/filters/client_channel/resolver/xds/xds_dependency_manager.cc +1031 -0
- data/src/core/ext/filters/client_channel/resolver/xds/xds_dependency_manager.h +277 -0
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +128 -270
- data/src/core/ext/filters/client_channel/resolver/xds/{xds_resolver.h → xds_resolver_attributes.h} +5 -4
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver_trace.cc +25 -0
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver_trace.h +30 -0
- data/src/core/ext/filters/client_channel/retry_filter.cc +1 -0
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +35 -17
- data/src/core/ext/filters/deadline/deadline_filter.cc +12 -0
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +17 -13
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +13 -4
- data/src/core/ext/filters/http/client/http_client_filter.cc +23 -32
- data/src/core/ext/filters/http/client/http_client_filter.h +10 -5
- data/src/core/ext/filters/http/client_authority_filter.cc +14 -14
- data/src/core/ext/filters/http/client_authority_filter.h +12 -4
- data/src/core/ext/filters/http/http_filters_plugin.cc +42 -20
- data/src/core/ext/filters/http/message_compress/compression_filter.cc +55 -80
- data/src/core/ext/filters/http/message_compress/compression_filter.h +54 -12
- data/src/core/ext/filters/http/message_compress/legacy_compression_filter.cc +325 -0
- data/src/core/ext/filters/http/message_compress/legacy_compression_filter.h +139 -0
- data/src/core/ext/filters/http/server/http_server_filter.cc +41 -41
- data/src/core/ext/filters/http/server/http_server_filter.h +11 -4
- data/src/core/ext/filters/message_size/message_size_filter.cc +56 -76
- data/src/core/ext/filters/message_size/message_size_filter.h +35 -23
- data/src/core/ext/filters/rbac/rbac_filter.cc +15 -11
- data/src/core/ext/filters/rbac/rbac_filter.h +11 -4
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +25 -13
- data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +47 -50
- data/src/core/ext/filters/stateful_session/stateful_session_filter.h +21 -4
- data/src/core/ext/transport/chttp2/alpn/alpn.cc +1 -1
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +2 -2
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +11 -2
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +68 -145
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +3 -3
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +21 -82
- data/src/core/ext/transport/chttp2/transport/flow_control.h +1 -8
- data/src/core/ext/transport/chttp2/transport/frame.cc +506 -0
- data/src/core/ext/transport/chttp2/transport/frame.h +214 -0
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +33 -79
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +4 -7
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +27 -36
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +0 -2
- data/src/core/ext/transport/chttp2/transport/http2_settings.cc +122 -32
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +142 -37
- data/src/core/ext/transport/chttp2/transport/internal.h +1 -22
- data/src/core/ext/transport/chttp2/transport/parsing.cc +23 -37
- data/src/core/ext/transport/chttp2/transport/writing.cc +26 -58
- data/src/core/ext/transport/inproc/inproc_transport.cc +172 -13
- data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb.h +712 -0
- data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.c +151 -0
- data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.h +33 -0
- data/src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.c +133 -0
- data/src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.h +50 -0
- data/src/core/ext/xds/certificate_provider_store.cc +2 -1
- data/src/core/ext/xds/certificate_provider_store.h +0 -5
- data/src/core/ext/xds/xds_api.cc +31 -18
- data/src/core/ext/xds/xds_api.h +2 -2
- data/src/core/ext/xds/xds_bootstrap.h +3 -0
- data/src/core/ext/xds/xds_certificate_provider.cc +88 -287
- data/src/core/ext/xds/xds_certificate_provider.h +44 -111
- data/src/core/ext/xds/xds_client.cc +420 -414
- data/src/core/ext/xds/xds_client.h +31 -22
- data/src/core/ext/xds/xds_client_grpc.cc +3 -1
- data/src/core/ext/xds/xds_cluster.cc +104 -11
- data/src/core/ext/xds/xds_cluster.h +9 -1
- data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +9 -5
- data/src/core/ext/xds/xds_common_types.cc +14 -10
- data/src/core/ext/xds/xds_endpoint.cc +9 -4
- data/src/core/ext/xds/xds_endpoint.h +5 -1
- data/src/core/ext/xds/xds_health_status.cc +12 -2
- data/src/core/ext/xds/xds_health_status.h +4 -2
- data/src/core/ext/xds/xds_http_rbac_filter.cc +5 -3
- data/src/core/ext/xds/xds_listener.cc +14 -8
- data/src/core/ext/xds/xds_resource_type_impl.h +6 -4
- data/src/core/ext/xds/xds_route_config.cc +34 -22
- data/src/core/ext/xds/xds_route_config.h +1 -0
- data/src/core/ext/xds/xds_server_config_fetcher.cc +61 -57
- data/src/core/ext/xds/xds_transport.h +3 -0
- data/src/core/ext/xds/xds_transport_grpc.cc +47 -50
- data/src/core/ext/xds/xds_transport_grpc.h +4 -0
- data/src/core/lib/channel/call_tracer.cc +12 -0
- data/src/core/lib/channel/call_tracer.h +17 -3
- data/src/core/lib/channel/channel_args.cc +24 -14
- data/src/core/lib/channel/channel_args.h +74 -13
- data/src/core/lib/channel/channel_stack.cc +27 -0
- data/src/core/lib/channel/channel_stack.h +10 -10
- data/src/core/lib/channel/connected_channel.cc +64 -18
- data/src/core/lib/channel/promise_based_filter.h +1041 -1
- data/src/core/lib/channel/server_call_tracer_filter.cc +43 -35
- data/src/core/lib/compression/compression_internal.cc +0 -3
- data/src/core/lib/event_engine/ares_resolver.cc +35 -14
- data/src/core/lib/event_engine/ares_resolver.h +9 -10
- data/src/core/lib/event_engine/cf_engine/dns_service_resolver.cc +8 -1
- data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc +132 -0
- data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.h +61 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +52 -36
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +4 -9
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +11 -3
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +9 -2
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +7 -0
- data/src/core/lib/event_engine/posix_engine/timer_manager.cc +17 -27
- data/src/core/lib/event_engine/posix_engine/timer_manager.h +0 -3
- data/src/core/lib/event_engine/ref_counted_dns_resolver_interface.h +55 -0
- data/src/core/lib/event_engine/windows/native_windows_dns_resolver.cc +114 -0
- data/src/core/lib/event_engine/windows/native_windows_dns_resolver.h +51 -0
- data/src/core/lib/event_engine/windows/windows_engine.cc +7 -7
- data/src/core/lib/experiments/config.cc +13 -0
- data/src/core/lib/experiments/config.h +3 -0
- data/src/core/lib/experiments/experiments.cc +245 -366
- data/src/core/lib/experiments/experiments.h +50 -156
- data/src/core/lib/gprpp/debug_location.h +13 -0
- data/src/core/lib/gprpp/dual_ref_counted.h +36 -7
- data/src/core/lib/gprpp/orphanable.h +27 -0
- data/src/core/lib/gprpp/ref_counted.h +63 -22
- data/src/core/lib/gprpp/ref_counted_ptr.h +70 -27
- data/src/core/lib/gprpp/ref_counted_string.h +13 -0
- data/src/core/lib/gprpp/status_helper.cc +1 -2
- data/src/core/lib/iomgr/combiner.cc +15 -51
- data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +31 -0
- data/src/core/lib/iomgr/event_engine_shims/endpoint.h +16 -0
- data/src/core/lib/iomgr/tcp_client_posix.cc +4 -3
- data/src/core/lib/load_balancing/lb_policy.h +1 -1
- data/src/core/lib/promise/activity.cc +17 -2
- data/src/core/lib/promise/activity.h +5 -4
- data/src/core/lib/promise/all_ok.h +80 -0
- data/src/core/lib/promise/detail/join_state.h +2077 -0
- data/src/core/lib/promise/detail/promise_factory.h +1 -0
- data/src/core/lib/promise/detail/promise_like.h +8 -1
- data/src/core/lib/promise/detail/seq_state.h +3458 -150
- data/src/core/lib/promise/detail/status.h +42 -5
- data/src/core/lib/promise/for_each.h +13 -1
- data/src/core/lib/promise/if.h +4 -0
- data/src/core/lib/promise/latch.h +6 -3
- data/src/core/lib/promise/party.cc +33 -31
- data/src/core/lib/promise/party.h +142 -6
- data/src/core/lib/promise/poll.h +39 -13
- data/src/core/lib/promise/promise.h +4 -0
- data/src/core/lib/promise/seq.h +107 -7
- data/src/core/lib/promise/status_flag.h +196 -0
- data/src/core/lib/promise/try_join.h +132 -0
- data/src/core/lib/promise/try_seq.h +132 -10
- data/src/core/lib/resolver/endpoint_addresses.cc +0 -1
- data/src/core/lib/resolver/endpoint_addresses.h +48 -0
- data/src/core/lib/resource_quota/arena.h +2 -2
- data/src/core/lib/resource_quota/memory_quota.cc +57 -8
- data/src/core/lib/resource_quota/memory_quota.h +6 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +14 -11
- data/src/core/lib/security/authorization/grpc_server_authz_filter.h +14 -5
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +4 -0
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +4 -0
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +28 -20
- data/src/core/lib/security/credentials/external/external_account_credentials.h +4 -0
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +4 -0
- data/src/core/lib/security/credentials/external/file_external_account_credentials.h +4 -0
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +4 -0
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +4 -0
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +2 -1
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +0 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +12 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_crl_provider.cc +22 -5
- data/src/core/lib/security/credentials/tls/grpc_tls_crl_provider.h +1 -5
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +16 -0
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +21 -28
- data/src/core/lib/security/credentials/xds/xds_credentials.h +2 -4
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +4 -3
- data/src/core/lib/security/transport/auth_filters.h +71 -4
- data/src/core/lib/security/transport/client_auth_filter.cc +2 -4
- data/src/core/lib/security/transport/legacy_server_auth_filter.cc +244 -0
- data/src/core/lib/security/transport/server_auth_filter.cc +70 -90
- data/src/core/lib/slice/slice_buffer.h +3 -0
- data/src/core/lib/surface/builtins.cc +1 -1
- data/src/core/lib/surface/call.cc +683 -196
- data/src/core/lib/surface/call.h +26 -13
- data/src/core/lib/surface/call_trace.cc +42 -1
- data/src/core/lib/surface/channel.cc +0 -1
- data/src/core/lib/surface/channel.h +0 -6
- data/src/core/lib/surface/channel_init.h +26 -0
- data/src/core/lib/surface/init.cc +14 -8
- data/src/core/lib/surface/server.cc +256 -237
- data/src/core/lib/surface/server.h +26 -54
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/surface/wait_for_cq_end_op.h +94 -0
- data/src/core/lib/transport/call_final_info.cc +38 -0
- data/src/core/lib/transport/call_final_info.h +54 -0
- data/src/core/lib/transport/connectivity_state.cc +3 -2
- data/src/core/lib/transport/connectivity_state.h +4 -0
- data/src/core/lib/transport/metadata_batch.h +4 -4
- data/src/core/lib/transport/transport.cc +70 -19
- data/src/core/lib/transport/transport.h +395 -25
- data/src/core/plugin_registry/grpc_plugin_registry.cc +3 -0
- data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +0 -3
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -1
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +1 -1
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +1 -1
- data/src/core/tsi/ssl_transport_security.cc +65 -43
- data/src/ruby/ext/grpc/rb_channel_args.c +3 -1
- data/src/ruby/ext/grpc/rb_grpc.c +0 -1
- data/src/ruby/ext/grpc/rb_grpc.h +0 -2
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +6 -0
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/third_party/upb/upb/reflection/def_pool.h +2 -2
- data/third_party/zlib/adler32.c +5 -27
- data/third_party/zlib/compress.c +5 -16
- data/third_party/zlib/crc32.c +86 -162
- data/third_party/zlib/deflate.c +233 -336
- data/third_party/zlib/deflate.h +8 -8
- data/third_party/zlib/gzguts.h +11 -12
- data/third_party/zlib/infback.c +7 -23
- data/third_party/zlib/inffast.c +1 -4
- data/third_party/zlib/inffast.h +1 -1
- data/third_party/zlib/inflate.c +30 -99
- data/third_party/zlib/inftrees.c +6 -11
- data/third_party/zlib/inftrees.h +3 -3
- data/third_party/zlib/trees.c +224 -302
- data/third_party/zlib/uncompr.c +4 -12
- data/third_party/zlib/zconf.h +6 -2
- data/third_party/zlib/zlib.h +191 -188
- data/third_party/zlib/zutil.c +16 -44
- data/third_party/zlib/zutil.h +10 -10
- metadata +35 -13
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +0 -1173
- data/src/core/lib/event_engine/memory_allocator.cc +0 -74
- data/src/core/lib/transport/pid_controller.cc +0 -51
- data/src/core/lib/transport/pid_controller.h +0 -116
- data/third_party/upb/upb/collections/array.h +0 -17
- data/third_party/upb/upb/collections/map.h +0 -17
- data/third_party/upb/upb/upb.hpp +0 -18
data/third_party/zlib/deflate.c
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
/* deflate.c -- compress data using the deflation algorithm
|
2
|
-
* Copyright (C) 1995-
|
2
|
+
* Copyright (C) 1995-2023 Jean-loup Gailly and Mark Adler
|
3
3
|
* For conditions of distribution and use, see copyright notice in zlib.h
|
4
4
|
*/
|
5
5
|
|
@@ -52,7 +52,7 @@
|
|
52
52
|
#include "deflate.h"
|
53
53
|
|
54
54
|
const char deflate_copyright[] =
|
55
|
-
" deflate 1.
|
55
|
+
" deflate 1.3 Copyright 1995-2023 Jean-loup Gailly and Mark Adler ";
|
56
56
|
/*
|
57
57
|
If you use the zlib library in a product, an acknowledgment is welcome
|
58
58
|
in the documentation of your product. If for some reason you cannot
|
@@ -60,9 +60,6 @@ const char deflate_copyright[] =
|
|
60
60
|
copyright string in the executable of your product.
|
61
61
|
*/
|
62
62
|
|
63
|
-
/* ===========================================================================
|
64
|
-
* Function prototypes.
|
65
|
-
*/
|
66
63
|
typedef enum {
|
67
64
|
need_more, /* block not completed, need more input or more output */
|
68
65
|
block_done, /* block flush performed */
|
@@ -70,29 +67,16 @@ typedef enum {
|
|
70
67
|
finish_done /* finish done, accept no more input or output */
|
71
68
|
} block_state;
|
72
69
|
|
73
|
-
typedef block_state (*compress_func)
|
70
|
+
typedef block_state (*compress_func)(deflate_state *s, int flush);
|
74
71
|
/* Compression function. Returns the block state after the call. */
|
75
72
|
|
76
|
-
local
|
77
|
-
local
|
78
|
-
local void fill_window OF((deflate_state *s));
|
79
|
-
local block_state deflate_stored OF((deflate_state *s, int flush));
|
80
|
-
local block_state deflate_fast OF((deflate_state *s, int flush));
|
73
|
+
local block_state deflate_stored(deflate_state *s, int flush);
|
74
|
+
local block_state deflate_fast(deflate_state *s, int flush);
|
81
75
|
#ifndef FASTEST
|
82
|
-
local block_state deflate_slow
|
83
|
-
#endif
|
84
|
-
local block_state deflate_rle OF((deflate_state *s, int flush));
|
85
|
-
local block_state deflate_huff OF((deflate_state *s, int flush));
|
86
|
-
local void lm_init OF((deflate_state *s));
|
87
|
-
local void putShortMSB OF((deflate_state *s, uInt b));
|
88
|
-
local void flush_pending OF((z_streamp strm));
|
89
|
-
local unsigned read_buf OF((z_streamp strm, Bytef *buf, unsigned size));
|
90
|
-
local uInt longest_match OF((deflate_state *s, IPos cur_match));
|
91
|
-
|
92
|
-
#ifdef ZLIB_DEBUG
|
93
|
-
local void check_match OF((deflate_state *s, IPos start, IPos match,
|
94
|
-
int length));
|
76
|
+
local block_state deflate_slow(deflate_state *s, int flush);
|
95
77
|
#endif
|
78
|
+
local block_state deflate_rle(deflate_state *s, int flush);
|
79
|
+
local block_state deflate_huff(deflate_state *s, int flush);
|
96
80
|
|
97
81
|
/* ===========================================================================
|
98
82
|
* Local data
|
@@ -195,9 +179,12 @@ local const config configuration_table[10] = {
|
|
195
179
|
* bit values at the expense of memory usage). We slide even when level == 0 to
|
196
180
|
* keep the hash table consistent if we switch back to level > 0 later.
|
197
181
|
*/
|
198
|
-
|
199
|
-
|
200
|
-
|
182
|
+
#if defined(__has_feature)
|
183
|
+
# if __has_feature(memory_sanitizer)
|
184
|
+
__attribute__((no_sanitize("memory")))
|
185
|
+
# endif
|
186
|
+
#endif
|
187
|
+
local void slide_hash(deflate_state *s) {
|
201
188
|
unsigned n, m;
|
202
189
|
Posf *p;
|
203
190
|
uInt wsize = s->w_size;
|
@@ -221,30 +208,177 @@ local void slide_hash(s)
|
|
221
208
|
#endif
|
222
209
|
}
|
223
210
|
|
211
|
+
/* ===========================================================================
|
212
|
+
* Read a new buffer from the current input stream, update the adler32
|
213
|
+
* and total number of bytes read. All deflate() input goes through
|
214
|
+
* this function so some applications may wish to modify it to avoid
|
215
|
+
* allocating a large strm->next_in buffer and copying from it.
|
216
|
+
* (See also flush_pending()).
|
217
|
+
*/
|
218
|
+
local unsigned read_buf(z_streamp strm, Bytef *buf, unsigned size) {
|
219
|
+
unsigned len = strm->avail_in;
|
220
|
+
|
221
|
+
if (len > size) len = size;
|
222
|
+
if (len == 0) return 0;
|
223
|
+
|
224
|
+
strm->avail_in -= len;
|
225
|
+
|
226
|
+
zmemcpy(buf, strm->next_in, len);
|
227
|
+
if (strm->state->wrap == 1) {
|
228
|
+
strm->adler = adler32(strm->adler, buf, len);
|
229
|
+
}
|
230
|
+
#ifdef GZIP
|
231
|
+
else if (strm->state->wrap == 2) {
|
232
|
+
strm->adler = crc32(strm->adler, buf, len);
|
233
|
+
}
|
234
|
+
#endif
|
235
|
+
strm->next_in += len;
|
236
|
+
strm->total_in += len;
|
237
|
+
|
238
|
+
return len;
|
239
|
+
}
|
240
|
+
|
241
|
+
/* ===========================================================================
|
242
|
+
* Fill the window when the lookahead becomes insufficient.
|
243
|
+
* Updates strstart and lookahead.
|
244
|
+
*
|
245
|
+
* IN assertion: lookahead < MIN_LOOKAHEAD
|
246
|
+
* OUT assertions: strstart <= window_size-MIN_LOOKAHEAD
|
247
|
+
* At least one byte has been read, or avail_in == 0; reads are
|
248
|
+
* performed for at least two bytes (required for the zip translate_eol
|
249
|
+
* option -- not supported here).
|
250
|
+
*/
|
251
|
+
local void fill_window(deflate_state *s) {
|
252
|
+
unsigned n;
|
253
|
+
unsigned more; /* Amount of free space at the end of the window. */
|
254
|
+
uInt wsize = s->w_size;
|
255
|
+
|
256
|
+
Assert(s->lookahead < MIN_LOOKAHEAD, "already enough lookahead");
|
257
|
+
|
258
|
+
do {
|
259
|
+
more = (unsigned)(s->window_size -(ulg)s->lookahead -(ulg)s->strstart);
|
260
|
+
|
261
|
+
/* Deal with !@#$% 64K limit: */
|
262
|
+
if (sizeof(int) <= 2) {
|
263
|
+
if (more == 0 && s->strstart == 0 && s->lookahead == 0) {
|
264
|
+
more = wsize;
|
265
|
+
|
266
|
+
} else if (more == (unsigned)(-1)) {
|
267
|
+
/* Very unlikely, but possible on 16 bit machine if
|
268
|
+
* strstart == 0 && lookahead == 1 (input done a byte at time)
|
269
|
+
*/
|
270
|
+
more--;
|
271
|
+
}
|
272
|
+
}
|
273
|
+
|
274
|
+
/* If the window is almost full and there is insufficient lookahead,
|
275
|
+
* move the upper half to the lower one to make room in the upper half.
|
276
|
+
*/
|
277
|
+
if (s->strstart >= wsize + MAX_DIST(s)) {
|
278
|
+
|
279
|
+
zmemcpy(s->window, s->window + wsize, (unsigned)wsize - more);
|
280
|
+
s->match_start -= wsize;
|
281
|
+
s->strstart -= wsize; /* we now have strstart >= MAX_DIST */
|
282
|
+
s->block_start -= (long) wsize;
|
283
|
+
if (s->insert > s->strstart)
|
284
|
+
s->insert = s->strstart;
|
285
|
+
slide_hash(s);
|
286
|
+
more += wsize;
|
287
|
+
}
|
288
|
+
if (s->strm->avail_in == 0) break;
|
289
|
+
|
290
|
+
/* If there was no sliding:
|
291
|
+
* strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&
|
292
|
+
* more == window_size - lookahead - strstart
|
293
|
+
* => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)
|
294
|
+
* => more >= window_size - 2*WSIZE + 2
|
295
|
+
* In the BIG_MEM or MMAP case (not yet supported),
|
296
|
+
* window_size == input_size + MIN_LOOKAHEAD &&
|
297
|
+
* strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.
|
298
|
+
* Otherwise, window_size == 2*WSIZE so more >= 2.
|
299
|
+
* If there was sliding, more >= WSIZE. So in all cases, more >= 2.
|
300
|
+
*/
|
301
|
+
Assert(more >= 2, "more < 2");
|
302
|
+
|
303
|
+
n = read_buf(s->strm, s->window + s->strstart + s->lookahead, more);
|
304
|
+
s->lookahead += n;
|
305
|
+
|
306
|
+
/* Initialize the hash value now that we have some input: */
|
307
|
+
if (s->lookahead + s->insert >= MIN_MATCH) {
|
308
|
+
uInt str = s->strstart - s->insert;
|
309
|
+
s->ins_h = s->window[str];
|
310
|
+
UPDATE_HASH(s, s->ins_h, s->window[str + 1]);
|
311
|
+
#if MIN_MATCH != 3
|
312
|
+
Call UPDATE_HASH() MIN_MATCH-3 more times
|
313
|
+
#endif
|
314
|
+
while (s->insert) {
|
315
|
+
UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]);
|
316
|
+
#ifndef FASTEST
|
317
|
+
s->prev[str & s->w_mask] = s->head[s->ins_h];
|
318
|
+
#endif
|
319
|
+
s->head[s->ins_h] = (Pos)str;
|
320
|
+
str++;
|
321
|
+
s->insert--;
|
322
|
+
if (s->lookahead + s->insert < MIN_MATCH)
|
323
|
+
break;
|
324
|
+
}
|
325
|
+
}
|
326
|
+
/* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,
|
327
|
+
* but this is not important since only literal bytes will be emitted.
|
328
|
+
*/
|
329
|
+
|
330
|
+
} while (s->lookahead < MIN_LOOKAHEAD && s->strm->avail_in != 0);
|
331
|
+
|
332
|
+
/* If the WIN_INIT bytes after the end of the current data have never been
|
333
|
+
* written, then zero those bytes in order to avoid memory check reports of
|
334
|
+
* the use of uninitialized (or uninitialised as Julian writes) bytes by
|
335
|
+
* the longest match routines. Update the high water mark for the next
|
336
|
+
* time through here. WIN_INIT is set to MAX_MATCH since the longest match
|
337
|
+
* routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.
|
338
|
+
*/
|
339
|
+
if (s->high_water < s->window_size) {
|
340
|
+
ulg curr = s->strstart + (ulg)(s->lookahead);
|
341
|
+
ulg init;
|
342
|
+
|
343
|
+
if (s->high_water < curr) {
|
344
|
+
/* Previous high water mark below current data -- zero WIN_INIT
|
345
|
+
* bytes or up to end of window, whichever is less.
|
346
|
+
*/
|
347
|
+
init = s->window_size - curr;
|
348
|
+
if (init > WIN_INIT)
|
349
|
+
init = WIN_INIT;
|
350
|
+
zmemzero(s->window + curr, (unsigned)init);
|
351
|
+
s->high_water = curr + init;
|
352
|
+
}
|
353
|
+
else if (s->high_water < (ulg)curr + WIN_INIT) {
|
354
|
+
/* High water mark at or above current data, but below current data
|
355
|
+
* plus WIN_INIT -- zero out to current data plus WIN_INIT, or up
|
356
|
+
* to end of window, whichever is less.
|
357
|
+
*/
|
358
|
+
init = (ulg)curr + WIN_INIT - s->high_water;
|
359
|
+
if (init > s->window_size - s->high_water)
|
360
|
+
init = s->window_size - s->high_water;
|
361
|
+
zmemzero(s->window + s->high_water, (unsigned)init);
|
362
|
+
s->high_water += init;
|
363
|
+
}
|
364
|
+
}
|
365
|
+
|
366
|
+
Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,
|
367
|
+
"not enough room for search");
|
368
|
+
}
|
369
|
+
|
224
370
|
/* ========================================================================= */
|
225
|
-
int ZEXPORT deflateInit_(strm, level, version,
|
226
|
-
|
227
|
-
int level;
|
228
|
-
const char *version;
|
229
|
-
int stream_size;
|
230
|
-
{
|
371
|
+
int ZEXPORT deflateInit_(z_streamp strm, int level, const char *version,
|
372
|
+
int stream_size) {
|
231
373
|
return deflateInit2_(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL,
|
232
374
|
Z_DEFAULT_STRATEGY, version, stream_size);
|
233
375
|
/* To do: ignore strm->next_in if we use it as window */
|
234
376
|
}
|
235
377
|
|
236
378
|
/* ========================================================================= */
|
237
|
-
int ZEXPORT deflateInit2_(strm, level, method,
|
238
|
-
|
239
|
-
|
240
|
-
int level;
|
241
|
-
int method;
|
242
|
-
int windowBits;
|
243
|
-
int memLevel;
|
244
|
-
int strategy;
|
245
|
-
const char *version;
|
246
|
-
int stream_size;
|
247
|
-
{
|
379
|
+
int ZEXPORT deflateInit2_(z_streamp strm, int level, int method,
|
380
|
+
int windowBits, int memLevel, int strategy,
|
381
|
+
const char *version, int stream_size) {
|
248
382
|
deflate_state *s;
|
249
383
|
int wrap = 1;
|
250
384
|
static const char my_version[] = ZLIB_VERSION;
|
@@ -386,9 +520,7 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy,
|
|
386
520
|
/* =========================================================================
|
387
521
|
* Check for a valid deflate stream state. Return 0 if ok, 1 if not.
|
388
522
|
*/
|
389
|
-
local int deflateStateCheck(strm)
|
390
|
-
z_streamp strm;
|
391
|
-
{
|
523
|
+
local int deflateStateCheck(z_streamp strm) {
|
392
524
|
deflate_state *s;
|
393
525
|
if (strm == Z_NULL ||
|
394
526
|
strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0)
|
@@ -409,11 +541,8 @@ local int deflateStateCheck(strm)
|
|
409
541
|
}
|
410
542
|
|
411
543
|
/* ========================================================================= */
|
412
|
-
int ZEXPORT deflateSetDictionary(strm, dictionary,
|
413
|
-
|
414
|
-
const Bytef *dictionary;
|
415
|
-
uInt dictLength;
|
416
|
-
{
|
544
|
+
int ZEXPORT deflateSetDictionary(z_streamp strm, const Bytef *dictionary,
|
545
|
+
uInt dictLength) {
|
417
546
|
deflate_state *s;
|
418
547
|
uInt str, n;
|
419
548
|
int wrap;
|
@@ -478,11 +607,8 @@ int ZEXPORT deflateSetDictionary(strm, dictionary, dictLength)
|
|
478
607
|
}
|
479
608
|
|
480
609
|
/* ========================================================================= */
|
481
|
-
int ZEXPORT deflateGetDictionary(strm, dictionary,
|
482
|
-
|
483
|
-
Bytef *dictionary;
|
484
|
-
uInt *dictLength;
|
485
|
-
{
|
610
|
+
int ZEXPORT deflateGetDictionary(z_streamp strm, Bytef *dictionary,
|
611
|
+
uInt *dictLength) {
|
486
612
|
deflate_state *s;
|
487
613
|
uInt len;
|
488
614
|
|
@@ -500,9 +626,7 @@ int ZEXPORT deflateGetDictionary(strm, dictionary, dictLength)
|
|
500
626
|
}
|
501
627
|
|
502
628
|
/* ========================================================================= */
|
503
|
-
int ZEXPORT deflateResetKeep(strm)
|
504
|
-
z_streamp strm;
|
505
|
-
{
|
629
|
+
int ZEXPORT deflateResetKeep(z_streamp strm) {
|
506
630
|
deflate_state *s;
|
507
631
|
|
508
632
|
if (deflateStateCheck(strm)) {
|
@@ -537,10 +661,32 @@ int ZEXPORT deflateResetKeep(strm)
|
|
537
661
|
return Z_OK;
|
538
662
|
}
|
539
663
|
|
664
|
+
/* ===========================================================================
|
665
|
+
* Initialize the "longest match" routines for a new zlib stream
|
666
|
+
*/
|
667
|
+
local void lm_init(deflate_state *s) {
|
668
|
+
s->window_size = (ulg)2L*s->w_size;
|
669
|
+
|
670
|
+
CLEAR_HASH(s);
|
671
|
+
|
672
|
+
/* Set the default configuration parameters:
|
673
|
+
*/
|
674
|
+
s->max_lazy_match = configuration_table[s->level].max_lazy;
|
675
|
+
s->good_match = configuration_table[s->level].good_length;
|
676
|
+
s->nice_match = configuration_table[s->level].nice_length;
|
677
|
+
s->max_chain_length = configuration_table[s->level].max_chain;
|
678
|
+
|
679
|
+
s->strstart = 0;
|
680
|
+
s->block_start = 0L;
|
681
|
+
s->lookahead = 0;
|
682
|
+
s->insert = 0;
|
683
|
+
s->match_length = s->prev_length = MIN_MATCH-1;
|
684
|
+
s->match_available = 0;
|
685
|
+
s->ins_h = 0;
|
686
|
+
}
|
687
|
+
|
540
688
|
/* ========================================================================= */
|
541
|
-
int ZEXPORT deflateReset(strm)
|
542
|
-
z_streamp strm;
|
543
|
-
{
|
689
|
+
int ZEXPORT deflateReset(z_streamp strm) {
|
544
690
|
int ret;
|
545
691
|
|
546
692
|
ret = deflateResetKeep(strm);
|
@@ -550,10 +696,7 @@ int ZEXPORT deflateReset(strm)
|
|
550
696
|
}
|
551
697
|
|
552
698
|
/* ========================================================================= */
|
553
|
-
int ZEXPORT deflateSetHeader(strm, head)
|
554
|
-
z_streamp strm;
|
555
|
-
gz_headerp head;
|
556
|
-
{
|
699
|
+
int ZEXPORT deflateSetHeader(z_streamp strm, gz_headerp head) {
|
557
700
|
if (deflateStateCheck(strm) || strm->state->wrap != 2)
|
558
701
|
return Z_STREAM_ERROR;
|
559
702
|
strm->state->gzhead = head;
|
@@ -561,11 +704,7 @@ int ZEXPORT deflateSetHeader(strm, head)
|
|
561
704
|
}
|
562
705
|
|
563
706
|
/* ========================================================================= */
|
564
|
-
int ZEXPORT deflatePending(strm, pending, bits)
|
565
|
-
unsigned *pending;
|
566
|
-
int *bits;
|
567
|
-
z_streamp strm;
|
568
|
-
{
|
707
|
+
int ZEXPORT deflatePending(z_streamp strm, unsigned *pending, int *bits) {
|
569
708
|
if (deflateStateCheck(strm)) return Z_STREAM_ERROR;
|
570
709
|
if (pending != Z_NULL)
|
571
710
|
*pending = strm->state->pending;
|
@@ -575,11 +714,7 @@ int ZEXPORT deflatePending(strm, pending, bits)
|
|
575
714
|
}
|
576
715
|
|
577
716
|
/* ========================================================================= */
|
578
|
-
int ZEXPORT deflatePrime(strm, bits, value)
|
579
|
-
z_streamp strm;
|
580
|
-
int bits;
|
581
|
-
int value;
|
582
|
-
{
|
717
|
+
int ZEXPORT deflatePrime(z_streamp strm, int bits, int value) {
|
583
718
|
deflate_state *s;
|
584
719
|
int put;
|
585
720
|
|
@@ -602,11 +737,7 @@ int ZEXPORT deflatePrime(strm, bits, value)
|
|
602
737
|
}
|
603
738
|
|
604
739
|
/* ========================================================================= */
|
605
|
-
int ZEXPORT deflateParams(strm, level, strategy)
|
606
|
-
z_streamp strm;
|
607
|
-
int level;
|
608
|
-
int strategy;
|
609
|
-
{
|
740
|
+
int ZEXPORT deflateParams(z_streamp strm, int level, int strategy) {
|
610
741
|
deflate_state *s;
|
611
742
|
compress_func func;
|
612
743
|
|
@@ -651,13 +782,8 @@ int ZEXPORT deflateParams(strm, level, strategy)
|
|
651
782
|
}
|
652
783
|
|
653
784
|
/* ========================================================================= */
|
654
|
-
int ZEXPORT deflateTune(strm, good_length, max_lazy,
|
655
|
-
|
656
|
-
int good_length;
|
657
|
-
int max_lazy;
|
658
|
-
int nice_length;
|
659
|
-
int max_chain;
|
660
|
-
{
|
785
|
+
int ZEXPORT deflateTune(z_streamp strm, int good_length, int max_lazy,
|
786
|
+
int nice_length, int max_chain) {
|
661
787
|
deflate_state *s;
|
662
788
|
|
663
789
|
if (deflateStateCheck(strm)) return Z_STREAM_ERROR;
|
@@ -693,10 +819,7 @@ int ZEXPORT deflateTune(strm, good_length, max_lazy, nice_length, max_chain)
|
|
693
819
|
*
|
694
820
|
* Shifts are used to approximate divisions, for speed.
|
695
821
|
*/
|
696
|
-
uLong ZEXPORT deflateBound(strm, sourceLen)
|
697
|
-
z_streamp strm;
|
698
|
-
uLong sourceLen;
|
699
|
-
{
|
822
|
+
uLong ZEXPORT deflateBound(z_streamp strm, uLong sourceLen) {
|
700
823
|
deflate_state *s;
|
701
824
|
uLong fixedlen, storelen, wraplen;
|
702
825
|
|
@@ -752,7 +875,8 @@ uLong ZEXPORT deflateBound(strm, sourceLen)
|
|
752
875
|
|
753
876
|
/* if not default parameters, return one of the conservative bounds */
|
754
877
|
if (s->w_bits != 15 || s->hash_bits != 8 + 7)
|
755
|
-
return (s->w_bits <= s->hash_bits ? fixedlen : storelen) +
|
878
|
+
return (s->w_bits <= s->hash_bits && s->level ? fixedlen : storelen) +
|
879
|
+
wraplen;
|
756
880
|
|
757
881
|
/* default settings: return tight bound for that case -- ~0.03% overhead
|
758
882
|
plus a small constant */
|
@@ -765,10 +889,7 @@ uLong ZEXPORT deflateBound(strm, sourceLen)
|
|
765
889
|
* IN assertion: the stream state is correct and there is enough room in
|
766
890
|
* pending_buf.
|
767
891
|
*/
|
768
|
-
local void putShortMSB(s, b)
|
769
|
-
deflate_state *s;
|
770
|
-
uInt b;
|
771
|
-
{
|
892
|
+
local void putShortMSB(deflate_state *s, uInt b) {
|
772
893
|
put_byte(s, (Byte)(b >> 8));
|
773
894
|
put_byte(s, (Byte)(b & 0xff));
|
774
895
|
}
|
@@ -779,9 +900,7 @@ local void putShortMSB(s, b)
|
|
779
900
|
* applications may wish to modify it to avoid allocating a large
|
780
901
|
* strm->next_out buffer and copying into it. (See also read_buf()).
|
781
902
|
*/
|
782
|
-
local void flush_pending(strm)
|
783
|
-
z_streamp strm;
|
784
|
-
{
|
903
|
+
local void flush_pending(z_streamp strm) {
|
785
904
|
unsigned len;
|
786
905
|
deflate_state *s = strm->state;
|
787
906
|
|
@@ -812,10 +931,7 @@ local void flush_pending(strm)
|
|
812
931
|
} while (0)
|
813
932
|
|
814
933
|
/* ========================================================================= */
|
815
|
-
int ZEXPORT deflate(strm, flush)
|
816
|
-
z_streamp strm;
|
817
|
-
int flush;
|
818
|
-
{
|
934
|
+
int ZEXPORT deflate(z_streamp strm, int flush) {
|
819
935
|
int old_flush; /* value of flush param for previous deflate call */
|
820
936
|
deflate_state *s;
|
821
937
|
|
@@ -1127,9 +1243,7 @@ int ZEXPORT deflate(strm, flush)
|
|
1127
1243
|
}
|
1128
1244
|
|
1129
1245
|
/* ========================================================================= */
|
1130
|
-
int ZEXPORT deflateEnd(strm)
|
1131
|
-
z_streamp strm;
|
1132
|
-
{
|
1246
|
+
int ZEXPORT deflateEnd(z_streamp strm) {
|
1133
1247
|
int status;
|
1134
1248
|
|
1135
1249
|
if (deflateStateCheck(strm)) return Z_STREAM_ERROR;
|
@@ -1153,11 +1267,10 @@ int ZEXPORT deflateEnd(strm)
|
|
1153
1267
|
* To simplify the source, this is not supported for 16-bit MSDOS (which
|
1154
1268
|
* doesn't have enough memory anyway to duplicate compression states).
|
1155
1269
|
*/
|
1156
|
-
int ZEXPORT deflateCopy(dest, source)
|
1157
|
-
z_streamp dest;
|
1158
|
-
z_streamp source;
|
1159
|
-
{
|
1270
|
+
int ZEXPORT deflateCopy(z_streamp dest, z_streamp source) {
|
1160
1271
|
#ifdef MAXSEG_64K
|
1272
|
+
(void)dest;
|
1273
|
+
(void)source;
|
1161
1274
|
return Z_STREAM_ERROR;
|
1162
1275
|
#else
|
1163
1276
|
deflate_state *ds;
|
@@ -1205,66 +1318,6 @@ int ZEXPORT deflateCopy(dest, source)
|
|
1205
1318
|
#endif /* MAXSEG_64K */
|
1206
1319
|
}
|
1207
1320
|
|
1208
|
-
/* ===========================================================================
|
1209
|
-
* Read a new buffer from the current input stream, update the adler32
|
1210
|
-
* and total number of bytes read. All deflate() input goes through
|
1211
|
-
* this function so some applications may wish to modify it to avoid
|
1212
|
-
* allocating a large strm->next_in buffer and copying from it.
|
1213
|
-
* (See also flush_pending()).
|
1214
|
-
*/
|
1215
|
-
local unsigned read_buf(strm, buf, size)
|
1216
|
-
z_streamp strm;
|
1217
|
-
Bytef *buf;
|
1218
|
-
unsigned size;
|
1219
|
-
{
|
1220
|
-
unsigned len = strm->avail_in;
|
1221
|
-
|
1222
|
-
if (len > size) len = size;
|
1223
|
-
if (len == 0) return 0;
|
1224
|
-
|
1225
|
-
strm->avail_in -= len;
|
1226
|
-
|
1227
|
-
zmemcpy(buf, strm->next_in, len);
|
1228
|
-
if (strm->state->wrap == 1) {
|
1229
|
-
strm->adler = adler32(strm->adler, buf, len);
|
1230
|
-
}
|
1231
|
-
#ifdef GZIP
|
1232
|
-
else if (strm->state->wrap == 2) {
|
1233
|
-
strm->adler = crc32(strm->adler, buf, len);
|
1234
|
-
}
|
1235
|
-
#endif
|
1236
|
-
strm->next_in += len;
|
1237
|
-
strm->total_in += len;
|
1238
|
-
|
1239
|
-
return len;
|
1240
|
-
}
|
1241
|
-
|
1242
|
-
/* ===========================================================================
|
1243
|
-
* Initialize the "longest match" routines for a new zlib stream
|
1244
|
-
*/
|
1245
|
-
local void lm_init(s)
|
1246
|
-
deflate_state *s;
|
1247
|
-
{
|
1248
|
-
s->window_size = (ulg)2L*s->w_size;
|
1249
|
-
|
1250
|
-
CLEAR_HASH(s);
|
1251
|
-
|
1252
|
-
/* Set the default configuration parameters:
|
1253
|
-
*/
|
1254
|
-
s->max_lazy_match = configuration_table[s->level].max_lazy;
|
1255
|
-
s->good_match = configuration_table[s->level].good_length;
|
1256
|
-
s->nice_match = configuration_table[s->level].nice_length;
|
1257
|
-
s->max_chain_length = configuration_table[s->level].max_chain;
|
1258
|
-
|
1259
|
-
s->strstart = 0;
|
1260
|
-
s->block_start = 0L;
|
1261
|
-
s->lookahead = 0;
|
1262
|
-
s->insert = 0;
|
1263
|
-
s->match_length = s->prev_length = MIN_MATCH-1;
|
1264
|
-
s->match_available = 0;
|
1265
|
-
s->ins_h = 0;
|
1266
|
-
}
|
1267
|
-
|
1268
1321
|
#ifndef FASTEST
|
1269
1322
|
/* ===========================================================================
|
1270
1323
|
* Set match_start to the longest match starting at the given string and
|
@@ -1275,10 +1328,7 @@ local void lm_init(s)
|
|
1275
1328
|
* string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1
|
1276
1329
|
* OUT assertion: the match length is not greater than s->lookahead.
|
1277
1330
|
*/
|
1278
|
-
local uInt longest_match(s, cur_match)
|
1279
|
-
deflate_state *s;
|
1280
|
-
IPos cur_match; /* current match */
|
1281
|
-
{
|
1331
|
+
local uInt longest_match(deflate_state *s, IPos cur_match) {
|
1282
1332
|
unsigned chain_length = s->max_chain_length;/* max hash chain length */
|
1283
1333
|
register Bytef *scan = s->window + s->strstart; /* current string */
|
1284
1334
|
register Bytef *match; /* matched string */
|
@@ -1426,10 +1476,7 @@ local uInt longest_match(s, cur_match)
|
|
1426
1476
|
/* ---------------------------------------------------------------------------
|
1427
1477
|
* Optimized version for FASTEST only
|
1428
1478
|
*/
|
1429
|
-
local uInt longest_match(s, cur_match)
|
1430
|
-
deflate_state *s;
|
1431
|
-
IPos cur_match; /* current match */
|
1432
|
-
{
|
1479
|
+
local uInt longest_match(deflate_state *s, IPos cur_match) {
|
1433
1480
|
register Bytef *scan = s->window + s->strstart; /* current string */
|
1434
1481
|
register Bytef *match; /* matched string */
|
1435
1482
|
register int len; /* length of current match */
|
@@ -1490,11 +1537,7 @@ local uInt longest_match(s, cur_match)
|
|
1490
1537
|
/* ===========================================================================
|
1491
1538
|
* Check that the match at match_start is indeed a match.
|
1492
1539
|
*/
|
1493
|
-
local void check_match(s, start, match, length)
|
1494
|
-
deflate_state *s;
|
1495
|
-
IPos start, match;
|
1496
|
-
int length;
|
1497
|
-
{
|
1540
|
+
local void check_match(deflate_state *s, IPos start, IPos match, int length) {
|
1498
1541
|
/* check that the match is indeed a match */
|
1499
1542
|
if (zmemcmp(s->window + match,
|
1500
1543
|
s->window + start, length) != EQUAL) {
|
@@ -1514,137 +1557,6 @@ local void check_match(s, start, match, length)
|
|
1514
1557
|
# define check_match(s, start, match, length)
|
1515
1558
|
#endif /* ZLIB_DEBUG */
|
1516
1559
|
|
1517
|
-
/* ===========================================================================
|
1518
|
-
* Fill the window when the lookahead becomes insufficient.
|
1519
|
-
* Updates strstart and lookahead.
|
1520
|
-
*
|
1521
|
-
* IN assertion: lookahead < MIN_LOOKAHEAD
|
1522
|
-
* OUT assertions: strstart <= window_size-MIN_LOOKAHEAD
|
1523
|
-
* At least one byte has been read, or avail_in == 0; reads are
|
1524
|
-
* performed for at least two bytes (required for the zip translate_eol
|
1525
|
-
* option -- not supported here).
|
1526
|
-
*/
|
1527
|
-
local void fill_window(s)
|
1528
|
-
deflate_state *s;
|
1529
|
-
{
|
1530
|
-
unsigned n;
|
1531
|
-
unsigned more; /* Amount of free space at the end of the window. */
|
1532
|
-
uInt wsize = s->w_size;
|
1533
|
-
|
1534
|
-
Assert(s->lookahead < MIN_LOOKAHEAD, "already enough lookahead");
|
1535
|
-
|
1536
|
-
do {
|
1537
|
-
more = (unsigned)(s->window_size -(ulg)s->lookahead -(ulg)s->strstart);
|
1538
|
-
|
1539
|
-
/* Deal with !@#$% 64K limit: */
|
1540
|
-
if (sizeof(int) <= 2) {
|
1541
|
-
if (more == 0 && s->strstart == 0 && s->lookahead == 0) {
|
1542
|
-
more = wsize;
|
1543
|
-
|
1544
|
-
} else if (more == (unsigned)(-1)) {
|
1545
|
-
/* Very unlikely, but possible on 16 bit machine if
|
1546
|
-
* strstart == 0 && lookahead == 1 (input done a byte at time)
|
1547
|
-
*/
|
1548
|
-
more--;
|
1549
|
-
}
|
1550
|
-
}
|
1551
|
-
|
1552
|
-
/* If the window is almost full and there is insufficient lookahead,
|
1553
|
-
* move the upper half to the lower one to make room in the upper half.
|
1554
|
-
*/
|
1555
|
-
if (s->strstart >= wsize + MAX_DIST(s)) {
|
1556
|
-
|
1557
|
-
zmemcpy(s->window, s->window + wsize, (unsigned)wsize - more);
|
1558
|
-
s->match_start -= wsize;
|
1559
|
-
s->strstart -= wsize; /* we now have strstart >= MAX_DIST */
|
1560
|
-
s->block_start -= (long) wsize;
|
1561
|
-
if (s->insert > s->strstart)
|
1562
|
-
s->insert = s->strstart;
|
1563
|
-
slide_hash(s);
|
1564
|
-
more += wsize;
|
1565
|
-
}
|
1566
|
-
if (s->strm->avail_in == 0) break;
|
1567
|
-
|
1568
|
-
/* If there was no sliding:
|
1569
|
-
* strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&
|
1570
|
-
* more == window_size - lookahead - strstart
|
1571
|
-
* => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)
|
1572
|
-
* => more >= window_size - 2*WSIZE + 2
|
1573
|
-
* In the BIG_MEM or MMAP case (not yet supported),
|
1574
|
-
* window_size == input_size + MIN_LOOKAHEAD &&
|
1575
|
-
* strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.
|
1576
|
-
* Otherwise, window_size == 2*WSIZE so more >= 2.
|
1577
|
-
* If there was sliding, more >= WSIZE. So in all cases, more >= 2.
|
1578
|
-
*/
|
1579
|
-
Assert(more >= 2, "more < 2");
|
1580
|
-
|
1581
|
-
n = read_buf(s->strm, s->window + s->strstart + s->lookahead, more);
|
1582
|
-
s->lookahead += n;
|
1583
|
-
|
1584
|
-
/* Initialize the hash value now that we have some input: */
|
1585
|
-
if (s->lookahead + s->insert >= MIN_MATCH) {
|
1586
|
-
uInt str = s->strstart - s->insert;
|
1587
|
-
s->ins_h = s->window[str];
|
1588
|
-
UPDATE_HASH(s, s->ins_h, s->window[str + 1]);
|
1589
|
-
#if MIN_MATCH != 3
|
1590
|
-
Call UPDATE_HASH() MIN_MATCH-3 more times
|
1591
|
-
#endif
|
1592
|
-
while (s->insert) {
|
1593
|
-
UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]);
|
1594
|
-
#ifndef FASTEST
|
1595
|
-
s->prev[str & s->w_mask] = s->head[s->ins_h];
|
1596
|
-
#endif
|
1597
|
-
s->head[s->ins_h] = (Pos)str;
|
1598
|
-
str++;
|
1599
|
-
s->insert--;
|
1600
|
-
if (s->lookahead + s->insert < MIN_MATCH)
|
1601
|
-
break;
|
1602
|
-
}
|
1603
|
-
}
|
1604
|
-
/* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,
|
1605
|
-
* but this is not important since only literal bytes will be emitted.
|
1606
|
-
*/
|
1607
|
-
|
1608
|
-
} while (s->lookahead < MIN_LOOKAHEAD && s->strm->avail_in != 0);
|
1609
|
-
|
1610
|
-
/* If the WIN_INIT bytes after the end of the current data have never been
|
1611
|
-
* written, then zero those bytes in order to avoid memory check reports of
|
1612
|
-
* the use of uninitialized (or uninitialised as Julian writes) bytes by
|
1613
|
-
* the longest match routines. Update the high water mark for the next
|
1614
|
-
* time through here. WIN_INIT is set to MAX_MATCH since the longest match
|
1615
|
-
* routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.
|
1616
|
-
*/
|
1617
|
-
if (s->high_water < s->window_size) {
|
1618
|
-
ulg curr = s->strstart + (ulg)(s->lookahead);
|
1619
|
-
ulg init;
|
1620
|
-
|
1621
|
-
if (s->high_water < curr) {
|
1622
|
-
/* Previous high water mark below current data -- zero WIN_INIT
|
1623
|
-
* bytes or up to end of window, whichever is less.
|
1624
|
-
*/
|
1625
|
-
init = s->window_size - curr;
|
1626
|
-
if (init > WIN_INIT)
|
1627
|
-
init = WIN_INIT;
|
1628
|
-
zmemzero(s->window + curr, (unsigned)init);
|
1629
|
-
s->high_water = curr + init;
|
1630
|
-
}
|
1631
|
-
else if (s->high_water < (ulg)curr + WIN_INIT) {
|
1632
|
-
/* High water mark at or above current data, but below current data
|
1633
|
-
* plus WIN_INIT -- zero out to current data plus WIN_INIT, or up
|
1634
|
-
* to end of window, whichever is less.
|
1635
|
-
*/
|
1636
|
-
init = (ulg)curr + WIN_INIT - s->high_water;
|
1637
|
-
if (init > s->window_size - s->high_water)
|
1638
|
-
init = s->window_size - s->high_water;
|
1639
|
-
zmemzero(s->window + s->high_water, (unsigned)init);
|
1640
|
-
s->high_water += init;
|
1641
|
-
}
|
1642
|
-
}
|
1643
|
-
|
1644
|
-
Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,
|
1645
|
-
"not enough room for search");
|
1646
|
-
}
|
1647
|
-
|
1648
1560
|
/* ===========================================================================
|
1649
1561
|
* Flush the current block, with given end-of-file flag.
|
1650
1562
|
* IN assertion: strstart is set to the end of the current match.
|
@@ -1687,10 +1599,7 @@ local void fill_window(s)
|
|
1687
1599
|
* copied. It is most efficient with large input and output buffers, which
|
1688
1600
|
* maximizes the opportunities to have a single copy from next_in to next_out.
|
1689
1601
|
*/
|
1690
|
-
local block_state deflate_stored(s, flush)
|
1691
|
-
deflate_state *s;
|
1692
|
-
int flush;
|
1693
|
-
{
|
1602
|
+
local block_state deflate_stored(deflate_state *s, int flush) {
|
1694
1603
|
/* Smallest worthy block size when not flushing or finishing. By default
|
1695
1604
|
* this is 32K. This can be as small as 507 bytes for memLevel == 1. For
|
1696
1605
|
* large input and output buffers, the stored block size will be larger.
|
@@ -1874,10 +1783,7 @@ local block_state deflate_stored(s, flush)
|
|
1874
1783
|
* new strings in the dictionary only for unmatched strings or for short
|
1875
1784
|
* matches. It is used only for the fast compression options.
|
1876
1785
|
*/
|
1877
|
-
local block_state deflate_fast(s, flush)
|
1878
|
-
deflate_state *s;
|
1879
|
-
int flush;
|
1880
|
-
{
|
1786
|
+
local block_state deflate_fast(deflate_state *s, int flush) {
|
1881
1787
|
IPos hash_head; /* head of the hash chain */
|
1882
1788
|
int bflush; /* set if current block must be flushed */
|
1883
1789
|
|
@@ -1976,10 +1882,7 @@ local block_state deflate_fast(s, flush)
|
|
1976
1882
|
* evaluation for matches: a match is finally adopted only if there is
|
1977
1883
|
* no better match at the next window position.
|
1978
1884
|
*/
|
1979
|
-
local block_state deflate_slow(s, flush)
|
1980
|
-
deflate_state *s;
|
1981
|
-
int flush;
|
1982
|
-
{
|
1885
|
+
local block_state deflate_slow(deflate_state *s, int flush) {
|
1983
1886
|
IPos hash_head; /* head of hash chain */
|
1984
1887
|
int bflush; /* set if current block must be flushed */
|
1985
1888
|
|
@@ -2107,10 +2010,7 @@ local block_state deflate_slow(s, flush)
|
|
2107
2010
|
* one. Do not maintain a hash table. (It will be regenerated if this run of
|
2108
2011
|
* deflate switches away from Z_RLE.)
|
2109
2012
|
*/
|
2110
|
-
local block_state deflate_rle(s, flush)
|
2111
|
-
deflate_state *s;
|
2112
|
-
int flush;
|
2113
|
-
{
|
2013
|
+
local block_state deflate_rle(deflate_state *s, int flush) {
|
2114
2014
|
int bflush; /* set if current block must be flushed */
|
2115
2015
|
uInt prev; /* byte at distance one to match */
|
2116
2016
|
Bytef *scan, *strend; /* scan goes up to strend for length of run */
|
@@ -2181,10 +2081,7 @@ local block_state deflate_rle(s, flush)
|
|
2181
2081
|
* For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table.
|
2182
2082
|
* (It will be regenerated if this run of deflate switches away from Huffman.)
|
2183
2083
|
*/
|
2184
|
-
local block_state deflate_huff(s, flush)
|
2185
|
-
deflate_state *s;
|
2186
|
-
int flush;
|
2187
|
-
{
|
2084
|
+
local block_state deflate_huff(deflate_state *s, int flush) {
|
2188
2085
|
int bflush; /* set if current block must be flushed */
|
2189
2086
|
|
2190
2087
|
for (;;) {
|