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.
Files changed (279) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +208 -165
  3. data/include/grpc/event_engine/event_engine.h +59 -12
  4. data/include/grpc/event_engine/internal/memory_allocator_impl.h +6 -0
  5. data/include/grpc/event_engine/internal/slice_cast.h +12 -0
  6. data/include/grpc/event_engine/memory_allocator.h +3 -1
  7. data/include/grpc/event_engine/slice.h +5 -0
  8. data/include/grpc/grpc_security.h +22 -1
  9. data/include/grpc/impl/call.h +29 -0
  10. data/include/grpc/impl/channel_arg_names.h +12 -1
  11. data/include/grpc/impl/slice_type.h +1 -1
  12. data/include/grpc/module.modulemap +1 -0
  13. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +54 -7
  14. data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +20 -6
  15. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +10 -13
  16. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +18 -10
  17. data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +326 -0
  18. data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.h +143 -0
  19. data/src/core/ext/filters/client_channel/backend_metric.cc +2 -2
  20. data/src/core/ext/filters/client_channel/client_channel.cc +32 -6
  21. data/src/core/ext/filters/client_channel/client_channel_internal.h +2 -0
  22. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +1 -1
  23. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +54 -21
  24. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +3 -2
  25. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +2 -1
  26. data/src/core/ext/filters/client_channel/lb_policy/endpoint_list.cc +12 -15
  27. data/src/core/ext/filters/client_channel/lb_policy/endpoint_list.h +8 -5
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +139 -92
  29. data/src/core/ext/filters/client_channel/lb_policy/health_check_client.cc +9 -4
  30. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +9 -4
  31. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +10 -11
  32. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +94 -93
  33. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +5 -3
  34. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +12 -15
  35. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +38 -16
  36. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +25 -28
  37. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +10 -10
  38. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +37 -35
  39. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +11 -9
  40. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +504 -461
  41. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +232 -122
  42. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +8 -6
  43. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +642 -251
  44. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.h +2 -6
  45. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +7 -8
  46. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +2 -1
  47. data/src/core/ext/filters/client_channel/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +3 -1
  48. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +2 -2
  49. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +2 -2
  50. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +6 -8
  51. data/src/core/ext/filters/client_channel/resolver/xds/xds_dependency_manager.cc +1031 -0
  52. data/src/core/ext/filters/client_channel/resolver/xds/xds_dependency_manager.h +277 -0
  53. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +128 -270
  54. data/src/core/ext/filters/client_channel/resolver/xds/{xds_resolver.h → xds_resolver_attributes.h} +5 -4
  55. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver_trace.cc +25 -0
  56. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver_trace.h +30 -0
  57. data/src/core/ext/filters/client_channel/retry_filter.cc +1 -0
  58. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +35 -17
  59. data/src/core/ext/filters/deadline/deadline_filter.cc +12 -0
  60. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +17 -13
  61. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +13 -4
  62. data/src/core/ext/filters/http/client/http_client_filter.cc +23 -32
  63. data/src/core/ext/filters/http/client/http_client_filter.h +10 -5
  64. data/src/core/ext/filters/http/client_authority_filter.cc +14 -14
  65. data/src/core/ext/filters/http/client_authority_filter.h +12 -4
  66. data/src/core/ext/filters/http/http_filters_plugin.cc +42 -20
  67. data/src/core/ext/filters/http/message_compress/compression_filter.cc +55 -80
  68. data/src/core/ext/filters/http/message_compress/compression_filter.h +54 -12
  69. data/src/core/ext/filters/http/message_compress/legacy_compression_filter.cc +325 -0
  70. data/src/core/ext/filters/http/message_compress/legacy_compression_filter.h +139 -0
  71. data/src/core/ext/filters/http/server/http_server_filter.cc +41 -41
  72. data/src/core/ext/filters/http/server/http_server_filter.h +11 -4
  73. data/src/core/ext/filters/message_size/message_size_filter.cc +56 -76
  74. data/src/core/ext/filters/message_size/message_size_filter.h +35 -23
  75. data/src/core/ext/filters/rbac/rbac_filter.cc +15 -11
  76. data/src/core/ext/filters/rbac/rbac_filter.h +11 -4
  77. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +25 -13
  78. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +47 -50
  79. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +21 -4
  80. data/src/core/ext/transport/chttp2/alpn/alpn.cc +1 -1
  81. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +2 -2
  82. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +11 -2
  83. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +68 -145
  84. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +3 -3
  85. data/src/core/ext/transport/chttp2/transport/flow_control.cc +21 -82
  86. data/src/core/ext/transport/chttp2/transport/flow_control.h +1 -8
  87. data/src/core/ext/transport/chttp2/transport/frame.cc +506 -0
  88. data/src/core/ext/transport/chttp2/transport/frame.h +214 -0
  89. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +1 -1
  90. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +33 -79
  91. data/src/core/ext/transport/chttp2/transport/frame_settings.h +4 -7
  92. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +27 -36
  93. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +0 -2
  94. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +122 -32
  95. data/src/core/ext/transport/chttp2/transport/http2_settings.h +142 -37
  96. data/src/core/ext/transport/chttp2/transport/internal.h +1 -22
  97. data/src/core/ext/transport/chttp2/transport/parsing.cc +23 -37
  98. data/src/core/ext/transport/chttp2/transport/writing.cc +26 -58
  99. data/src/core/ext/transport/inproc/inproc_transport.cc +172 -13
  100. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb.h +712 -0
  101. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.c +151 -0
  102. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.h +33 -0
  103. data/src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.c +133 -0
  104. data/src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.h +50 -0
  105. data/src/core/ext/xds/certificate_provider_store.cc +2 -1
  106. data/src/core/ext/xds/certificate_provider_store.h +0 -5
  107. data/src/core/ext/xds/xds_api.cc +31 -18
  108. data/src/core/ext/xds/xds_api.h +2 -2
  109. data/src/core/ext/xds/xds_bootstrap.h +3 -0
  110. data/src/core/ext/xds/xds_certificate_provider.cc +88 -287
  111. data/src/core/ext/xds/xds_certificate_provider.h +44 -111
  112. data/src/core/ext/xds/xds_client.cc +420 -414
  113. data/src/core/ext/xds/xds_client.h +31 -22
  114. data/src/core/ext/xds/xds_client_grpc.cc +3 -1
  115. data/src/core/ext/xds/xds_cluster.cc +104 -11
  116. data/src/core/ext/xds/xds_cluster.h +9 -1
  117. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +9 -5
  118. data/src/core/ext/xds/xds_common_types.cc +14 -10
  119. data/src/core/ext/xds/xds_endpoint.cc +9 -4
  120. data/src/core/ext/xds/xds_endpoint.h +5 -1
  121. data/src/core/ext/xds/xds_health_status.cc +12 -2
  122. data/src/core/ext/xds/xds_health_status.h +4 -2
  123. data/src/core/ext/xds/xds_http_rbac_filter.cc +5 -3
  124. data/src/core/ext/xds/xds_listener.cc +14 -8
  125. data/src/core/ext/xds/xds_resource_type_impl.h +6 -4
  126. data/src/core/ext/xds/xds_route_config.cc +34 -22
  127. data/src/core/ext/xds/xds_route_config.h +1 -0
  128. data/src/core/ext/xds/xds_server_config_fetcher.cc +61 -57
  129. data/src/core/ext/xds/xds_transport.h +3 -0
  130. data/src/core/ext/xds/xds_transport_grpc.cc +47 -50
  131. data/src/core/ext/xds/xds_transport_grpc.h +4 -0
  132. data/src/core/lib/channel/call_tracer.cc +12 -0
  133. data/src/core/lib/channel/call_tracer.h +17 -3
  134. data/src/core/lib/channel/channel_args.cc +24 -14
  135. data/src/core/lib/channel/channel_args.h +74 -13
  136. data/src/core/lib/channel/channel_stack.cc +27 -0
  137. data/src/core/lib/channel/channel_stack.h +10 -10
  138. data/src/core/lib/channel/connected_channel.cc +64 -18
  139. data/src/core/lib/channel/promise_based_filter.h +1041 -1
  140. data/src/core/lib/channel/server_call_tracer_filter.cc +43 -35
  141. data/src/core/lib/compression/compression_internal.cc +0 -3
  142. data/src/core/lib/event_engine/ares_resolver.cc +35 -14
  143. data/src/core/lib/event_engine/ares_resolver.h +9 -10
  144. data/src/core/lib/event_engine/cf_engine/dns_service_resolver.cc +8 -1
  145. data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc +132 -0
  146. data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.h +61 -0
  147. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +52 -36
  148. data/src/core/lib/event_engine/posix_engine/posix_engine.h +4 -9
  149. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +11 -3
  150. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +9 -2
  151. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +7 -0
  152. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +17 -27
  153. data/src/core/lib/event_engine/posix_engine/timer_manager.h +0 -3
  154. data/src/core/lib/event_engine/ref_counted_dns_resolver_interface.h +55 -0
  155. data/src/core/lib/event_engine/windows/native_windows_dns_resolver.cc +114 -0
  156. data/src/core/lib/event_engine/windows/native_windows_dns_resolver.h +51 -0
  157. data/src/core/lib/event_engine/windows/windows_engine.cc +7 -7
  158. data/src/core/lib/experiments/config.cc +13 -0
  159. data/src/core/lib/experiments/config.h +3 -0
  160. data/src/core/lib/experiments/experiments.cc +245 -366
  161. data/src/core/lib/experiments/experiments.h +50 -156
  162. data/src/core/lib/gprpp/debug_location.h +13 -0
  163. data/src/core/lib/gprpp/dual_ref_counted.h +36 -7
  164. data/src/core/lib/gprpp/orphanable.h +27 -0
  165. data/src/core/lib/gprpp/ref_counted.h +63 -22
  166. data/src/core/lib/gprpp/ref_counted_ptr.h +70 -27
  167. data/src/core/lib/gprpp/ref_counted_string.h +13 -0
  168. data/src/core/lib/gprpp/status_helper.cc +1 -2
  169. data/src/core/lib/iomgr/combiner.cc +15 -51
  170. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +31 -0
  171. data/src/core/lib/iomgr/event_engine_shims/endpoint.h +16 -0
  172. data/src/core/lib/iomgr/tcp_client_posix.cc +4 -3
  173. data/src/core/lib/load_balancing/lb_policy.h +1 -1
  174. data/src/core/lib/promise/activity.cc +17 -2
  175. data/src/core/lib/promise/activity.h +5 -4
  176. data/src/core/lib/promise/all_ok.h +80 -0
  177. data/src/core/lib/promise/detail/join_state.h +2077 -0
  178. data/src/core/lib/promise/detail/promise_factory.h +1 -0
  179. data/src/core/lib/promise/detail/promise_like.h +8 -1
  180. data/src/core/lib/promise/detail/seq_state.h +3458 -150
  181. data/src/core/lib/promise/detail/status.h +42 -5
  182. data/src/core/lib/promise/for_each.h +13 -1
  183. data/src/core/lib/promise/if.h +4 -0
  184. data/src/core/lib/promise/latch.h +6 -3
  185. data/src/core/lib/promise/party.cc +33 -31
  186. data/src/core/lib/promise/party.h +142 -6
  187. data/src/core/lib/promise/poll.h +39 -13
  188. data/src/core/lib/promise/promise.h +4 -0
  189. data/src/core/lib/promise/seq.h +107 -7
  190. data/src/core/lib/promise/status_flag.h +196 -0
  191. data/src/core/lib/promise/try_join.h +132 -0
  192. data/src/core/lib/promise/try_seq.h +132 -10
  193. data/src/core/lib/resolver/endpoint_addresses.cc +0 -1
  194. data/src/core/lib/resolver/endpoint_addresses.h +48 -0
  195. data/src/core/lib/resource_quota/arena.h +2 -2
  196. data/src/core/lib/resource_quota/memory_quota.cc +57 -8
  197. data/src/core/lib/resource_quota/memory_quota.h +6 -0
  198. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +14 -11
  199. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +14 -5
  200. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +4 -0
  201. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +4 -0
  202. data/src/core/lib/security/credentials/external/external_account_credentials.cc +28 -20
  203. data/src/core/lib/security/credentials/external/external_account_credentials.h +4 -0
  204. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +4 -0
  205. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +4 -0
  206. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +4 -0
  207. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +4 -0
  208. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +2 -1
  209. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +0 -3
  210. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +12 -0
  211. data/src/core/lib/security/credentials/tls/grpc_tls_crl_provider.cc +22 -5
  212. data/src/core/lib/security/credentials/tls/grpc_tls_crl_provider.h +1 -5
  213. data/src/core/lib/security/credentials/tls/tls_credentials.cc +16 -0
  214. data/src/core/lib/security/credentials/xds/xds_credentials.cc +21 -28
  215. data/src/core/lib/security/credentials/xds/xds_credentials.h +2 -4
  216. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +4 -3
  217. data/src/core/lib/security/transport/auth_filters.h +71 -4
  218. data/src/core/lib/security/transport/client_auth_filter.cc +2 -4
  219. data/src/core/lib/security/transport/legacy_server_auth_filter.cc +244 -0
  220. data/src/core/lib/security/transport/server_auth_filter.cc +70 -90
  221. data/src/core/lib/slice/slice_buffer.h +3 -0
  222. data/src/core/lib/surface/builtins.cc +1 -1
  223. data/src/core/lib/surface/call.cc +683 -196
  224. data/src/core/lib/surface/call.h +26 -13
  225. data/src/core/lib/surface/call_trace.cc +42 -1
  226. data/src/core/lib/surface/channel.cc +0 -1
  227. data/src/core/lib/surface/channel.h +0 -6
  228. data/src/core/lib/surface/channel_init.h +26 -0
  229. data/src/core/lib/surface/init.cc +14 -8
  230. data/src/core/lib/surface/server.cc +256 -237
  231. data/src/core/lib/surface/server.h +26 -54
  232. data/src/core/lib/surface/version.cc +2 -2
  233. data/src/core/lib/surface/wait_for_cq_end_op.h +94 -0
  234. data/src/core/lib/transport/call_final_info.cc +38 -0
  235. data/src/core/lib/transport/call_final_info.h +54 -0
  236. data/src/core/lib/transport/connectivity_state.cc +3 -2
  237. data/src/core/lib/transport/connectivity_state.h +4 -0
  238. data/src/core/lib/transport/metadata_batch.h +4 -4
  239. data/src/core/lib/transport/transport.cc +70 -19
  240. data/src/core/lib/transport/transport.h +395 -25
  241. data/src/core/plugin_registry/grpc_plugin_registry.cc +3 -0
  242. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +0 -3
  243. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -1
  244. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +1 -1
  245. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +1 -1
  246. data/src/core/tsi/ssl_transport_security.cc +65 -43
  247. data/src/ruby/ext/grpc/rb_channel_args.c +3 -1
  248. data/src/ruby/ext/grpc/rb_grpc.c +0 -1
  249. data/src/ruby/ext/grpc/rb_grpc.h +0 -2
  250. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -0
  251. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +6 -0
  252. data/src/ruby/lib/grpc/version.rb +1 -1
  253. data/third_party/upb/upb/reflection/def_pool.h +2 -2
  254. data/third_party/zlib/adler32.c +5 -27
  255. data/third_party/zlib/compress.c +5 -16
  256. data/third_party/zlib/crc32.c +86 -162
  257. data/third_party/zlib/deflate.c +233 -336
  258. data/third_party/zlib/deflate.h +8 -8
  259. data/third_party/zlib/gzguts.h +11 -12
  260. data/third_party/zlib/infback.c +7 -23
  261. data/third_party/zlib/inffast.c +1 -4
  262. data/third_party/zlib/inffast.h +1 -1
  263. data/third_party/zlib/inflate.c +30 -99
  264. data/third_party/zlib/inftrees.c +6 -11
  265. data/third_party/zlib/inftrees.h +3 -3
  266. data/third_party/zlib/trees.c +224 -302
  267. data/third_party/zlib/uncompr.c +4 -12
  268. data/third_party/zlib/zconf.h +6 -2
  269. data/third_party/zlib/zlib.h +191 -188
  270. data/third_party/zlib/zutil.c +16 -44
  271. data/third_party/zlib/zutil.h +10 -10
  272. metadata +35 -13
  273. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +0 -1173
  274. data/src/core/lib/event_engine/memory_allocator.cc +0 -74
  275. data/src/core/lib/transport/pid_controller.cc +0 -51
  276. data/src/core/lib/transport/pid_controller.h +0 -116
  277. data/third_party/upb/upb/collections/array.h +0 -17
  278. data/third_party/upb/upb/collections/map.h +0 -17
  279. data/third_party/upb/upb/upb.hpp +0 -18
@@ -1,5 +1,5 @@
1
1
  /* deflate.c -- compress data using the deflation algorithm
2
- * Copyright (C) 1995-2022 Jean-loup Gailly and Mark Adler
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.2.13 Copyright 1995-2022 Jean-loup Gailly and Mark Adler ";
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) OF((deflate_state *s, int flush));
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 int deflateStateCheck OF((z_streamp strm));
77
- local void slide_hash OF((deflate_state *s));
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 OF((deflate_state *s, int flush));
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
- local void slide_hash(s)
199
- deflate_state *s;
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, stream_size)
226
- z_streamp strm;
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, windowBits, memLevel, strategy,
238
- version, stream_size)
239
- z_streamp strm;
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, dictLength)
413
- z_streamp strm;
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, dictLength)
482
- z_streamp strm;
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, nice_length, max_chain)
655
- z_streamp strm;
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) + wraplen;
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 (;;) {