Skip to content

Commit 67fd6a5

Browse files
committed
deploy: 055173b
1 parent 81538e0 commit 67fd6a5

30 files changed

+214
-92
lines changed

dev/implementors/core/marker/trait.Copy.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dev/src/uu_cp/cp.rs.html

Lines changed: 67 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1606,6 +1606,36 @@
16061606
<span id="1604">1604</span>
16071607
<span id="1605">1605</span>
16081608
<span id="1606">1606</span>
1609+
<span id="1607">1607</span>
1610+
<span id="1608">1608</span>
1611+
<span id="1609">1609</span>
1612+
<span id="1610">1610</span>
1613+
<span id="1611">1611</span>
1614+
<span id="1612">1612</span>
1615+
<span id="1613">1613</span>
1616+
<span id="1614">1614</span>
1617+
<span id="1615">1615</span>
1618+
<span id="1616">1616</span>
1619+
<span id="1617">1617</span>
1620+
<span id="1618">1618</span>
1621+
<span id="1619">1619</span>
1622+
<span id="1620">1620</span>
1623+
<span id="1621">1621</span>
1624+
<span id="1622">1622</span>
1625+
<span id="1623">1623</span>
1626+
<span id="1624">1624</span>
1627+
<span id="1625">1625</span>
1628+
<span id="1626">1626</span>
1629+
<span id="1627">1627</span>
1630+
<span id="1628">1628</span>
1631+
<span id="1629">1629</span>
1632+
<span id="1630">1630</span>
1633+
<span id="1631">1631</span>
1634+
<span id="1632">1632</span>
1635+
<span id="1633">1633</span>
1636+
<span id="1634">1634</span>
1637+
<span id="1635">1635</span>
1638+
<span id="1636">1636</span>
16091639
</pre><pre class="rust"><code><span class="attribute">#![<span class="ident">allow</span>(<span class="ident">clippy::missing_safety_doc</span>)]</span>
16101640

16111641
<span class="comment">// This file is part of the uutils coreutils package.</span>
@@ -1638,6 +1668,8 @@
16381668

16391669
<span class="kw">use</span> <span class="ident">clap</span>::{<span class="ident">crate_version</span>, <span class="ident">App</span>, <span class="ident">AppSettings</span>, <span class="ident">Arg</span>, <span class="ident">ArgMatches</span>};
16401670
<span class="kw">use</span> <span class="ident">filetime::FileTime</span>;
1671+
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">unix</span>)]</span>
1672+
<span class="kw">use</span> <span class="ident">libc::mkfifo</span>;
16411673
<span class="kw">use</span> <span class="ident">quick_error::ResultExt</span>;
16421674
<span class="kw">use</span> <span class="ident">std::collections::HashSet</span>;
16431675
<span class="kw">use</span> <span class="ident">std::env</span>;
@@ -1651,6 +1683,10 @@
16511683
<span class="kw">use</span> <span class="ident">std::io</span>;
16521684
<span class="kw">use</span> <span class="ident">std::io</span>::{<span class="ident">stdin</span>, <span class="ident">stdout</span>, <span class="ident">Write</span>};
16531685
<span class="kw">use</span> <span class="ident">std::mem</span>;
1686+
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">unix</span>)]</span>
1687+
<span class="kw">use</span> <span class="ident">std::os::unix::ffi::OsStrExt</span>;
1688+
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">unix</span>)]</span>
1689+
<span class="kw">use</span> <span class="ident">std::os::unix::fs</span>::{<span class="ident">FileTypeExt</span>, <span class="ident">PermissionsExt</span>};
16541690
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">target_os</span> <span class="op">=</span> <span class="string">&quot;linux&quot;</span>)]</span>
16551691
<span class="kw">use</span> <span class="ident">std::os::unix::io::AsRawFd</span>;
16561692
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">windows</span>)]</span>
@@ -1663,9 +1699,6 @@
16631699
<span class="kw">use</span> <span class="ident">uucore::fs</span>::{<span class="ident">canonicalize</span>, <span class="ident">MissingHandling</span>, <span class="ident">ResolveMode</span>};
16641700
<span class="kw">use</span> <span class="ident">walkdir::WalkDir</span>;
16651701

