grpc 1.60.0 → 1.61.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (277) 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 +67 -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/http2_settings.cc +122 -32
  93. data/src/core/ext/transport/chttp2/transport/http2_settings.h +142 -37
  94. data/src/core/ext/transport/chttp2/transport/internal.h +1 -22
  95. data/src/core/ext/transport/chttp2/transport/parsing.cc +23 -37
  96. data/src/core/ext/transport/chttp2/transport/writing.cc +26 -58
  97. data/src/core/ext/transport/inproc/inproc_transport.cc +172 -13
  98. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb.h +712 -0
  99. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.c +151 -0
  100. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.h +33 -0
  101. data/src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.c +133 -0
  102. data/src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.h +50 -0
  103. data/src/core/ext/xds/certificate_provider_store.cc +2 -1
  104. data/src/core/ext/xds/certificate_provider_store.h +0 -5
  105. data/src/core/ext/xds/xds_api.cc +31 -18
  106. data/src/core/ext/xds/xds_api.h +2 -2
  107. data/src/core/ext/xds/xds_bootstrap.h +3 -0
  108. data/src/core/ext/xds/xds_certificate_provider.cc +88 -287
  109. data/src/core/ext/xds/xds_certificate_provider.h +44 -111
  110. data/src/core/ext/xds/xds_client.cc +420 -414
  111. data/src/core/ext/xds/xds_client.h +31 -22
  112. data/src/core/ext/xds/xds_client_grpc.cc +3 -1
  113. data/src/core/ext/xds/xds_cluster.cc +104 -11
  114. data/src/core/ext/xds/xds_cluster.h +9 -1
  115. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +9 -5
  116. data/src/core/ext/xds/xds_common_types.cc +14 -10
  117. data/src/core/ext/xds/xds_endpoint.cc +9 -4
  118. data/src/core/ext/xds/xds_endpoint.h +5 -1
  119. data/src/core/ext/xds/xds_health_status.cc +12 -2
  120. data/src/core/ext/xds/xds_health_status.h +4 -2
  121. data/src/core/ext/xds/xds_http_rbac_filter.cc +5 -3
  122. data/src/core/ext/xds/xds_listener.cc +14 -8
  123. data/src/core/ext/xds/xds_resource_type_impl.h +6 -4
  124. data/src/core/ext/xds/xds_route_config.cc +34 -22
  125. data/src/core/ext/xds/xds_route_config.h +1 -0
  126. data/src/core/ext/xds/xds_server_config_fetcher.cc +61 -57
  127. data/src/core/ext/xds/xds_transport.h +3 -0
  128. data/src/core/ext/xds/xds_transport_grpc.cc +47 -50
  129. data/src/core/ext/xds/xds_transport_grpc.h +4 -0
  130. data/src/core/lib/channel/call_tracer.cc +12 -0
  131. data/src/core/lib/channel/call_tracer.h +17 -3
  132. data/src/core/lib/channel/channel_args.cc +24 -14
  133. data/src/core/lib/channel/channel_args.h +74 -13
  134. data/src/core/lib/channel/channel_stack.cc +27 -0
  135. data/src/core/lib/channel/channel_stack.h +10 -10
  136. data/src/core/lib/channel/connected_channel.cc +64 -18
  137. data/src/core/lib/channel/promise_based_filter.h +1041 -1
  138. data/src/core/lib/channel/server_call_tracer_filter.cc +43 -35
  139. data/src/core/lib/compression/compression_internal.cc +0 -3
  140. data/src/core/lib/event_engine/ares_resolver.cc +35 -14
  141. data/src/core/lib/event_engine/ares_resolver.h +9 -10
  142. data/src/core/lib/event_engine/cf_engine/dns_service_resolver.cc +8 -1
  143. data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc +132 -0
  144. data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.h +61 -0
  145. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +52 -36
  146. data/src/core/lib/event_engine/posix_engine/posix_engine.h +4 -9
  147. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +11 -3
  148. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +9 -2
  149. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +7 -0
  150. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +17 -27
  151. data/src/core/lib/event_engine/posix_engine/timer_manager.h +0 -3
  152. data/src/core/lib/event_engine/ref_counted_dns_resolver_interface.h +55 -0
  153. data/src/core/lib/event_engine/windows/native_windows_dns_resolver.cc +114 -0
  154. data/src/core/lib/event_engine/windows/native_windows_dns_resolver.h +51 -0
  155. data/src/core/lib/event_engine/windows/windows_engine.cc +7 -7
  156. data/src/core/lib/experiments/config.cc +13 -0
  157. data/src/core/lib/experiments/config.h +3 -0
  158. data/src/core/lib/experiments/experiments.cc +245 -366
  159. data/src/core/lib/experiments/experiments.h +50 -156
  160. data/src/core/lib/gprpp/debug_location.h +13 -0
  161. data/src/core/lib/gprpp/dual_ref_counted.h +36 -7
  162. data/src/core/lib/gprpp/orphanable.h +27 -0
  163. data/src/core/lib/gprpp/ref_counted.h +63 -22
  164. data/src/core/lib/gprpp/ref_counted_ptr.h +70 -27
  165. data/src/core/lib/gprpp/ref_counted_string.h +13 -0
  166. data/src/core/lib/gprpp/status_helper.cc +1 -2
  167. data/src/core/lib/iomgr/combiner.cc +15 -51
  168. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +31 -0
  169. data/src/core/lib/iomgr/event_engine_shims/endpoint.h +16 -0
  170. data/src/core/lib/iomgr/tcp_client_posix.cc +4 -3
  171. data/src/core/lib/load_balancing/lb_policy.h +1 -1
  172. data/src/core/lib/promise/activity.cc +17 -2
  173. data/src/core/lib/promise/activity.h +5 -4
  174. data/src/core/lib/promise/all_ok.h +80 -0
  175. data/src/core/lib/promise/detail/join_state.h +2077 -0
  176. data/src/core/lib/promise/detail/promise_factory.h +1 -0
  177. data/src/core/lib/promise/detail/promise_like.h +8 -1
  178. data/src/core/lib/promise/detail/seq_state.h +3458 -150
  179. data/src/core/lib/promise/detail/status.h +42 -5
  180. data/src/core/lib/promise/for_each.h +13 -1
  181. data/src/core/lib/promise/if.h +4 -0
  182. data/src/core/lib/promise/latch.h +6 -3
  183. data/src/core/lib/promise/party.cc +33 -31
  184. data/src/core/lib/promise/party.h +142 -6
  185. data/src/core/lib/promise/poll.h +39 -13
  186. data/src/core/lib/promise/promise.h +4 -0
  187. data/src/core/lib/promise/seq.h +107 -7
  188. data/src/core/lib/promise/status_flag.h +196 -0
  189. data/src/core/lib/promise/try_join.h +132 -0
  190. data/src/core/lib/promise/try_seq.h +132 -10
  191. data/src/core/lib/resolver/endpoint_addresses.cc +0 -1
  192. data/src/core/lib/resolver/endpoint_addresses.h +48 -0
  193. data/src/core/lib/resource_quota/arena.h +2 -2
  194. data/src/core/lib/resource_quota/memory_quota.cc +57 -8
  195. data/src/core/lib/resource_quota/memory_quota.h +6 -0
  196. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +14 -11
  197. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +14 -5
  198. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +4 -0
  199. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +4 -0
  200. data/src/core/lib/security/credentials/external/external_account_credentials.cc +28 -20
  201. data/src/core/lib/security/credentials/external/external_account_credentials.h +4 -0
  202. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +4 -0
  203. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +4 -0
  204. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +4 -0
  205. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +4 -0
  206. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +2 -1
  207. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +0 -3
  208. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +12 -0
  209. data/src/core/lib/security/credentials/tls/grpc_tls_crl_provider.cc +22 -5
  210. data/src/core/lib/security/credentials/tls/grpc_tls_crl_provider.h +1 -5
  211. data/src/core/lib/security/credentials/tls/tls_credentials.cc +16 -0
  212. data/src/core/lib/security/credentials/xds/xds_credentials.cc +21 -28
  213. data/src/core/lib/security/credentials/xds/xds_credentials.h +2 -4
  214. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +4 -3
  215. data/src/core/lib/security/transport/auth_filters.h +71 -4
  216. data/src/core/lib/security/transport/client_auth_filter.cc +2 -4
  217. data/src/core/lib/security/transport/legacy_server_auth_filter.cc +244 -0
  218. data/src/core/lib/security/transport/server_auth_filter.cc +70 -90
  219. data/src/core/lib/slice/slice_buffer.h +3 -0
  220. data/src/core/lib/surface/builtins.cc +1 -1
  221. data/src/core/lib/surface/call.cc +683 -196
  222. data/src/core/lib/surface/call.h +26 -13
  223. data/src/core/lib/surface/call_trace.cc +42 -1
  224. data/src/core/lib/surface/channel.cc +0 -1
  225. data/src/core/lib/surface/channel.h +0 -6
  226. data/src/core/lib/surface/channel_init.h +26 -0
  227. data/src/core/lib/surface/init.cc +14 -8
  228. data/src/core/lib/surface/server.cc +256 -237
  229. data/src/core/lib/surface/server.h +26 -54
  230. data/src/core/lib/surface/version.cc +2 -2
  231. data/src/core/lib/surface/wait_for_cq_end_op.h +94 -0
  232. data/src/core/lib/transport/call_final_info.cc +38 -0
  233. data/src/core/lib/transport/call_final_info.h +54 -0
  234. data/src/core/lib/transport/connectivity_state.cc +3 -2
  235. data/src/core/lib/transport/connectivity_state.h +4 -0
  236. data/src/core/lib/transport/metadata_batch.h +4 -4
  237. data/src/core/lib/transport/transport.cc +70 -19
  238. data/src/core/lib/transport/transport.h +395 -25
  239. data/src/core/plugin_registry/grpc_plugin_registry.cc +3 -0
  240. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +0 -3
  241. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -1
  242. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +1 -1
  243. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +1 -1
  244. data/src/core/tsi/ssl_transport_security.cc +65 -43
  245. data/src/ruby/ext/grpc/rb_channel_args.c +3 -1
  246. data/src/ruby/ext/grpc/rb_grpc.c +0 -1
  247. data/src/ruby/ext/grpc/rb_grpc.h +0 -2
  248. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -0
  249. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +6 -0
  250. data/src/ruby/lib/grpc/version.rb +1 -1
  251. data/third_party/upb/upb/reflection/def_pool.h +2 -2
  252. data/third_party/zlib/adler32.c +5 -27
  253. data/third_party/zlib/compress.c +5 -16
  254. data/third_party/zlib/crc32.c +86 -162
  255. data/third_party/zlib/deflate.c +233 -336
  256. data/third_party/zlib/deflate.h +8 -8
  257. data/third_party/zlib/gzguts.h +11 -12
  258. data/third_party/zlib/infback.c +7 -23
  259. data/third_party/zlib/inffast.c +1 -4
  260. data/third_party/zlib/inffast.h +1 -1
  261. data/third_party/zlib/inflate.c +30 -99
  262. data/third_party/zlib/inftrees.c +6 -11
  263. data/third_party/zlib/inftrees.h +3 -3
  264. data/third_party/zlib/trees.c +224 -302
  265. data/third_party/zlib/uncompr.c +4 -12
  266. data/third_party/zlib/zconf.h +6 -2
  267. data/third_party/zlib/zlib.h +191 -188
  268. data/third_party/zlib/zutil.c +16 -44
  269. data/third_party/zlib/zutil.h +10 -10
  270. metadata +35 -13
  271. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +0 -1173
  272. data/src/core/lib/event_engine/memory_allocator.cc +0 -74
  273. data/src/core/lib/transport/pid_controller.cc +0 -51
  274. data/src/core/lib/transport/pid_controller.h +0 -116
  275. data/third_party/upb/upb/collections/array.h +0 -17
  276. data/third_party/upb/upb/collections/map.h +0 -17
  277. 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 (;;) {