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
@@ -103,19 +103,6 @@
103
103
  # define ARMCRC32
104
104
  #endif
105
105
 
106
- /* Local functions. */
107
- local z_crc_t multmodp OF((z_crc_t a, z_crc_t b));
108
- local z_crc_t x2nmodp OF((z_off64_t n, unsigned k));
109
-
110
- #if defined(W) && (!defined(ARMCRC32) || defined(DYNAMIC_CRC_TABLE))
111
- local z_word_t byte_swap OF((z_word_t word));
112
- #endif
113
-
114
- #if defined(W) && !defined(ARMCRC32)
115
- local z_crc_t crc_word OF((z_word_t data));
116
- local z_word_t crc_word_big OF((z_word_t data));
117
- #endif
118
-
119
106
  #if defined(W) && (!defined(ARMCRC32) || defined(DYNAMIC_CRC_TABLE))
120
107
  /*
121
108
  Swap the bytes in a z_word_t to convert between little and big endian. Any
@@ -123,9 +110,7 @@ local z_crc_t x2nmodp OF((z_off64_t n, unsigned k));
123
110
  instruction, if one is available. This assumes that word_t is either 32 bits
124
111
  or 64 bits.
125
112
  */
126
- local z_word_t byte_swap(word)
127
- z_word_t word;
128
- {
113
+ local z_word_t byte_swap(z_word_t word) {
129
114
  # if W == 8
130
115
  return
131
116
  (word & 0xff00000000000000) >> 56 |
@@ -146,24 +131,77 @@ local z_word_t byte_swap(word)
146
131
  }
147
132
  #endif
148
133
 
134
+ #ifdef DYNAMIC_CRC_TABLE
135
+ /* =========================================================================
136
+ * Table of powers of x for combining CRC-32s, filled in by make_crc_table()
137
+ * below.
138
+ */
139
+ local z_crc_t FAR x2n_table[32];
140
+ #else
141
+ /* =========================================================================
142
+ * Tables for byte-wise and braided CRC-32 calculations, and a table of powers
143
+ * of x for combining CRC-32s, all made by make_crc_table().
144
+ */
145
+ # include "crc32.h"
146
+ #endif
147
+
149
148
  /* CRC polynomial. */
150
149
  #define POLY 0xedb88320 /* p(x) reflected, with x^32 implied */
151
150
 
152
- #ifdef DYNAMIC_CRC_TABLE
151
+ /*
152
+ Return a(x) multiplied by b(x) modulo p(x), where p(x) is the CRC polynomial,
153
+ reflected. For speed, this requires that a not be zero.
154
+ */
155
+ local z_crc_t multmodp(z_crc_t a, z_crc_t b) {
156
+ z_crc_t m, p;
157
+
158
+ m = (z_crc_t)1 << 31;
159
+ p = 0;
160
+ for (;;) {
161
+ if (a & m) {
162
+ p ^= b;
163
+ if ((a & (m - 1)) == 0)
164
+ break;
165
+ }
166
+ m >>= 1;
167
+ b = b & 1 ? (b >> 1) ^ POLY : b >> 1;
168
+ }
169
+ return p;
170
+ }
153
171
 
172
+ /*
173
+ Return x^(n * 2^k) modulo p(x). Requires that x2n_table[] has been
174
+ initialized.
175
+ */
176
+ local z_crc_t x2nmodp(z_off64_t n, unsigned k) {
177
+ z_crc_t p;
178
+
179
+ p = (z_crc_t)1 << 31; /* x^0 == 1 */
180
+ while (n) {
181
+ if (n & 1)
182
+ p = multmodp(x2n_table[k & 31], p);
183
+ n >>= 1;
184
+ k++;
185
+ }
186
+ return p;
187
+ }
188
+
189
+ #ifdef DYNAMIC_CRC_TABLE
190
+ /* =========================================================================
191
+ * Build the tables for byte-wise and braided CRC-32 calculations, and a table
192
+ * of powers of x for combining CRC-32s.
193
+ */
154
194
  local z_crc_t FAR crc_table[256];
155
- local z_crc_t FAR x2n_table[32];
156
- local void make_crc_table OF((void));
157
195
  #ifdef W
158
196
  local z_word_t FAR crc_big_table[256];
159
197
  local z_crc_t FAR crc_braid_table[W][256];
160
198
  local z_word_t FAR crc_braid_big_table[W][256];
161
- local void braid OF((z_crc_t [][256], z_word_t [][256], int, int));
199
+ local void braid(z_crc_t [][256], z_word_t [][256], int, int);
162
200
  #endif
163
201
  #ifdef MAKECRCH
164
- local void write_table OF((FILE *, const z_crc_t FAR *, int));
165
- local void write_table32hi OF((FILE *, const z_word_t FAR *, int));
166
- local void write_table64 OF((FILE *, const z_word_t FAR *, int));
202
+ local void write_table(FILE *, const z_crc_t FAR *, int);
203
+ local void write_table32hi(FILE *, const z_word_t FAR *, int);
204
+ local void write_table64(FILE *, const z_word_t FAR *, int);
167
205
  #endif /* MAKECRCH */
168
206
 
169
207
  /*
@@ -176,7 +214,6 @@ local void make_crc_table OF((void));
176
214
 
177
215
  /* Definition of once functionality. */
178
216
  typedef struct once_s once_t;
179
- local void once OF((once_t *, void (*)(void)));
180
217
 
181
218
  /* Check for the availability of atomics. */
182
219
  #if defined(__STDC__) && __STDC_VERSION__ >= 201112L && \
@@ -196,10 +233,7 @@ struct once_s {
196
233
  invoke once() at the same time. The state must be a once_t initialized with
197
234
  ONCE_INIT.
198
235
  */
199
- local void once(state, init)
200
- once_t *state;
201
- void (*init)(void);
202
- {
236
+ local void once(once_t *state, void (*init)(void)) {
203
237
  if (!atomic_load(&state->done)) {
204
238
  if (atomic_flag_test_and_set(&state->begun))
205
239
  while (!atomic_load(&state->done))
@@ -222,10 +256,7 @@ struct once_s {
222
256
 
223
257
  /* Test and set. Alas, not atomic, but tries to minimize the period of
224
258
  vulnerability. */
225
- local int test_and_set OF((int volatile *));
226
- local int test_and_set(flag)
227
- int volatile *flag;
228
- {
259
+ local int test_and_set(int volatile *flag) {
229
260
  int was;
230
261
 
231
262
  was = *flag;
@@ -234,10 +265,7 @@ local int test_and_set(flag)
234
265
  }
235
266
 
236
267
  /* Run the provided init() function once. This is not thread-safe. */
237
- local void once(state, init)
238
- once_t *state;
239
- void (*init)(void);
240
- {
268
+ local void once(once_t *state, void (*init)(void)) {
241
269
  if (!state->done) {
242
270
  if (test_and_set(&state->begun))
243
271
  while (!state->done)
@@ -279,8 +307,7 @@ local once_t made = ONCE_INIT;
279
307
  combinations of CRC register values and incoming bytes.
280
308
  */
281
309
 
282
- local void make_crc_table()
283
- {
310
+ local void make_crc_table(void) {
284
311
  unsigned i, j, n;
285
312
  z_crc_t p;
286
313
 
@@ -447,11 +474,7 @@ local void make_crc_table()
447
474
  Write the 32-bit values in table[0..k-1] to out, five per line in
448
475
  hexadecimal separated by commas.
449
476
  */
450
- local void write_table(out, table, k)
451
- FILE *out;
452
- const z_crc_t FAR *table;
453
- int k;
454
- {
477
+ local void write_table(FILE *out, const z_crc_t FAR *table, int k) {
455
478
  int n;
456
479
 
457
480
  for (n = 0; n < k; n++)
@@ -464,11 +487,7 @@ local void write_table(out, table, k)
464
487
  Write the high 32-bits of each value in table[0..k-1] to out, five per line
465
488
  in hexadecimal separated by commas.
466
489
  */
467
- local void write_table32hi(out, table, k)
468
- FILE *out;
469
- const z_word_t FAR *table;
470
- int k;
471
- {
490
+ local void write_table32hi(FILE *out, const z_word_t FAR *table, int k) {
472
491
  int n;
473
492
 
474
493
  for (n = 0; n < k; n++)
@@ -484,11 +503,7 @@ int k;
484
503
  bits. If not, then the type cast and format string can be adjusted
485
504
  accordingly.
486
505
  */
487
- local void write_table64(out, table, k)
488
- FILE *out;
489
- const z_word_t FAR *table;
490
- int k;
491
- {
506
+ local void write_table64(FILE *out, const z_word_t FAR *table, int k) {
492
507
  int n;
493
508
 
494
509
  for (n = 0; n < k; n++)
@@ -498,8 +513,7 @@ local void write_table64(out, table, k)
498
513
  }
499
514
 
500
515
  /* Actually do the deed. */
501
- int main()
502
- {
516
+ int main(void) {
503
517
  make_crc_table();
504
518
  return 0;
505
519
  }
@@ -511,12 +525,7 @@ int main()
511
525
  Generate the little and big-endian braid tables for the given n and z_word_t
512
526
  size w. Each array must have room for w blocks of 256 elements.
513
527
  */
514
- local void braid(ltl, big, n, w)
515
- z_crc_t ltl[][256];
516
- z_word_t big[][256];
517
- int n;
518
- int w;
519
- {
528
+ local void braid(z_crc_t ltl[][256], z_word_t big[][256], int n, int w) {
520
529
  int k;
521
530
  z_crc_t i, p, q;
522
531
  for (k = 0; k < w; k++) {
@@ -531,69 +540,13 @@ local void braid(ltl, big, n, w)
531
540
  }
532
541
  #endif
533
542
 
534
- #else /* !DYNAMIC_CRC_TABLE */
535
- /* ========================================================================
536
- * Tables for byte-wise and braided CRC-32 calculations, and a table of powers
537
- * of x for combining CRC-32s, all made by make_crc_table().
538
- */
539
- #include "crc32.h"
540
543
  #endif /* DYNAMIC_CRC_TABLE */
541
544
 
542
- /* ========================================================================
543
- * Routines used for CRC calculation. Some are also required for the table
544
- * generation above.
545
- */
546
-
547
- /*
548
- Return a(x) multiplied by b(x) modulo p(x), where p(x) is the CRC polynomial,
549
- reflected. For speed, this requires that a not be zero.
550
- */
551
- local z_crc_t multmodp(a, b)
552
- z_crc_t a;
553
- z_crc_t b;
554
- {
555
- z_crc_t m, p;
556
-
557
- m = (z_crc_t)1 << 31;
558
- p = 0;
559
- for (;;) {
560
- if (a & m) {
561
- p ^= b;
562
- if ((a & (m - 1)) == 0)
563
- break;
564
- }
565
- m >>= 1;
566
- b = b & 1 ? (b >> 1) ^ POLY : b >> 1;
567
- }
568
- return p;
569
- }
570
-
571
- /*
572
- Return x^(n * 2^k) modulo p(x). Requires that x2n_table[] has been
573
- initialized.
574
- */
575
- local z_crc_t x2nmodp(n, k)
576
- z_off64_t n;
577
- unsigned k;
578
- {
579
- z_crc_t p;
580
-
581
- p = (z_crc_t)1 << 31; /* x^0 == 1 */
582
- while (n) {
583
- if (n & 1)
584
- p = multmodp(x2n_table[k & 31], p);
585
- n >>= 1;
586
- k++;
587
- }
588
- return p;
589
- }
590
-
591
545
  /* =========================================================================
592
546
  * This function can be used by asm versions of crc32(), and to force the
593
547
  * generation of the CRC tables in a threaded application.
594
548
  */
595
- const z_crc_t FAR * ZEXPORT get_crc_table()
596
- {
549
+ const z_crc_t FAR * ZEXPORT get_crc_table(void) {
597
550
  #ifdef DYNAMIC_CRC_TABLE
598
551
  once(&made, make_crc_table);
599
552
  #endif /* DYNAMIC_CRC_TABLE */
@@ -619,11 +572,8 @@ const z_crc_t FAR * ZEXPORT get_crc_table()
619
572
  #define Z_BATCH_ZEROS 0xa10d3d0c /* computed from Z_BATCH = 3990 */
620
573
  #define Z_BATCH_MIN 800 /* fewest words in a final batch */
621
574
 
622
- unsigned long ZEXPORT crc32_z(crc, buf, len)
623
- unsigned long crc;
624
- const unsigned char FAR *buf;
625
- z_size_t len;
626
- {
575
+ unsigned long ZEXPORT crc32_z(unsigned long crc, const unsigned char FAR *buf,
576
+ z_size_t len) {
627
577
  z_crc_t val;
628
578
  z_word_t crc1, crc2;
629
579
  const z_word_t *word;
@@ -723,18 +673,14 @@ unsigned long ZEXPORT crc32_z(crc, buf, len)
723
673
  least-significant byte of the word as the first byte of data, without any pre
724
674
  or post conditioning. This is used to combine the CRCs of each braid.
725
675
  */
726
- local z_crc_t crc_word(data)
727
- z_word_t data;
728
- {
676
+ local z_crc_t crc_word(z_word_t data) {
729
677
  int k;
730
678
  for (k = 0; k < W; k++)
731
679
  data = (data >> 8) ^ crc_table[data & 0xff];
732
680
  return (z_crc_t)data;
733
681
  }
734
682
 
735
- local z_word_t crc_word_big(data)
736
- z_word_t data;
737
- {
683
+ local z_word_t crc_word_big(z_word_t data) {
738
684
  int k;
739
685
  for (k = 0; k < W; k++)
740
686
  data = (data << 8) ^
@@ -745,11 +691,8 @@ local z_word_t crc_word_big(data)
745
691
  #endif
746
692
 
747
693
  /* ========================================================================= */
748
- unsigned long ZEXPORT crc32_z(crc, buf, len)
749
- unsigned long crc;
750
- const unsigned char FAR *buf;
751
- z_size_t len;
752
- {
694
+ unsigned long ZEXPORT crc32_z(unsigned long crc, const unsigned char FAR *buf,
695
+ z_size_t len) {
753
696
  /* Return initial CRC, if requested. */
754
697
  if (buf == Z_NULL) return 0;
755
698
 
@@ -781,8 +724,8 @@ unsigned long ZEXPORT crc32_z(crc, buf, len)
781
724
  words = (z_word_t const *)buf;
782
725
 
783
726
  /* Do endian check at execution time instead of compile time, since ARM
784
- processors can change the endianess at execution time. If the
785
- compiler knows what the endianess will be, it can optimize out the
727
+ processors can change the endianness at execution time. If the
728
+ compiler knows what the endianness will be, it can optimize out the
786
729
  check and the unused branch. */
787
730
  endian = 1;
788
731
  if (*(unsigned char *)&endian) {
@@ -1069,20 +1012,13 @@ unsigned long ZEXPORT crc32_z(crc, buf, len)
1069
1012
  #endif
1070
1013
 
1071
1014
  /* ========================================================================= */
1072
- unsigned long ZEXPORT crc32(crc, buf, len)
1073
- unsigned long crc;
1074
- const unsigned char FAR *buf;
1075
- uInt len;
1076
- {
1015
+ unsigned long ZEXPORT crc32(unsigned long crc, const unsigned char FAR *buf,
1016
+ uInt len) {
1077
1017
  return crc32_z(crc, buf, len);
1078
1018
  }
1079
1019
 
1080
1020
  /* ========================================================================= */
1081
- uLong ZEXPORT crc32_combine64(crc1, crc2, len2)
1082
- uLong crc1;
1083
- uLong crc2;
1084
- z_off64_t len2;
1085
- {
1021
+ uLong ZEXPORT crc32_combine64(uLong crc1, uLong crc2, z_off64_t len2) {
1086
1022
  #ifdef DYNAMIC_CRC_TABLE
1087
1023
  once(&made, make_crc_table);
1088
1024
  #endif /* DYNAMIC_CRC_TABLE */
@@ -1090,18 +1026,12 @@ uLong ZEXPORT crc32_combine64(crc1, crc2, len2)
1090
1026
  }
1091
1027
 
1092
1028
  /* ========================================================================= */
1093
- uLong ZEXPORT crc32_combine(crc1, crc2, len2)
1094
- uLong crc1;
1095
- uLong crc2;
1096
- z_off_t len2;
1097
- {
1029
+ uLong ZEXPORT crc32_combine(uLong crc1, uLong crc2, z_off_t len2) {
1098
1030
  return crc32_combine64(crc1, crc2, (z_off64_t)len2);
1099
1031
  }
1100
1032
 
1101
1033
  /* ========================================================================= */
1102
- uLong ZEXPORT crc32_combine_gen64(len2)
1103
- z_off64_t len2;
1104
- {
1034
+ uLong ZEXPORT crc32_combine_gen64(z_off64_t len2) {
1105
1035
  #ifdef DYNAMIC_CRC_TABLE
1106
1036
  once(&made, make_crc_table);
1107
1037
  #endif /* DYNAMIC_CRC_TABLE */
@@ -1109,17 +1039,11 @@ uLong ZEXPORT crc32_combine_gen64(len2)
1109
1039
  }
1110
1040
 
1111
1041
  /* ========================================================================= */
1112
- uLong ZEXPORT crc32_combine_gen(len2)
1113
- z_off_t len2;
1114
- {
1042
+ uLong ZEXPORT crc32_combine_gen(z_off_t len2) {
1115
1043
  return crc32_combine_gen64((z_off64_t)len2);
1116
1044
  }
1117
1045
 
1118
1046
  /* ========================================================================= */
1119
- uLong ZEXPORT crc32_combine_op(crc1, crc2, op)
1120
- uLong crc1;
1121
- uLong crc2;
1122
- uLong op;
1123
- {
1047
+ uLong ZEXPORT crc32_combine_op(uLong crc1, uLong crc2, uLong op) {
1124
1048
  return multmodp(op, crc1) ^ (crc2 & 0xffffffff);
1125
1049
  }