1666-
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">unix</span>)]</span>
1667-
<span class="kw">use</span> <span class="ident">std::os::unix::fs::PermissionsExt</span>;
1668-
16691702
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">target_os</span> <span class="op">=</span> <span class="string">&quot;linux&quot;</span>)]</span>
16701703
<span class="macro">ioctl!</span>(<span class="ident">write</span> <span class="ident">ficlone</span> <span class="ident">with</span> <span class="number">0x94</span>, <span class="number">9</span>; <span class="ident">std::os::raw::c_int</span>);
16711704

@@ -1758,15 +1791,15 @@
17581791
<span class="kw">pub</span> <span class="kw">type</span> <span class="ident">TargetSlice</span> <span class="op">=</span> <span class="ident">Path</span>;
17591792

17601793
<span class="doccomment">/// Specifies whether when overwrite files</span>
1761-
<span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Clone</span>, <span class="ident">Eq</span>, <span class="ident">PartialEq</span>)]</span>
1794+
<span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Clone</span>, <span class="ident">Copy</span>, <span class="ident">Eq</span>, <span class="ident">PartialEq</span>)]</span>
17621795
<span class="kw">pub</span> <span class="kw">enum</span> <span class="ident">ClobberMode</span> {
17631796
<span class="ident">Force</span>,
17641797
<span class="ident">RemoveDestination</span>,
17651798
<span class="ident">Standard</span>,
17661799
}
17671800

17681801
<span class="doccomment">/// Specifies whether when overwrite files</span>
1769-
<span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Clone</span>, <span class="ident">Eq</span>, <span class="ident">PartialEq</span>)]</span>
1802+
<span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Clone</span>, <span class="ident">Copy</span>, <span class="ident">Eq</span>, <span class="ident">PartialEq</span>)]</span>
17701803
<span class="kw">pub</span> <span class="kw">enum</span> <span class="ident">OverwriteMode</span> {
17711804
<span class="doccomment">/// [Default] Always overwrite existing files</span>
17721805
<span class="ident">Clobber</span>(<span class="ident">ClobberMode</span>),
@@ -2999,12 +3032,23 @@
29993032
<span class="kw">let</span> <span class="ident">parent</span> <span class="op">=</span> <span class="ident">dest</span>.<span class="ident">parent</span>().<span class="ident">unwrap_or</span>(<span class="ident">dest</span>);
30003033
<span class="ident">fs::create_dir_all</span>(<span class="ident">parent</span>)<span class="question-mark">?</span>;
30013034
}
3002-
<span class="kw">let</span> <span class="ident">is_symlink</span> <span class="op">=</span> <span class="ident">fs::symlink_metadata</span>(<span class="kw-2">&amp;</span><span class="ident">source</span>)<span class="question-mark">?</span>.<span class="ident">file_type</span>().<span class="ident">is_symlink</span>();
3035+
3036+
<span class="kw">let</span> <span class="ident">file_type</span> <span class="op">=</span> <span class="ident">fs::symlink_metadata</span>(<span class="kw-2">&amp;</span><span class="ident">source</span>)<span class="question-mark">?</span>.<span class="ident">file_type</span>();
3037+
<span class="kw">let</span> <span class="ident">is_symlink</span> <span class="op">=</span> <span class="ident">file_type</span>.<span class="ident">is_symlink</span>();
3038+
3039+
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">unix</span>)]</span>
3040+
<span class="kw">let</span> <span class="ident">is_fifo</span> <span class="op">=</span> <span class="ident">file_type</span>.<span class="ident">is_fifo</span>();
3041+
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">not</span>(<span class="ident">unix</span>))]</span>
3042+
<span class="kw">let</span> <span class="ident">is_fifo</span> <span class="op">=</span> <span class="bool-val">false</span>;
3043+
30033044
<span class="kw">if</span> <span class="ident">source</span>.<span class="ident">as_os_str</span>() <span class="op">==</span> <span class="string">&quot;/dev/null&quot;</span> {
30043045
<span class="comment">/* workaround a limitation of fs::copy
30053046
* https://github.com/rust-lang/rust/issues/79390
30063047
*/</span>
30073048
<span class="ident">File::create</span>(<span class="ident">dest</span>).<span class="ident">context</span>(<span class="ident">dest</span>.<span class="ident">display</span>().<span class="ident">to_string</span>())<span class="question-mark">?</span>;
3049+
} <span class="kw">else</span> <span class="kw">if</span> <span class="ident">is_fifo</span> <span class="op">&amp;&amp;</span> <span class="ident">options</span>.<span class="ident">recursive</span> {
3050+
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">unix</span>)]</span>
3051+
<span class="ident">copy_fifo</span>(<span class="ident">dest</span>, <span class="ident">options</span>.<span class="ident">overwrite</span>)<span class="question-mark">?</span>;
30083052
} <span class="kw">else</span> <span class="kw">if</span> <span class="ident">is_symlink</span> {
30093053
<span class="ident">copy_link</span>(<span class="ident">source</span>, <span class="ident">dest</span>, <span class="ident">symlinked_files</span>)<span class="question-mark">?</span>;
30103054
} <span class="kw">else</span> <span class="kw">if</span> <span class="ident">options</span>.<span class="ident">reflink_mode</span> <span class="op">!</span><span class="op">=</span> <span class="ident">ReflinkMode::Never</span> {
@@ -3024,6 +3068,23 @@
30243068
<span class="prelude-val">Ok</span>(())
30253069
}
30263070

