grpc 1.33.0.pre1 → 1.34.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +342 -134
- data/include/grpc/grpc.h +1 -2
- data/include/grpc/grpc_security.h +149 -172
- data/include/grpc/impl/codegen/grpc_types.h +9 -2
- data/include/grpc/impl/codegen/port_platform.h +22 -55
- data/src/core/ext/filters/client_channel/client_channel.cc +11 -34
- data/src/core/ext/filters/client_channel/config_selector.h +2 -3
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +4 -1
- data/src/core/ext/filters/client_channel/health/health_check_client.h +2 -2
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy.cc +5 -1
- data/src/core/ext/filters/client_channel/lb_policy.h +3 -3
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +80 -71
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +3 -1
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +47 -17
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +8 -5
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +3 -3
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +16 -243
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +53 -17
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +809 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +20 -25
- data/src/core/ext/filters/client_channel/resolver.cc +3 -1
- data/src/core/ext/filters/client_channel/resolver.h +4 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +1 -1
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +20 -0
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +66 -7
- data/src/core/ext/filters/client_channel/resolver_registry.cc +4 -4
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +13 -25
- data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +1 -1
- data/src/core/ext/filters/client_channel/resolving_lb_policy.h +2 -2
- data/src/core/ext/filters/client_channel/retry_throttle.h +1 -1
- data/src/core/ext/filters/client_channel/server_address.h +0 -4
- data/src/core/ext/filters/client_channel/service_config.cc +3 -1
- data/src/core/ext/filters/client_channel/service_config.h +1 -1
- data/src/core/ext/filters/client_channel/subchannel.cc +18 -15
- data/src/core/ext/filters/client_channel/subchannel.h +2 -2
- data/src/core/ext/filters/client_channel/subchannel_interface.h +7 -15
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +6 -2
- data/src/core/ext/filters/deadline/deadline_filter.cc +83 -77
- data/src/core/ext/filters/deadline/deadline_filter.h +7 -11
- data/src/core/ext/filters/http/client/http_client_filter.cc +1 -1
- data/src/core/ext/filters/http/server/http_server_filter.cc +3 -3
- data/src/core/ext/filters/max_age/max_age_filter.cc +1 -1
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +1 -1
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +17 -3
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +7 -7
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +4 -24
- data/src/core/ext/transport/chttp2/transport/flow_control.h +2 -2
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +2 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +12 -8
- data/src/core/ext/transport/chttp2/transport/internal.h +0 -1
- data/src/core/ext/transport/chttp2/transport/parsing.cc +2 -1
- data/src/core/ext/transport/chttp2/transport/writing.cc +1 -2
- data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +38 -0
- data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.h +30 -0
- data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +41 -0
- data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +254 -0
- data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.h +105 -0
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +100 -0
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +558 -0
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +145 -0
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +53 -0
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +133 -0
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +127 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +65 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +56 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +266 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +125 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +143 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +55 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +56 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +66 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +263 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.h +100 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +233 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +70 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +56 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +228 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +80 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +46 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +59 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +55 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +110 -0
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.h +50 -0
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +113 -0
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +50 -0
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +146 -0
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.h +55 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +50 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +190 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +55 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +185 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.h +65 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +62 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +97 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +915 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +280 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +71 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +64 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +511 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +115 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +48 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +30 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +166 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +55 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +105 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +249 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +60 -0
- data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.c +72 -0
- data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +60 -0
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +152 -0
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +60 -0
- data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +83 -0
- data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +82 -0
- data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +83 -0
- data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +86 -0
- data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.c +74 -0
- data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +64 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +54 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +53 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +73 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +72 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +81 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +92 -0
- data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.h +65 -0
- data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +95 -0
- data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.h +55 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +34 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.h +30 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +59 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +54 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +47 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +40 -0
- data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.h +30 -0
- data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +61 -0
- data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +38 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +386 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.h +165 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +39 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +37 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +65 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.h +50 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +39 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +66 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.h +75 -0
- data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +42 -0
- data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +70 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +56 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +33 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.h +30 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +49 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +43 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/udpa/core/v1/authority.upbdefs.c +42 -0
- data/src/core/ext/upbdefs-generated/udpa/core/v1/authority.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/udpa/core/v1/collection_entry.upbdefs.c +62 -0
- data/src/core/ext/upbdefs-generated/udpa/core/v1/collection_entry.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/udpa/core/v1/context_params.upbdefs.c +45 -0
- data/src/core/ext/upbdefs-generated/udpa/core/v1/context_params.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource.upbdefs.c +49 -0
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_locator.upbdefs.c +68 -0
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_locator.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_name.upbdefs.c +51 -0
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_name.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +307 -0
- data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.h +145 -0
- data/src/core/ext/xds/certificate_provider_factory.h +7 -5
- data/src/core/ext/xds/certificate_provider_store.cc +84 -0
- data/src/core/ext/xds/certificate_provider_store.h +65 -8
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +119 -0
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +72 -0
- data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.cc +28 -140
- data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.h +6 -4
- data/src/core/ext/xds/xds_api.cc +241 -718
- data/src/core/ext/xds/xds_api.h +50 -9
- data/src/core/ext/xds/xds_bootstrap.cc +172 -25
- data/src/core/ext/xds/xds_bootstrap.h +23 -7
- data/src/core/ext/xds/xds_certificate_provider.cc +240 -0
- data/src/core/ext/xds/xds_certificate_provider.h +74 -0
- data/src/core/ext/xds/xds_client.cc +161 -128
- data/src/core/ext/xds/xds_client.h +12 -11
- data/src/core/ext/xds/xds_client_stats.cc +41 -4
- data/src/core/ext/xds/xds_client_stats.h +2 -2
- data/src/core/lib/channel/channel_args.cc +2 -1
- data/src/core/lib/channel/channel_trace.cc +4 -2
- data/src/core/lib/channel/channelz.h +2 -2
- data/src/core/lib/channel/handshaker.h +2 -2
- data/src/core/lib/compression/compression.cc +8 -4
- data/src/core/lib/compression/compression_internal.cc +10 -5
- data/src/core/lib/compression/compression_internal.h +2 -1
- data/src/core/lib/compression/stream_compression_identity.cc +1 -3
- data/src/core/lib/debug/stats_data.cc +1 -0
- data/src/core/lib/gpr/cpu_iphone.cc +10 -2
- data/src/core/lib/gpr/log_linux.cc +17 -3
- data/src/core/lib/gpr/log_posix.cc +13 -1
- data/src/core/lib/gpr/log_windows.cc +16 -4
- data/src/core/lib/gpr/murmur_hash.cc +1 -1
- data/src/core/lib/gpr/string.cc +1 -1
- data/src/core/lib/gpr/time_precise.cc +3 -2
- data/src/core/lib/gpr/tls.h +4 -0
- data/src/core/lib/gpr/tls_msvc.h +2 -0
- data/src/core/lib/gpr/tls_stdcpp.h +48 -0
- data/src/core/lib/gpr/useful.h +5 -4
- data/src/core/lib/gprpp/dual_ref_counted.h +44 -49
- data/src/core/lib/gprpp/examine_stack.cc +43 -0
- data/src/core/lib/gprpp/examine_stack.h +46 -0
- data/src/core/lib/gprpp/fork.cc +2 -2
- data/src/core/lib/gprpp/manual_constructor.h +1 -1
- data/src/core/lib/gprpp/orphanable.h +4 -8
- data/src/core/lib/gprpp/ref_counted.h +40 -46
- data/src/core/lib/gprpp/ref_counted_ptr.h +9 -11
- data/src/core/lib/{security/authorization/mock_cel/statusor.h → gprpp/stat.h} +13 -25
- data/src/core/lib/gprpp/stat_posix.cc +49 -0
- data/src/core/lib/gprpp/stat_windows.cc +48 -0
- data/src/core/lib/gprpp/thd.h +2 -2
- data/src/core/lib/gprpp/thd_posix.cc +36 -36
- data/src/core/lib/http/parser.cc +46 -25
- data/src/core/lib/iomgr/error.cc +2 -1
- data/src/core/lib/iomgr/ev_epollex_linux.cc +8 -4
- data/src/core/lib/iomgr/exec_ctx.cc +1 -1
- data/src/core/lib/iomgr/executor/mpmcqueue.h +5 -5
- data/src/core/lib/iomgr/executor/threadpool.h +3 -3
- data/src/core/lib/iomgr/parse_address.cc +84 -6
- data/src/core/lib/iomgr/parse_address.h +20 -0
- data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +2 -1
- data/src/core/lib/iomgr/python_util.h +3 -3
- data/src/core/lib/iomgr/resolve_address_posix.cc +1 -5
- data/src/core/lib/iomgr/tcp_posix.cc +3 -2
- data/src/core/lib/iomgr/timer_custom.cc +2 -2
- data/src/core/lib/iomgr/unix_sockets_posix.cc +27 -15
- data/src/core/lib/iomgr/unix_sockets_posix.h +5 -0
- data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +7 -0
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -2
- data/src/core/lib/json/json.h +2 -2
- data/src/core/lib/json/json_reader.cc +8 -4
- data/src/core/lib/json/json_util.h +167 -0
- data/src/core/lib/json/json_writer.cc +2 -1
- data/src/core/lib/security/authorization/mock_cel/cel_expr_builder_factory.h +3 -1
- data/src/core/lib/security/authorization/mock_cel/cel_expression.h +5 -4
- data/src/core/lib/security/authorization/mock_cel/cel_value.h +4 -0
- data/src/core/lib/security/authorization/mock_cel/evaluator_core.h +6 -6
- data/src/core/lib/security/authorization/mock_cel/flat_expr_builder.h +10 -9
- data/src/core/lib/security/context/security_context.h +3 -1
- data/src/core/lib/security/credentials/credentials.cc +1 -1
- data/src/core/lib/security/credentials/credentials.h +3 -3
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +208 -0
- data/src/core/lib/security/credentials/external/aws_request_signer.h +73 -0
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +311 -0
- data/src/core/lib/security/credentials/external/external_account_credentials.h +118 -0
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +136 -0
- data/src/core/lib/security/credentials/external/file_external_account_credentials.h +49 -0
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +211 -0
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +59 -0
- data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +51 -0
- data/src/core/lib/security/credentials/jwt/json_token.cc +5 -2
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +4 -3
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +5 -1
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +2 -2
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +35 -5
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +12 -8
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +78 -0
- data/src/core/lib/security/{certificate_provider.h → credentials/tls/grpc_tls_certificate_provider.h} +32 -18
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +77 -149
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +58 -187
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +16 -12
- data/src/core/lib/security/credentials/tls/tls_credentials.h +2 -2
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +2 -2
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +88 -0
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +70 -0
- data/src/core/lib/security/security_connector/load_system_roots.h +4 -0
- data/src/core/lib/security/security_connector/load_system_roots_linux.h +2 -0
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +2 -2
- data/src/core/lib/security/security_connector/security_connector.cc +1 -1
- data/src/core/lib/security/security_connector/security_connector.h +4 -2
- data/src/core/lib/security/security_connector/ssl_utils.h +4 -2
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +293 -275
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +106 -61
- data/src/core/lib/security/transport/security_handshaker.cc +1 -1
- data/src/core/lib/security/transport/server_auth_filter.cc +2 -1
- data/src/core/lib/security/util/json_util.h +1 -0
- data/src/core/lib/slice/slice.cc +7 -4
- data/src/core/lib/slice/slice_buffer.cc +2 -1
- data/src/core/lib/slice/slice_intern.cc +2 -2
- data/src/core/lib/surface/call.cc +9 -8
- data/src/core/lib/surface/completion_queue.cc +7 -6
- data/src/core/lib/surface/server.cc +4 -2
- data/src/core/lib/surface/server.h +2 -2
- data/src/core/lib/surface/validate_metadata.h +3 -0
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/authority_override.h +2 -0
- data/src/core/lib/transport/bdp_estimator.cc +1 -1
- data/src/core/lib/transport/byte_stream.h +3 -3
- data/src/core/lib/transport/connectivity_state.h +3 -3
- data/src/core/lib/transport/metadata.h +2 -2
- data/src/core/lib/transport/timeout_encoding.cc +4 -4
- data/src/core/lib/transport/transport.cc +5 -3
- data/src/core/lib/transport/transport.h +1 -1
- data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -4
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +4 -3
- data/src/core/tsi/fake_transport_security.cc +1 -0
- data/src/core/tsi/local_transport_security.cc +5 -1
- data/src/core/tsi/local_transport_security.h +6 -7
- data/src/core/tsi/ssl/session_cache/ssl_session.h +3 -0
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -1
- data/src/core/tsi/ssl_transport_security.cc +14 -7
- data/src/core/tsi/ssl_transport_security.h +3 -0
- data/src/core/tsi/transport_security.cc +4 -2
- data/src/ruby/ext/grpc/extconf.rb +1 -1
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +22 -14
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +36 -24
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/third_party/abseil-cpp/absl/algorithm/container.h +59 -22
- data/third_party/abseil-cpp/absl/base/attributes.h +99 -38
- data/third_party/abseil-cpp/absl/base/call_once.h +1 -1
- data/third_party/abseil-cpp/absl/base/casts.h +9 -6
- data/third_party/abseil-cpp/absl/base/config.h +60 -17
- data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +428 -335
- data/third_party/abseil-cpp/absl/base/internal/bits.h +17 -16
- data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +5 -0
- data/third_party/abseil-cpp/absl/base/internal/dynamic_annotations.h +398 -0
- data/third_party/abseil-cpp/absl/base/internal/invoke.h +4 -4
- data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +1 -1
- data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +29 -1
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +2 -2
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +7 -5
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +25 -38
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +19 -25
- data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +8 -0
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +28 -5
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.h +8 -0
- data/third_party/abseil-cpp/absl/base/internal/tsan_mutex_interface.h +3 -1
- data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +2 -2
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +3 -3
- data/third_party/abseil-cpp/absl/base/macros.h +36 -109
- data/third_party/abseil-cpp/absl/base/optimization.h +61 -1
- data/third_party/abseil-cpp/absl/base/options.h +31 -4
- data/third_party/abseil-cpp/absl/base/policy_checks.h +1 -1
- data/third_party/abseil-cpp/absl/base/thread_annotations.h +94 -39
- data/third_party/abseil-cpp/absl/container/fixed_array.h +42 -25
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +2 -1
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +33 -36
- data/third_party/abseil-cpp/absl/container/internal/common.h +6 -2
- data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +33 -8
- data/third_party/abseil-cpp/absl/container/internal/container_memory.h +49 -29
- data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +15 -0
- data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +24 -7
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +2 -1
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +35 -11
- data/third_party/abseil-cpp/absl/container/internal/have_sse.h +10 -9
- data/third_party/abseil-cpp/absl/container/internal/layout.h +7 -5
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +55 -34
- data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +5 -4
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +66 -16
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +4 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +13 -4
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +43 -24
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +12 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +10 -2
- data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +22 -1
- data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +0 -21
- data/third_party/abseil-cpp/absl/debugging/symbolize.cc +12 -1
- data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +101 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +100 -20
- data/third_party/abseil-cpp/absl/functional/bind_front.h +184 -0
- data/third_party/abseil-cpp/absl/functional/function_ref.h +1 -1
- data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +95 -0
- data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +2 -2
- data/third_party/abseil-cpp/absl/hash/hash.h +6 -5
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +73 -65
- data/third_party/abseil-cpp/absl/memory/memory.h +4 -0
- data/third_party/abseil-cpp/absl/meta/type_traits.h +2 -8
- data/third_party/abseil-cpp/absl/numeric/int128.cc +13 -27
- data/third_party/abseil-cpp/absl/numeric/int128.h +16 -15
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +51 -0
- data/third_party/abseil-cpp/absl/status/status.cc +4 -6
- data/third_party/abseil-cpp/absl/status/status.h +502 -113
- data/third_party/abseil-cpp/absl/status/status_payload_printer.cc +5 -10
- data/third_party/abseil-cpp/absl/strings/charconv.cc +2 -2
- data/third_party/abseil-cpp/absl/strings/cord.cc +91 -112
- data/third_party/abseil-cpp/absl/strings/cord.h +360 -205
- data/third_party/abseil-cpp/absl/strings/escaping.cc +9 -9
- data/third_party/abseil-cpp/absl/strings/internal/char_map.h +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h +2 -2
- data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +2 -2
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +45 -23
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +222 -136
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +136 -64
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +14 -21
- data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -14
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +31 -7
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +147 -135
- data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +999 -87
- data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +3 -3
- data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +4 -12
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +8 -6
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +13 -11
- data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +2 -2
- data/third_party/abseil-cpp/absl/strings/str_cat.cc +4 -4
- data/third_party/abseil-cpp/absl/strings/str_cat.h +1 -1
- data/third_party/abseil-cpp/absl/strings/str_format.h +289 -13
- data/third_party/abseil-cpp/absl/strings/str_split.cc +2 -2
- data/third_party/abseil-cpp/absl/strings/str_split.h +1 -0
- data/third_party/abseil-cpp/absl/strings/string_view.h +26 -19
- data/third_party/abseil-cpp/absl/strings/substitute.cc +5 -5
- data/third_party/abseil-cpp/absl/strings/substitute.h +32 -29
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +3 -3
- data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +3 -3
- data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +28 -28
- data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +4 -16
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -1
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +8 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +2 -2
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +75 -64
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +15 -6
- data/third_party/abseil-cpp/absl/time/civil_time.cc +9 -9
- data/third_party/abseil-cpp/absl/time/clock.cc +3 -3
- data/third_party/abseil-cpp/absl/time/duration.cc +90 -59
- data/third_party/abseil-cpp/absl/time/format.cc +43 -36
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +26 -16
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +4 -2
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +136 -29
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +13 -21
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +136 -129
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +4 -5
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +8 -7
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +6 -6
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +2 -1
- data/third_party/abseil-cpp/absl/time/time.h +15 -16
- data/third_party/abseil-cpp/absl/types/internal/variant.h +4 -4
- data/third_party/abseil-cpp/absl/types/optional.h +9 -9
- data/third_party/abseil-cpp/absl/types/span.h +49 -36
- data/third_party/abseil-cpp/absl/utility/utility.h +2 -2
- data/third_party/address_sorting/include/address_sorting/address_sorting.h +2 -0
- data/third_party/boringssl-with-bazel/err_data.c +340 -336
- data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +173 -35
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +46 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +8 -2
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +90 -63
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +60 -60
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +179 -47
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +766 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +10 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +5 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +14 -14
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +24 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +7 -5
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +5 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +4 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/des.h +6 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/opensslconf.h +3 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +202 -134
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +55 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +4 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +31 -23
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +435 -394
- data/third_party/boringssl-with-bazel/src/ssl/bio_ssl.cc +18 -5
- data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +35 -0
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +36 -1
- data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +42 -1
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +67 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +11 -14
- data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +216 -11
- data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +53 -11
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +133 -39
- data/third_party/upb/upb/def.c +2169 -0
- data/third_party/upb/upb/def.h +330 -0
- data/third_party/upb/upb/def.hpp +525 -0
- data/third_party/upb/upb/reflection.c +391 -0
- data/third_party/upb/upb/reflection.h +168 -0
- data/third_party/upb/upb/text_encode.c +398 -0
- data/third_party/upb/upb/text_encode.h +35 -0
- metadata +227 -37
- data/src/core/ext/filters/client_channel/lb_policy/xds/eds_drop.cc +0 -571
- data/third_party/abseil-cpp/absl/base/dynamic_annotations.cc +0 -129
@@ -71,7 +71,7 @@ class time_zone::Impl {
|
|
71
71
|
return zone_->PrevTransition(tp, trans);
|
72
72
|
}
|
73
73
|
|
74
|
-
// Returns an implementation-defined version
|
74
|
+
// Returns an implementation-defined version string for this time zone.
|
75
75
|
std::string Version() const { return zone_->Version(); }
|
76
76
|
|
77
77
|
// Returns an implementation-defined description of this time zone.
|
@@ -40,7 +40,6 @@
|
|
40
40
|
#include <cstdlib>
|
41
41
|
#include <cstring>
|
42
42
|
#include <functional>
|
43
|
-
#include <iostream>
|
44
43
|
#include <memory>
|
45
44
|
#include <sstream>
|
46
45
|
#include <string>
|
@@ -83,6 +82,27 @@ const std::int_least32_t kSecsPerYear[2] = {
|
|
83
82
|
366 * kSecsPerDay,
|
84
83
|
};
|
85
84
|
|
85
|
+
// Convert a cctz::weekday to a POSIX TZ weekday number (0==Sun, ..., 6=Sat).
|
86
|
+
inline int ToPosixWeekday(weekday wd) {
|
87
|
+
switch (wd) {
|
88
|
+
case weekday::sunday:
|
89
|
+
return 0;
|
90
|
+
case weekday::monday:
|
91
|
+
return 1;
|
92
|
+
case weekday::tuesday:
|
93
|
+
return 2;
|
94
|
+
case weekday::wednesday:
|
95
|
+
return 3;
|
96
|
+
case weekday::thursday:
|
97
|
+
return 4;
|
98
|
+
case weekday::friday:
|
99
|
+
return 5;
|
100
|
+
case weekday::saturday:
|
101
|
+
return 6;
|
102
|
+
}
|
103
|
+
return 0; /*NOTREACHED*/
|
104
|
+
}
|
105
|
+
|
86
106
|
// Single-byte, unsigned numeric values are encoded directly.
|
87
107
|
inline std::uint_fast8_t Decode8(const char* cp) {
|
88
108
|
return static_cast<std::uint_fast8_t>(*cp) & 0xff;
|
@@ -188,15 +208,13 @@ bool TimeZoneInfo::ResetToBuiltinUTC(const seconds& offset) {
|
|
188
208
|
tt.is_dst = false;
|
189
209
|
tt.abbr_index = 0;
|
190
210
|
|
191
|
-
// We temporarily add some redundant, contemporary (
|
211
|
+
// We temporarily add some redundant, contemporary (2015 through 2025)
|
192
212
|
// transitions for performance reasons. See TimeZoneInfo::LocalTime().
|
193
213
|
// TODO: Fix the performance issue and remove the extra transitions.
|
194
214
|
transitions_.clear();
|
195
215
|
transitions_.reserve(12);
|
196
216
|
for (const std::int_fast64_t unix_time : {
|
197
|
-
-(1LL << 59), //
|
198
|
-
1356998400LL, // 2013-01-01T00:00:00+00:00
|
199
|
-
1388534400LL, // 2014-01-01T00:00:00+00:00
|
217
|
+
-(1LL << 59), // a "first half" transition
|
200
218
|
1420070400LL, // 2015-01-01T00:00:00+00:00
|
201
219
|
1451606400LL, // 2016-01-01T00:00:00+00:00
|
202
220
|
1483228800LL, // 2017-01-01T00:00:00+00:00
|
@@ -206,7 +224,8 @@ bool TimeZoneInfo::ResetToBuiltinUTC(const seconds& offset) {
|
|
206
224
|
1609459200LL, // 2021-01-01T00:00:00+00:00
|
207
225
|
1640995200LL, // 2022-01-01T00:00:00+00:00
|
208
226
|
1672531200LL, // 2023-01-01T00:00:00+00:00
|
209
|
-
|
227
|
+
1704067200LL, // 2024-01-01T00:00:00+00:00
|
228
|
+
1735689600LL, // 2025-01-01T00:00:00+00:00
|
210
229
|
}) {
|
211
230
|
Transition& tr(*transitions_.emplace(transitions_.end()));
|
212
231
|
tr.unix_time = unix_time;
|
@@ -217,8 +236,8 @@ bool TimeZoneInfo::ResetToBuiltinUTC(const seconds& offset) {
|
|
217
236
|
|
218
237
|
default_transition_type_ = 0;
|
219
238
|
abbreviations_ = FixedOffsetToAbbr(offset);
|
220
|
-
abbreviations_.append(1, '\0');
|
221
|
-
future_spec_.clear();
|
239
|
+
abbreviations_.append(1, '\0');
|
240
|
+
future_spec_.clear(); // never needed for a fixed-offset zone
|
222
241
|
extended_ = false;
|
223
242
|
|
224
243
|
tt.civil_max = LocalTime(seconds::max().count(), tt).cs;
|
@@ -259,21 +278,6 @@ std::size_t TimeZoneInfo::Header::DataLength(std::size_t time_len) const {
|
|
259
278
|
return len;
|
260
279
|
}
|
261
280
|
|
262
|
-
// Check that the TransitionType has the expected offset/is_dst/abbreviation.
|
263
|
-
void TimeZoneInfo::CheckTransition(const std::string& name,
|
264
|
-
const TransitionType& tt,
|
265
|
-
std::int_fast32_t offset, bool is_dst,
|
266
|
-
const std::string& abbr) const {
|
267
|
-
if (tt.utc_offset != offset || tt.is_dst != is_dst ||
|
268
|
-
&abbreviations_[tt.abbr_index] != abbr) {
|
269
|
-
std::clog << name << ": Transition"
|
270
|
-
<< " offset=" << tt.utc_offset << "/"
|
271
|
-
<< (tt.is_dst ? "DST" : "STD")
|
272
|
-
<< "/abbr=" << &abbreviations_[tt.abbr_index]
|
273
|
-
<< " does not match POSIX spec '" << future_spec_ << "'\n";
|
274
|
-
}
|
275
|
-
}
|
276
|
-
|
277
281
|
// zic(8) can generate no-op transitions when a zone changes rules at an
|
278
282
|
// instant when there is actually no discontinuity. So we check whether
|
279
283
|
// two transitions have equivalent types (same offset/is_dst/abbr).
|
@@ -282,117 +286,108 @@ bool TimeZoneInfo::EquivTransitions(std::uint_fast8_t tt1_index,
|
|
282
286
|
if (tt1_index == tt2_index) return true;
|
283
287
|
const TransitionType& tt1(transition_types_[tt1_index]);
|
284
288
|
const TransitionType& tt2(transition_types_[tt2_index]);
|
285
|
-
if (tt1.is_dst != tt2.is_dst) return false;
|
286
289
|
if (tt1.utc_offset != tt2.utc_offset) return false;
|
290
|
+
if (tt1.is_dst != tt2.is_dst) return false;
|
287
291
|
if (tt1.abbr_index != tt2.abbr_index) return false;
|
288
292
|
return true;
|
289
293
|
}
|
290
294
|
|
295
|
+
// Find/make a transition type with these attributes.
|
296
|
+
bool TimeZoneInfo::GetTransitionType(std::int_fast32_t utc_offset, bool is_dst,
|
297
|
+
const std::string& abbr,
|
298
|
+
std::uint_least8_t* index) {
|
299
|
+
std::size_t type_index = 0;
|
300
|
+
std::size_t abbr_index = abbreviations_.size();
|
301
|
+
for (; type_index != transition_types_.size(); ++type_index) {
|
302
|
+
const TransitionType& tt(transition_types_[type_index]);
|
303
|
+
const char* tt_abbr = &abbreviations_[tt.abbr_index];
|
304
|
+
if (tt_abbr == abbr) abbr_index = tt.abbr_index;
|
305
|
+
if (tt.utc_offset == utc_offset && tt.is_dst == is_dst) {
|
306
|
+
if (abbr_index == tt.abbr_index) break; // reuse
|
307
|
+
}
|
308
|
+
}
|
309
|
+
if (type_index > 255 || abbr_index > 255) {
|
310
|
+
// No index space (8 bits) available for a new type or abbreviation.
|
311
|
+
return false;
|
312
|
+
}
|
313
|
+
if (type_index == transition_types_.size()) {
|
314
|
+
TransitionType& tt(*transition_types_.emplace(transition_types_.end()));
|
315
|
+
tt.utc_offset = static_cast<std::int_least32_t>(utc_offset);
|
316
|
+
tt.is_dst = is_dst;
|
317
|
+
if (abbr_index == abbreviations_.size()) {
|
318
|
+
abbreviations_.append(abbr);
|
319
|
+
abbreviations_.append(1, '\0');
|
320
|
+
}
|
321
|
+
tt.abbr_index = static_cast<std::uint_least8_t>(abbr_index);
|
322
|
+
}
|
323
|
+
*index = static_cast<std::uint_least8_t>(type_index);
|
324
|
+
return true;
|
325
|
+
}
|
326
|
+
|
291
327
|
// Use the POSIX-TZ-environment-variable-style string to handle times
|
292
328
|
// in years after the last transition stored in the zoneinfo data.
|
293
|
-
|
294
|
-
const Header& hdr) {
|
329
|
+
bool TimeZoneInfo::ExtendTransitions() {
|
295
330
|
extended_ = false;
|
296
|
-
|
331
|
+
if (future_spec_.empty()) return true; // last transition prevails
|
297
332
|
|
298
333
|
PosixTimeZone posix;
|
299
|
-
if (
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
CheckTransition(name, tt, posix.std_offset, false, posix.std_abbr);
|
311
|
-
extending = false;
|
312
|
-
}
|
313
|
-
|
314
|
-
if (extending && hdr.timecnt < 2) {
|
315
|
-
std::clog << name << ": Too few transitions for POSIX spec\n";
|
316
|
-
extending = false;
|
317
|
-
}
|
318
|
-
|
319
|
-
if (!extending) {
|
320
|
-
// Ensure that there is always a transition in the second half of the
|
321
|
-
// time line (the BIG_BANG transition is in the first half) so that the
|
322
|
-
// signed difference between a civil_second and the civil_second of its
|
323
|
-
// previous transition is always representable, without overflow.
|
324
|
-
const Transition& last(transitions_.back());
|
325
|
-
if (last.unix_time < 0) {
|
326
|
-
const std::uint_fast8_t type_index = last.type_index;
|
327
|
-
Transition& tr(*transitions_.emplace(transitions_.end()));
|
328
|
-
tr.unix_time = 2147483647; // 2038-01-19T03:14:07+00:00
|
329
|
-
tr.type_index = type_index;
|
330
|
-
}
|
331
|
-
return; // last transition wins
|
334
|
+
if (!ParsePosixSpec(future_spec_, &posix)) return false;
|
335
|
+
|
336
|
+
// Find transition type for the future std specification.
|
337
|
+
std::uint_least8_t std_ti;
|
338
|
+
if (!GetTransitionType(posix.std_offset, false, posix.std_abbr, &std_ti))
|
339
|
+
return false;
|
340
|
+
|
341
|
+
if (posix.dst_abbr.empty()) { // std only
|
342
|
+
// The future specification should match the last transition, and
|
343
|
+
// that means that handling the future will fall out naturally.
|
344
|
+
return EquivTransitions(transitions_.back().type_index, std_ti);
|
332
345
|
}
|
333
346
|
|
347
|
+
// Find transition type for the future dst specification.
|
348
|
+
std::uint_least8_t dst_ti;
|
349
|
+
if (!GetTransitionType(posix.dst_offset, true, posix.dst_abbr, &dst_ti))
|
350
|
+
return false;
|
351
|
+
|
334
352
|
// Extend the transitions for an additional 400 years using the
|
335
353
|
// future specification. Years beyond those can be handled by
|
336
354
|
// mapping back to a cycle-equivalent year within that range.
|
337
|
-
//
|
338
|
-
|
339
|
-
// transitions already in place.
|
340
|
-
transitions_.reserve(hdr.timecnt + 400 * 2 + 1);
|
341
|
-
transitions_.resize(hdr.timecnt + 400 * 2);
|
355
|
+
// We may need two additional transitions for the current year.
|
356
|
+
transitions_.reserve(transitions_.size() + 400 * 2 + 2);
|
342
357
|
extended_ = true;
|
343
358
|
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
// Europe/Dublin, for example.)
|
349
|
-
const Transition* tr0 = &transitions_[hdr.timecnt - 1];
|
350
|
-
const Transition* tr1 = &transitions_[hdr.timecnt - 2];
|
351
|
-
const TransitionType* tt0 = &transition_types_[tr0->type_index];
|
352
|
-
const TransitionType* tt1 = &transition_types_[tr1->type_index];
|
353
|
-
const TransitionType& dst(tt0->is_dst ? *tt0 : *tt1);
|
354
|
-
const TransitionType& std(tt0->is_dst ? *tt1 : *tt0);
|
355
|
-
CheckTransition(name, dst, posix.dst_offset, true, posix.dst_abbr);
|
356
|
-
CheckTransition(name, std, posix.std_offset, false, posix.std_abbr);
|
357
|
-
|
358
|
-
// Add the transitions to tr1 and back to tr0 for each extra year.
|
359
|
-
last_year_ = LocalTime(tr0->unix_time, *tt0).cs.year();
|
359
|
+
const Transition& last(transitions_.back());
|
360
|
+
const std::int_fast64_t last_time = last.unix_time;
|
361
|
+
const TransitionType& last_tt(transition_types_[last.type_index]);
|
362
|
+
last_year_ = LocalTime(last_time, last_tt).cs.year();
|
360
363
|
bool leap_year = IsLeap(last_year_);
|
361
|
-
const
|
362
|
-
std::int_fast64_t jan1_time =
|
363
|
-
int jan1_weekday = (
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
const PosixTransition& pt0(tt0->is_dst ? posix.dst_start : posix.dst_end);
|
380
|
-
for (const year_t limit = last_year_ + 400; last_year_ < limit;) {
|
381
|
-
last_year_ += 1; // an additional year of generated transitions
|
364
|
+
const civil_second jan1(last_year_);
|
365
|
+
std::int_fast64_t jan1_time = jan1 - civil_second();
|
366
|
+
int jan1_weekday = ToPosixWeekday(get_weekday(jan1));
|
367
|
+
|
368
|
+
Transition dst = {0, dst_ti, civil_second(), civil_second()};
|
369
|
+
Transition std = {0, std_ti, civil_second(), civil_second()};
|
370
|
+
for (const year_t limit = last_year_ + 400;; ++last_year_) {
|
371
|
+
auto dst_trans_off = TransOffset(leap_year, jan1_weekday, posix.dst_start);
|
372
|
+
auto std_trans_off = TransOffset(leap_year, jan1_weekday, posix.dst_end);
|
373
|
+
dst.unix_time = jan1_time + dst_trans_off - posix.std_offset;
|
374
|
+
std.unix_time = jan1_time + std_trans_off - posix.dst_offset;
|
375
|
+
const auto* ta = dst.unix_time < std.unix_time ? &dst : &std;
|
376
|
+
const auto* tb = dst.unix_time < std.unix_time ? &std : &dst;
|
377
|
+
if (last_time < tb->unix_time) {
|
378
|
+
if (last_time < ta->unix_time) transitions_.push_back(*ta);
|
379
|
+
transitions_.push_back(*tb);
|
380
|
+
}
|
381
|
+
if (last_year_ == limit) break;
|
382
382
|
jan1_time += kSecsPerYear[leap_year];
|
383
383
|
jan1_weekday = (jan1_weekday + kDaysPerYear[leap_year]) % 7;
|
384
|
-
leap_year = !leap_year && IsLeap(last_year_);
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
std::int_fast64_t tr0_offset = TransOffset(leap_year, jan1_weekday, pt0);
|
389
|
-
tr->unix_time = jan1_time + tr0_offset - tt1->utc_offset;
|
390
|
-
tr++->type_index = tr0->type_index;
|
391
|
-
}
|
392
|
-
assert(tr == &transitions_[0] + transitions_.size());
|
384
|
+
leap_year = !leap_year && IsLeap(last_year_ + 1);
|
385
|
+
}
|
386
|
+
|
387
|
+
return true;
|
393
388
|
}
|
394
389
|
|
395
|
-
bool TimeZoneInfo::Load(
|
390
|
+
bool TimeZoneInfo::Load(ZoneInfoSource* zip) {
|
396
391
|
// Read and validate the header.
|
397
392
|
tzhead tzh;
|
398
393
|
if (zip->Read(&tzh, sizeof(tzh)) != sizeof(tzh)) return false;
|
@@ -430,7 +425,7 @@ bool TimeZoneInfo::Load(const std::string& name, ZoneInfoSource* zip) {
|
|
430
425
|
const char* bp = tbuf.data();
|
431
426
|
|
432
427
|
// Decode and validate the transitions.
|
433
|
-
transitions_.reserve(hdr.timecnt + 2);
|
428
|
+
transitions_.reserve(hdr.timecnt + 2);
|
434
429
|
transitions_.resize(hdr.timecnt);
|
435
430
|
for (std::size_t i = 0; i != hdr.timecnt; ++i) {
|
436
431
|
transitions_[i].unix_time = (time_len == 4) ? Decode32(bp) : Decode64(bp);
|
@@ -449,6 +444,7 @@ bool TimeZoneInfo::Load(const std::string& name, ZoneInfoSource* zip) {
|
|
449
444
|
}
|
450
445
|
|
451
446
|
// Decode and validate the transition types.
|
447
|
+
transition_types_.reserve(hdr.typecnt + 2);
|
452
448
|
transition_types_.resize(hdr.typecnt);
|
453
449
|
for (std::size_t i = 0; i != hdr.typecnt; ++i) {
|
454
450
|
transition_types_[i].utc_offset =
|
@@ -475,6 +471,7 @@ bool TimeZoneInfo::Load(const std::string& name, ZoneInfoSource* zip) {
|
|
475
471
|
}
|
476
472
|
|
477
473
|
// Copy all the abbreviations.
|
474
|
+
abbreviations_.reserve(hdr.charcnt + 10);
|
478
475
|
abbreviations_.assign(bp, hdr.charcnt);
|
479
476
|
bp += hdr.charcnt;
|
480
477
|
|
@@ -506,7 +503,7 @@ bool TimeZoneInfo::Load(const std::string& name, ZoneInfoSource* zip) {
|
|
506
503
|
|
507
504
|
// If we did not find version information during the standard loading
|
508
505
|
// process (as of tzh_version '3' that is unsupported), then ask the
|
509
|
-
// ZoneInfoSource for any out-of-bound version
|
506
|
+
// ZoneInfoSource for any out-of-bound version string it may be privy to.
|
510
507
|
if (version_.empty()) {
|
511
508
|
version_ = zip->Version();
|
512
509
|
}
|
@@ -525,19 +522,29 @@ bool TimeZoneInfo::Load(const std::string& name, ZoneInfoSource* zip) {
|
|
525
522
|
transitions_.resize(hdr.timecnt);
|
526
523
|
|
527
524
|
// Ensure that there is always a transition in the first half of the
|
528
|
-
// time line (the second half is handled
|
529
|
-
//
|
530
|
-
//
|
531
|
-
// A contemporary zic will usually have already done this for us.
|
525
|
+
// time line (the second half is handled below) so that the signed
|
526
|
+
// difference between a civil_second and the civil_second of its
|
527
|
+
// previous transition is always representable, without overflow.
|
532
528
|
if (transitions_.empty() || transitions_.front().unix_time >= 0) {
|
533
529
|
Transition& tr(*transitions_.emplace(transitions_.begin()));
|
534
|
-
tr.unix_time = -(1LL << 59); //
|
530
|
+
tr.unix_time = -(1LL << 59); // -18267312070-10-26T17:01:52+00:00
|
535
531
|
tr.type_index = default_transition_type_;
|
536
|
-
hdr.timecnt += 1;
|
537
532
|
}
|
538
533
|
|
539
534
|
// Extend the transitions using the future specification.
|
540
|
-
ExtendTransitions(
|
535
|
+
if (!ExtendTransitions()) return false;
|
536
|
+
|
537
|
+
// Ensure that there is always a transition in the second half of the
|
538
|
+
// time line (the first half is handled above) so that the signed
|
539
|
+
// difference between a civil_second and the civil_second of its
|
540
|
+
// previous transition is always representable, without overflow.
|
541
|
+
const Transition& last(transitions_.back());
|
542
|
+
if (last.unix_time < 0) {
|
543
|
+
const std::uint_fast8_t type_index = last.type_index;
|
544
|
+
Transition& tr(*transitions_.emplace(transitions_.end()));
|
545
|
+
tr.unix_time = 2147483647; // 2038-01-19T03:14:07+00:00
|
546
|
+
tr.type_index = type_index;
|
547
|
+
}
|
541
548
|
|
542
549
|
// Compute the local civil time for each transition and the preceding
|
543
550
|
// second. These will be used for reverse conversions in MakeTime().
|
@@ -718,12 +725,12 @@ bool TimeZoneInfo::Load(const std::string& name) {
|
|
718
725
|
|
719
726
|
// Find and use a ZoneInfoSource to load the named zone.
|
720
727
|
auto zip = cctz_extension::zone_info_source_factory(
|
721
|
-
name, [](const std::string&
|
722
|
-
if (auto
|
723
|
-
if (auto
|
728
|
+
name, [](const std::string& n) -> std::unique_ptr<ZoneInfoSource> {
|
729
|
+
if (auto z = FileZoneInfoSource::Open(n)) return z;
|
730
|
+
if (auto z = AndroidZoneInfoSource::Open(n)) return z;
|
724
731
|
return nullptr;
|
725
732
|
});
|
726
|
-
return zip != nullptr && Load(
|
733
|
+
return zip != nullptr && Load(zip.get());
|
727
734
|
}
|
728
735
|
|
729
736
|
// BreakTime() translation for a particular transition type.
|
@@ -897,8 +904,8 @@ bool TimeZoneInfo::NextTransition(const time_point<seconds>& tp,
|
|
897
904
|
const Transition* begin = &transitions_[0];
|
898
905
|
const Transition* end = begin + transitions_.size();
|
899
906
|
if (begin->unix_time <= -(1LL << 59)) {
|
900
|
-
// Do not report the BIG_BANG found in
|
901
|
-
// really a sentinel, not a transition. See tz/zic.c.
|
907
|
+
// Do not report the BIG_BANG found in some zoneinfo data as it is
|
908
|
+
// really a sentinel, not a transition. See pre-2018f tz/zic.c.
|
902
909
|
++begin;
|
903
910
|
}
|
904
911
|
std::int_fast64_t unix_time = ToUnixSeconds(tp);
|
@@ -923,8 +930,8 @@ bool TimeZoneInfo::PrevTransition(const time_point<seconds>& tp,
|
|
923
930
|
const Transition* begin = &transitions_[0];
|
924
931
|
const Transition* end = begin + transitions_.size();
|
925
932
|
if (begin->unix_time <= -(1LL << 59)) {
|
926
|
-
// Do not report the BIG_BANG found in
|
927
|
-
// really a sentinel, not a transition. See tz/zic.c.
|
933
|
+
// Do not report the BIG_BANG found in some zoneinfo data as it is
|
934
|
+
// really a sentinel, not a transition. See pre-2018f tz/zic.c.
|
928
935
|
++begin;
|
929
936
|
}
|
930
937
|
std::int_fast64_t unix_time = ToUnixSeconds(tp);
|
@@ -95,15 +95,14 @@ class TimeZoneInfo : public TimeZoneIf {
|
|
95
95
|
std::size_t DataLength(std::size_t time_len) const;
|
96
96
|
};
|
97
97
|
|
98
|
-
|
99
|
-
|
100
|
-
const std::string& abbr) const;
|
98
|
+
bool GetTransitionType(std::int_fast32_t utc_offset, bool is_dst,
|
99
|
+
const std::string& abbr, std::uint_least8_t* index);
|
101
100
|
bool EquivTransitions(std::uint_fast8_t tt1_index,
|
102
101
|
std::uint_fast8_t tt2_index) const;
|
103
|
-
|
102
|
+
bool ExtendTransitions();
|
104
103
|
|
105
104
|
bool ResetToBuiltinUTC(const seconds& offset);
|
106
|
-
bool Load(
|
105
|
+
bool Load(ZoneInfoSource* zip);
|
107
106
|
|
108
107
|
// Helpers for BreakTime() and MakeTime().
|
109
108
|
time_zone::absolute_lookup LocalTime(std::int_fast64_t unix_time,
|
@@ -153,7 +153,8 @@ std::time_t find_trans(std::time_t lo, std::time_t hi, int offset) {
|
|
153
153
|
std::tm tm;
|
154
154
|
while (lo + 1 != hi) {
|
155
155
|
const std::time_t mid = lo + (hi - lo) / 2;
|
156
|
-
|
156
|
+
std::tm* tmp = local_time(&mid, &tm);
|
157
|
+
if (tmp != nullptr) {
|
157
158
|
if (tm_gmtoff(*tmp) == offset) {
|
158
159
|
hi = mid;
|
159
160
|
} else {
|
@@ -163,7 +164,8 @@ std::time_t find_trans(std::time_t lo, std::time_t hi, int offset) {
|
|
163
164
|
// If std::tm cannot hold some result we resort to a linear search,
|
164
165
|
// ignoring all failed conversions. Slow, but never really happens.
|
165
166
|
while (++lo != hi) {
|
166
|
-
|
167
|
+
tmp = local_time(&lo, &tm);
|
168
|
+
if (tmp != nullptr) {
|
167
169
|
if (tm_gmtoff(*tmp) == offset) break;
|
168
170
|
}
|
169
171
|
}
|
@@ -223,11 +225,10 @@ time_zone::civil_lookup TimeZoneLibC::MakeTime(const civil_second& cs) const {
|
|
223
225
|
civil_second() + ToUnixSeconds(time_point<seconds>::min());
|
224
226
|
static const civil_second max_tp_cs =
|
225
227
|
civil_second() + ToUnixSeconds(time_point<seconds>::max());
|
226
|
-
const time_point<seconds> tp =
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
: FromUnixSeconds(cs - civil_second());
|
228
|
+
const time_point<seconds> tp = (cs < min_tp_cs) ? time_point<seconds>::min()
|
229
|
+
: (cs > max_tp_cs)
|
230
|
+
? time_point<seconds>::max()
|
231
|
+
: FromUnixSeconds(cs - civil_second());
|
231
232
|
return {time_zone::civil_lookup::UNIQUE, tp, tp, tp};
|
232
233
|
}
|
233
234
|
|