Files
google-apis-rs/time/util/local_offset/fn.set_soundness.html
2024-03-05 21:06:01 +01:00

32 lines
7.2 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Set whether obtaining the local UTC offset is allowed to invoke undefined behavior. Use of this function is heavily discouraged."><title>set_soundness in time::util::local_offset - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../../" data-static-root-path="../../../static.files/" data-current-crate="time" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="sidebar-items.js"></script><script defer src="../../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="icon" href="https://avatars0.githubusercontent.com/u/55999857"></head><body class="rustdoc fn"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="mobile-topbar"><button class="sidebar-menu-toggle">&#9776;</button><a class="logo-container" href="../../../time/index.html"><img src="https://avatars0.githubusercontent.com/u/55999857" alt=""></a></nav><nav class="sidebar"><div class="sidebar-crate"><a class="logo-container" href="../../../time/index.html"><img src="https://avatars0.githubusercontent.com/u/55999857" alt="logo"></a><h2><a href="../../../time/index.html">time</a><span class="version">0.3.30</span></h2></div><div class="sidebar-elems"><h2><a href="index.html">In time::util::local_offset</a></h2></div></nav><div class="sidebar-resizer"></div>
<main><div class="width-limiter"><nav class="sub"><form class="search-form"><span></span><div id="sidebar-button" tabindex="-1"><a href="../../../time/all.html" title="show sidebar"></a></div><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="main-heading"><h1>Function <a href="../../index.html">time</a>::<wbr><a href="../index.html">util</a>::<wbr><a href="index.html">local_offset</a>::<wbr><a class="fn" href="#">set_soundness</a><button id="copy-path" title="Copy item path to clipboard"><img src="../../../static.files/clipboard-7571035ce49a181d.svg" width="19" height="18" alt="Copy item path"></button></h1><span class="out-of-band"><a class="src" href="../../../src/time/util.rs.html#87-89">source</a> · <button id="toggle-all-docs" title="collapse all docs">[<span>&#x2212;</span>]</button></span></div><pre class="rust item-decl"><code>pub unsafe fn set_soundness(soundness: <a class="enum" href="enum.Soundness.html" title="enum time::util::local_offset::Soundness">Soundness</a>)</code></pre><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Set whether obtaining the local UTC offset is allowed to invoke undefined behavior. <strong>Use of
this function is heavily discouraged.</strong></p>
<h2 id="safety"><a href="#safety">Safety</a></h2>
<p>If this method is called with <a href="enum.Soundness.html#variant.Sound" title="variant time::util::local_offset::Soundness::Sound"><code>Soundness::Sound</code></a>, the call is always sound. If this method
is called with <a href="enum.Soundness.html#variant.Unsound" title="variant time::util::local_offset::Soundness::Unsound"><code>Soundness::Unsound</code></a>, the following conditions apply.</p>
<ul>
<li>If the operating system provides a thread-safe environment, the call is sound.</li>
<li>If the process is single-threaded, the call is sound.</li>
<li>If the process is multi-threaded, no other thread may mutate the environment in any way at
the same time a call to a method that obtains the local UTC offset. This includes adding,
removing, or modifying an environment variable.</li>
</ul>
<p>The first two conditions are automatically checked by <code>time</code>, such that you do not need to
declare your code unsound. Currently, the only known operating systems that does <em>not</em>
provide a thread-safe environment are some Unix-like OSs. All other operating systems
should succeed when attempting to obtain the local UTC offset.</p>
<p>Note that you must not only verify this safety condition for your code, but for <strong>all</strong> code
that will be included in the final binary. Notably, it applies to both direct and transitive
dependencies and to both Rust and non-Rust code. <strong>For this reason it is not possible to
soundly pass <a href="enum.Soundness.html#variant.Unsound" title="variant time::util::local_offset::Soundness::Unsound"><code>Soundness::Unsound</code></a> to this method if you are writing a library that may
used by others.</strong></p>
<p>If using this method is absolutely necessary, it is recommended to keep the time between
setting the soundness to <a href="enum.Soundness.html#variant.Unsound" title="variant time::util::local_offset::Soundness::Unsound"><code>Soundness::Unsound</code></a> and setting it back to <a href="enum.Soundness.html#variant.Sound" title="variant time::util::local_offset::Soundness::Sound"><code>Soundness::Sound</code></a>
as short as possible.</p>
<p>The following methods currently obtain the local UTC offset:</p>
<ul>
<li><a href="../../struct.OffsetDateTime.html#method.now_local" title="associated function time::OffsetDateTime::now_local"><code>OffsetDateTime::now_local</code></a></li>
<li><a href="../../struct.UtcOffset.html#method.local_offset_at" title="associated function time::UtcOffset::local_offset_at"><code>UtcOffset::local_offset_at</code></a></li>
<li><a href="../../struct.UtcOffset.html#method.current_local_offset" title="associated function time::UtcOffset::current_local_offset"><code>UtcOffset::current_local_offset</code></a></li>
</ul>
</div></details></section></div></main></body></html>