3071+
<span class="comment">// &quot;Copies&quot; a FIFO by creating a new one. This workaround is because Rust&#39;s</span>
3072+
<span class="comment">// built-in fs::copy does not handle FIFOs (see rust-lang/rust/issues/79390).</span>
3073+
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">unix</span>)]</span>
3074+
<span class="kw">fn</span> <span class="ident">copy_fifo</span>(<span class="ident">dest</span>: <span class="kw-2">&amp;</span><span class="ident">Path</span>, <span class="ident">overwrite</span>: <span class="ident">OverwriteMode</span>) -&gt; <span class="ident">CopyResult</span><span class="op">&lt;</span>()<span class="op">&gt;</span> {
3075+
<span class="kw">if</span> <span class="ident">dest</span>.<span class="ident">exists</span>() {
3076+
<span class="ident">overwrite</span>.<span class="ident">verify</span>(<span class="ident">dest</span>)<span class="question-mark">?</span>;
3077+
<span class="ident">fs::remove_file</span>(<span class="kw-2">&amp;</span><span class="ident">dest</span>)<span class="question-mark">?</span>;
3078+
}
3079+
3080+
<span class="kw">let</span> <span class="ident">name</span> <span class="op">=</span> <span class="ident">CString::new</span>(<span class="ident">dest</span>.<span class="ident">as_os_str</span>().<span class="ident">as_bytes</span>()).<span class="ident">unwrap</span>();
3081+
<span class="kw">let</span> <span class="ident">err</span> <span class="op">=</span> <span class="kw">unsafe</span> { <span class="ident">mkfifo</span>(<span class="ident">name</span>.<span class="ident">as_ptr</span>(), <span class="number">0o666</span>) };
3082+
<span class="kw">if</span> <span class="ident">err</span> <span class="op">==</span> <span class="op">-</span><span class="number">1</span> {
3083+
<span class="kw">return</span> <span class="prelude-val">Err</span>(<span class="macro">format!</span>(<span class="string">&quot;cannot create fifo {}: File exists&quot;</span>, <span class="ident">dest</span>.<span class="ident">quote</span>()).<span class="ident">into</span>());
3084+
}
3085+
<span class="prelude-val">Ok</span>(())
3086+
}
3087+
30273088
<span class="kw">fn</span> <span class="ident">copy_link</span>(
30283089
<span class="ident">source</span>: <span class="kw-2">&amp;</span><span class="ident">Path</span>,
30293090
<span class="ident">dest</span>: <span class="kw-2">&amp;</span><span class="ident">Path</span>,
@@ -3107,7 +3168,6 @@
31073168
<span class="comment">// Extract paths in a form suitable to be passed to a syscall.</span>
31083169
<span class="comment">// The unwrap() is safe because they come from the command-line and so contain non nul</span>
31093170
<span class="comment">// character.</span>
3110-
<span class="kw">use</span> <span class="ident">std::os::unix::ffi::OsStrExt</span>;
31113171
<span class="kw">let</span> <span class="ident">src</span> <span class="op">=</span> <span class="ident">CString::new</span>(<span class="ident">source</span>.<span class="ident">as_os_str</span>().<span class="ident">as_bytes</span>()).<span class="ident">unwrap</span>();
31123172
<span class="kw">let</span> <span class="ident">dst</span> <span class="op">=</span> <span class="ident">CString::new</span>(<span class="ident">dest</span>.<span class="ident">as_os_str</span>().<span class="ident">as_bytes</span>()).<span class="ident">unwrap</span>();
31133173

0 commit comments

Comments
 (0)