grpc 1.60.2 → 1.61.0.pre2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Makefile +208 -165
- data/include/grpc/event_engine/event_engine.h +59 -12
- data/include/grpc/event_engine/internal/memory_allocator_impl.h +6 -0
- data/include/grpc/event_engine/internal/slice_cast.h +12 -0
- data/include/grpc/event_engine/memory_allocator.h +3 -1
- data/include/grpc/event_engine/slice.h +5 -0
- data/include/grpc/grpc_security.h +22 -1
- data/include/grpc/impl/call.h +29 -0
- data/include/grpc/impl/channel_arg_names.h +12 -1
- data/include/grpc/impl/slice_type.h +1 -1
- data/include/grpc/module.modulemap +1 -0
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +54 -7
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +20 -6
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +10 -13
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +18 -10
- data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +326 -0
- data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.h +143 -0
- data/src/core/ext/filters/client_channel/backend_metric.cc +2 -2
- data/src/core/ext/filters/client_channel/client_channel.cc +32 -6
- data/src/core/ext/filters/client_channel/client_channel_internal.h +2 -0
- data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +54 -21
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +3 -2
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +2 -1
- data/src/core/ext/filters/client_channel/lb_policy/endpoint_list.cc +12 -15
- data/src/core/ext/filters/client_channel/lb_policy/endpoint_list.h +8 -5
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +139 -92
- data/src/core/ext/filters/client_channel/lb_policy/health_check_client.cc +9 -4
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +9 -4
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +10 -11
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +94 -93
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +5 -3
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +12 -15
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +38 -16
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +25 -28
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +10 -10
- data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +37 -35
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +11 -9
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +504 -461
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +232 -122
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +8 -6
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +642 -251
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.h +2 -6
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +7 -8
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +2 -1
- data/src/core/ext/filters/client_channel/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +3 -1
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +2 -2
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +2 -2
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +6 -8
- data/src/core/ext/filters/client_channel/resolver/xds/xds_dependency_manager.cc +1031 -0
- data/src/core/ext/filters/client_channel/resolver/xds/xds_dependency_manager.h +277 -0
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +128 -270
- data/src/core/ext/filters/client_channel/resolver/xds/{xds_resolver.h → xds_resolver_attributes.h} +5 -4
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver_trace.cc +25 -0
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver_trace.h +30 -0
- data/src/core/ext/filters/client_channel/retry_filter.cc +1 -0
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +35 -17
- data/src/core/ext/filters/deadline/deadline_filter.cc +12 -0
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +17 -13
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +13 -4
- data/src/core/ext/filters/http/client/http_client_filter.cc +23 -32
- data/src/core/ext/filters/http/client/http_client_filter.h +10 -5
- data/src/core/ext/filters/http/client_authority_filter.cc +14 -14
- data/src/core/ext/filters/http/client_authority_filter.h +12 -4
- data/src/core/ext/filters/http/http_filters_plugin.cc +42 -20
- data/src/core/ext/filters/http/message_compress/compression_filter.cc +55 -80
- data/src/core/ext/filters/http/message_compress/compression_filter.h +54 -12
- data/src/core/ext/filters/http/message_compress/legacy_compression_filter.cc +325 -0
- data/src/core/ext/filters/http/message_compress/legacy_compression_filter.h +139 -0
- data/src/core/ext/filters/http/server/http_server_filter.cc +41 -41
- data/src/core/ext/filters/http/server/http_server_filter.h +11 -4
- data/src/core/ext/filters/message_size/message_size_filter.cc +56 -76
- data/src/core/ext/filters/message_size/message_size_filter.h +35 -23
- data/src/core/ext/filters/rbac/rbac_filter.cc +15 -11
- data/src/core/ext/filters/rbac/rbac_filter.h +11 -4
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +25 -13
- data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +47 -50
- data/src/core/ext/filters/stateful_session/stateful_session_filter.h +21 -4
- data/src/core/ext/transport/chttp2/alpn/alpn.cc +1 -1
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +2 -2
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +11 -2
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +68 -145
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +3 -3
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +21 -82
- data/src/core/ext/transport/chttp2/transport/flow_control.h +1 -8
- data/src/core/ext/transport/chttp2/transport/frame.cc +506 -0
- data/src/core/ext/transport/chttp2/transport/frame.h +214 -0
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +33 -79
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +4 -7
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +27 -36
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +0 -2
- data/src/core/ext/transport/chttp2/transport/http2_settings.cc +122 -32
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +142 -37
- data/src/core/ext/transport/chttp2/transport/internal.h +1 -22
- data/src/core/ext/transport/chttp2/transport/parsing.cc +23 -37
- data/src/core/ext/transport/chttp2/transport/writing.cc +26 -58
- data/src/core/ext/transport/inproc/inproc_transport.cc +172 -13
- data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb.h +712 -0
- data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.c +151 -0
- data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.h +33 -0
- data/src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.c +133 -0
- data/src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.h +50 -0
- data/src/core/ext/xds/certificate_provider_store.cc +2 -1
- data/src/core/ext/xds/certificate_provider_store.h +0 -5
- data/src/core/ext/xds/xds_api.cc +31 -18
- data/src/core/ext/xds/xds_api.h +2 -2
- data/src/core/ext/xds/xds_bootstrap.h +3 -0
- data/src/core/ext/xds/xds_certificate_provider.cc +88 -287
- data/src/core/ext/xds/xds_certificate_provider.h +44 -111
- data/src/core/ext/xds/xds_client.cc +420 -414
- data/src/core/ext/xds/xds_client.h +31 -22
- data/src/core/ext/xds/xds_client_grpc.cc +3 -1
- data/src/core/ext/xds/xds_cluster.cc +104 -11
- data/src/core/ext/xds/xds_cluster.h +9 -1
- data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +9 -5
- data/src/core/ext/xds/xds_common_types.cc +14 -10
- data/src/core/ext/xds/xds_endpoint.cc +9 -4
- data/src/core/ext/xds/xds_endpoint.h +5 -1
- data/src/core/ext/xds/xds_health_status.cc +12 -2
- data/src/core/ext/xds/xds_health_status.h +4 -2
- data/src/core/ext/xds/xds_http_rbac_filter.cc +5 -3
- data/src/core/ext/xds/xds_listener.cc +14 -8
- data/src/core/ext/xds/xds_resource_type_impl.h +6 -4
- data/src/core/ext/xds/xds_route_config.cc +34 -22
- data/src/core/ext/xds/xds_route_config.h +1 -0
- data/src/core/ext/xds/xds_server_config_fetcher.cc +61 -57
- data/src/core/ext/xds/xds_transport.h +3 -0
- data/src/core/ext/xds/xds_transport_grpc.cc +47 -50
- data/src/core/ext/xds/xds_transport_grpc.h +4 -0
- data/src/core/lib/channel/call_tracer.cc +12 -0
- data/src/core/lib/channel/call_tracer.h +17 -3
- data/src/core/lib/channel/channel_args.cc +24 -14
- data/src/core/lib/channel/channel_args.h +74 -13
- data/src/core/lib/channel/channel_stack.cc +27 -0
- data/src/core/lib/channel/channel_stack.h +10 -10
- data/src/core/lib/channel/connected_channel.cc +64 -18
- data/src/core/lib/channel/promise_based_filter.h +1041 -1
- data/src/core/lib/channel/server_call_tracer_filter.cc +43 -35
- data/src/core/lib/compression/compression_internal.cc +0 -3
- data/src/core/lib/event_engine/ares_resolver.cc +35 -14
- data/src/core/lib/event_engine/ares_resolver.h +9 -10
- data/src/core/lib/event_engine/cf_engine/dns_service_resolver.cc +8 -1
- data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc +132 -0
- data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.h +61 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +52 -36
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +4 -9
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +11 -3
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +9 -2
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +7 -0
- data/src/core/lib/event_engine/posix_engine/timer_manager.cc +17 -27
- data/src/core/lib/event_engine/posix_engine/timer_manager.h +0 -3
- data/src/core/lib/event_engine/ref_counted_dns_resolver_interface.h +55 -0
- data/src/core/lib/event_engine/windows/native_windows_dns_resolver.cc +114 -0
- data/src/core/lib/event_engine/windows/native_windows_dns_resolver.h +51 -0
- data/src/core/lib/event_engine/windows/windows_engine.cc +7 -7
- data/src/core/lib/experiments/config.cc +13 -0
- data/src/core/lib/experiments/config.h +3 -0
- data/src/core/lib/experiments/experiments.cc +245 -366
- data/src/core/lib/experiments/experiments.h +50 -156
- data/src/core/lib/gprpp/debug_location.h +13 -0
- data/src/core/lib/gprpp/dual_ref_counted.h +36 -7
- data/src/core/lib/gprpp/orphanable.h +27 -0
- data/src/core/lib/gprpp/ref_counted.h +63 -22
- data/src/core/lib/gprpp/ref_counted_ptr.h +70 -27
- data/src/core/lib/gprpp/ref_counted_string.h +13 -0
- data/src/core/lib/gprpp/status_helper.cc +1 -2
- data/src/core/lib/iomgr/combiner.cc +15 -51
- data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +31 -0
- data/src/core/lib/iomgr/event_engine_shims/endpoint.h +16 -0
- data/src/core/lib/iomgr/tcp_client_posix.cc +4 -3
- data/src/core/lib/load_balancing/lb_policy.h +1 -1
- data/src/core/lib/promise/activity.cc +17 -2
- data/src/core/lib/promise/activity.h +5 -4
- data/src/core/lib/promise/all_ok.h +80 -0
- data/src/core/lib/promise/detail/join_state.h +2077 -0
- data/src/core/lib/promise/detail/promise_factory.h +1 -0
- data/src/core/lib/promise/detail/promise_like.h +8 -1
- data/src/core/lib/promise/detail/seq_state.h +3458 -150
- data/src/core/lib/promise/detail/status.h +42 -5
- data/src/core/lib/promise/for_each.h +13 -1
- data/src/core/lib/promise/if.h +4 -0
- data/src/core/lib/promise/latch.h +6 -3
- data/src/core/lib/promise/party.cc +33 -31
- data/src/core/lib/promise/party.h +142 -6
- data/src/core/lib/promise/poll.h +39 -13
- data/src/core/lib/promise/promise.h +4 -0
- data/src/core/lib/promise/seq.h +107 -7
- data/src/core/lib/promise/status_flag.h +196 -0
- data/src/core/lib/promise/try_join.h +132 -0
- data/src/core/lib/promise/try_seq.h +132 -10
- data/src/core/lib/resolver/endpoint_addresses.cc +0 -1
- data/src/core/lib/resolver/endpoint_addresses.h +48 -0
- data/src/core/lib/resource_quota/arena.h +2 -2
- data/src/core/lib/resource_quota/memory_quota.cc +57 -8
- data/src/core/lib/resource_quota/memory_quota.h +6 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +14 -11
- data/src/core/lib/security/authorization/grpc_server_authz_filter.h +14 -5
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +4 -0
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +4 -0
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +28 -20
- data/src/core/lib/security/credentials/external/external_account_credentials.h +4 -0
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +4 -0
- data/src/core/lib/security/credentials/external/file_external_account_credentials.h +4 -0
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +4 -0
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +4 -0
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +2 -1
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +0 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +12 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_crl_provider.cc +22 -5
- data/src/core/lib/security/credentials/tls/grpc_tls_crl_provider.h +1 -5
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +16 -0
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +21 -28
- data/src/core/lib/security/credentials/xds/xds_credentials.h +2 -4
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +4 -3
- data/src/core/lib/security/transport/auth_filters.h +71 -4
- data/src/core/lib/security/transport/client_auth_filter.cc +2 -4
- data/src/core/lib/security/transport/legacy_server_auth_filter.cc +244 -0
- data/src/core/lib/security/transport/server_auth_filter.cc +70 -90
- data/src/core/lib/slice/slice_buffer.h +3 -0
- data/src/core/lib/surface/builtins.cc +1 -1
- data/src/core/lib/surface/call.cc +683 -196
- data/src/core/lib/surface/call.h +26 -13
- data/src/core/lib/surface/call_trace.cc +42 -1
- data/src/core/lib/surface/channel.cc +0 -1
- data/src/core/lib/surface/channel.h +0 -6
- data/src/core/lib/surface/channel_init.h +26 -0
- data/src/core/lib/surface/init.cc +14 -8
- data/src/core/lib/surface/server.cc +256 -237
- data/src/core/lib/surface/server.h +26 -54
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/surface/wait_for_cq_end_op.h +94 -0
- data/src/core/lib/transport/call_final_info.cc +38 -0
- data/src/core/lib/transport/call_final_info.h +54 -0
- data/src/core/lib/transport/connectivity_state.cc +3 -2
- data/src/core/lib/transport/connectivity_state.h +4 -0
- data/src/core/lib/transport/metadata_batch.h +4 -4
- data/src/core/lib/transport/transport.cc +70 -19
- data/src/core/lib/transport/transport.h +395 -25
- data/src/core/plugin_registry/grpc_plugin_registry.cc +3 -0
- data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +0 -3
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -1
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +1 -1
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +1 -1
- data/src/core/tsi/ssl_transport_security.cc +65 -43
- data/src/ruby/ext/grpc/rb_channel_args.c +3 -1
- data/src/ruby/ext/grpc/rb_grpc.c +0 -1
- data/src/ruby/ext/grpc/rb_grpc.h +0 -2
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +6 -0
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/third_party/upb/upb/reflection/def_pool.h +2 -2
- data/third_party/zlib/adler32.c +5 -27
- data/third_party/zlib/compress.c +5 -16
- data/third_party/zlib/crc32.c +86 -162
- data/third_party/zlib/deflate.c +233 -336
- data/third_party/zlib/deflate.h +8 -8
- data/third_party/zlib/gzguts.h +11 -12
- data/third_party/zlib/infback.c +7 -23
- data/third_party/zlib/inffast.c +1 -4
- data/third_party/zlib/inffast.h +1 -1
- data/third_party/zlib/inflate.c +30 -99
- data/third_party/zlib/inftrees.c +6 -11
- data/third_party/zlib/inftrees.h +3 -3
- data/third_party/zlib/trees.c +224 -302
- data/third_party/zlib/uncompr.c +4 -12
- data/third_party/zlib/zconf.h +6 -2
- data/third_party/zlib/zlib.h +191 -188
- data/third_party/zlib/zutil.c +16 -44
- data/third_party/zlib/zutil.h +10 -10
- metadata +35 -13
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +0 -1173
- data/src/core/lib/event_engine/memory_allocator.cc +0 -74
- data/src/core/lib/transport/pid_controller.cc +0 -51
- data/src/core/lib/transport/pid_controller.h +0 -116
- data/third_party/upb/upb/collections/array.h +0 -17
- data/third_party/upb/upb/collections/map.h +0 -17
- data/third_party/upb/upb/upb.hpp +0 -18
data/third_party/zlib/crc32.c
CHANGED
@@ -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
|
-
|
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
|
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
|
165
|
-
local void write_table32hi
|
166
|
-
local void write_table64
|
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
|
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,
|
623
|
-
|
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,
|
749
|
-
|
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
|
785
|
-
compiler knows what 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,
|
1073
|
-
|
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
|
}
|