This commit is contained in:
sylvestre
2022-02-13 02:36:51 +00:00
parent ef98049bcf
commit 47eeacde55
105 changed files with 2458 additions and 997 deletions
@@ -1,4 +1,4 @@
(function() {var implementors = {};
implementors["uu_numfmt"] = [{"text":"impl&lt;'a&gt; <a class=\"trait\" href=\"https://doc.rust-lang.org/1.58.1/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\">Iterator</a> for <a class=\"struct\" href=\"uu_numfmt/format/struct.WhitespaceSplitter.html\" title=\"struct uu_numfmt::format::WhitespaceSplitter\">WhitespaceSplitter</a>&lt;'a&gt;","synthetic":false,"types":["uu_numfmt::format::WhitespaceSplitter"]}];
implementors["uucore"] = [{"text":"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.58.1/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\">Iterator</a> for <a class=\"struct\" href=\"uucore/utmpx/struct.UtmpxIter.html\" title=\"struct uucore::utmpx::UtmpxIter\">UtmpxIter</a>","synthetic":false,"types":["uucore::features::utmpx::UtmpxIter"]}];
implementors["uucore"] = [{"text":"impl&lt;B:&nbsp;<a class=\"trait\" href=\"https://doc.rust-lang.org/1.58.1/std/io/trait.BufRead.html\" title=\"trait std::io::BufRead\">BufRead</a>&gt; <a class=\"trait\" href=\"https://doc.rust-lang.org/1.58.1/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\">Iterator</a> for <a class=\"struct\" href=\"uucore/lines/struct.Lines.html\" title=\"struct uucore::lines::Lines\">Lines</a>&lt;B&gt;","synthetic":false,"types":["uucore::features::lines::Lines"]},{"text":"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.58.1/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\">Iterator</a> for <a class=\"struct\" href=\"uucore/utmpx/struct.UtmpxIter.html\" title=\"struct uucore::utmpx::UtmpxIter\">UtmpxIter</a>","synthetic":false,"types":["uucore::features::utmpx::UtmpxIter"]}];
if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+4 -4
View File
File diff suppressed because one or more lines are too long
+4 -4
View File
@@ -115,7 +115,7 @@ sourcesIndex["uu_csplit"] = {"name":"","files":["csplit.rs","csplit_error.rs","p
sourcesIndex["uu_cut"] = {"name":"","files":["cut.rs","searcher.rs"]};
sourcesIndex["uu_date"] = {"name":"","files":["date.rs"]};
sourcesIndex["uu_dd"] = {"name":"","files":["conversion_tables.rs","datastructures.rs","dd.rs","parseargs.rs"]};
sourcesIndex["uu_df"] = {"name":"","files":["df.rs"]};
sourcesIndex["uu_df"] = {"name":"","files":["df.rs","table.rs"]};
sourcesIndex["uu_dircolors"] = {"name":"","files":["colors.rs","dircolors.rs"]};
sourcesIndex["uu_dirname"] = {"name":"","files":["dirname.rs"]};
sourcesIndex["uu_du"] = {"name":"","files":["du.rs"]};
@@ -129,7 +129,7 @@ sourcesIndex["uu_fmt"] = {"name":"","files":["fmt.rs","linebreak.rs","parasplit.
sourcesIndex["uu_fold"] = {"name":"","files":["fold.rs"]};
sourcesIndex["uu_groups"] = {"name":"","files":["groups.rs"]};
sourcesIndex["uu_hashsum"] = {"name":"","files":["digest.rs","hashsum.rs"]};
sourcesIndex["uu_head"] = {"name":"","files":["head.rs","lines.rs","parse.rs","take.rs"]};
sourcesIndex["uu_head"] = {"name":"","files":["head.rs","parse.rs","take.rs"]};
sourcesIndex["uu_hostid"] = {"name":"","files":["hostid.rs"]};
sourcesIndex["uu_hostname"] = {"name":"","files":["hostname.rs"]};
sourcesIndex["uu_id"] = {"name":"","files":["id.rs"]};
@@ -177,7 +177,7 @@ sourcesIndex["uu_stdbuf"] = {"name":"","files":["stdbuf.rs"]};
sourcesIndex["uu_sum"] = {"name":"","files":["sum.rs"]};
sourcesIndex["uu_sync"] = {"name":"","files":["sync.rs"]};
sourcesIndex["uu_tac"] = {"name":"","files":["error.rs","tac.rs"]};
sourcesIndex["uu_tail"] = {"name":"","dirs":[{"name":"platform","files":["mod.rs","unix.rs"]}],"files":["chunks.rs","lines.rs","parse.rs","tail.rs"]};
sourcesIndex["uu_tail"] = {"name":"","dirs":[{"name":"platform","files":["mod.rs","unix.rs"]}],"files":["chunks.rs","parse.rs","tail.rs"]};
sourcesIndex["uu_tee"] = {"name":"","files":["tee.rs"]};
sourcesIndex["uu_test"] = {"name":"","files":["parser.rs","test.rs"]};
sourcesIndex["uu_timeout"] = {"name":"","files":["timeout.rs"]};
@@ -197,7 +197,7 @@ sourcesIndex["uu_wc"] = {"name":"","files":["count_fast.rs","countable.rs","wc.r
sourcesIndex["uu_who"] = {"name":"","files":["who.rs"]};
sourcesIndex["uu_whoami"] = {"name":"","dirs":[{"name":"platform","files":["mod.rs","unix.rs"]}],"files":["whoami.rs"]};
sourcesIndex["uu_yes"] = {"name":"","files":["splice.rs","yes.rs"]};
sourcesIndex["uucore"] = {"name":"","dirs":[{"name":"features","dirs":[{"name":"tokenize","dirs":[{"name":"num_format","dirs":[{"name":"formatters","dirs":[{"name":"base_conv","files":["mod.rs","tests.rs"]}],"files":["cninetyninehexfloatf.rs","decf.rs","float_common.rs","floatf.rs","intf.rs","mod.rs","scif.rs"]}],"files":["format_field.rs","formatter.rs","mod.rs","num_format.rs"]}],"files":["mod.rs","sub.rs","token.rs","unescaped_text.rs"]}],"files":["encoding.rs","entries.rs","fs.rs","fsext.rs","memo.rs","mode.rs","perms.rs","pipes.rs","process.rs","ringbuffer.rs","signals.rs","utmpx.rs"]},{"name":"mods","files":["backup_control.rs","display.rs","error.rs","os.rs","panic.rs","ranges.rs","version_cmp.rs"]},{"name":"parser","files":["parse_size.rs","parse_time.rs"]}],"files":["features.rs","lib.rs","macros.rs","mods.rs","parser.rs"]};
sourcesIndex["uucore"] = {"name":"","dirs":[{"name":"features","dirs":[{"name":"tokenize","dirs":[{"name":"num_format","dirs":[{"name":"formatters","dirs":[{"name":"base_conv","files":["mod.rs","tests.rs"]}],"files":["cninetyninehexfloatf.rs","decf.rs","float_common.rs","floatf.rs","intf.rs","mod.rs","scif.rs"]}],"files":["format_field.rs","formatter.rs","mod.rs","num_format.rs"]}],"files":["mod.rs","sub.rs","token.rs","unescaped_text.rs"]}],"files":["encoding.rs","entries.rs","fs.rs","fsext.rs","lines.rs","memo.rs","mode.rs","perms.rs","pipes.rs","process.rs","ringbuffer.rs","signals.rs","utmpx.rs"]},{"name":"mods","files":["backup_control.rs","display.rs","error.rs","os.rs","panic.rs","ranges.rs","version_cmp.rs"]},{"name":"parser","files":["parse_size.rs","parse_time.rs"]}],"files":["features.rs","lib.rs","macros.rs","mods.rs","parser.rs"]};
sourcesIndex["uucore_procs"] = {"name":"","files":["lib.rs"]};
sourcesIndex["uudoc"] = {"name":"","files":["uudoc.rs"]};
sourcesIndex["wc"] = {"name":"","files":["main.rs"]};
+34 -14
View File
@@ -1165,6 +1165,16 @@
<span id="1164">1164</span>
<span id="1165">1165</span>
<span id="1166">1166</span>
<span id="1167">1167</span>
<span id="1168">1168</span>
<span id="1169">1169</span>
<span id="1170">1170</span>
<span id="1171">1171</span>
<span id="1172">1172</span>
<span id="1173">1173</span>
<span id="1174">1174</span>
<span id="1175">1175</span>
<span id="1176">1176</span>
</pre><pre class="rust"><code><span class="comment">// This file is part of the uutils coreutils package.</span>
<span class="comment">//</span>
<span class="comment">// (c) Tyler Steele &lt;tyler.steele@protonmail.com&gt;</span>
@@ -1209,6 +1219,7 @@
<span class="kw">use</span> <span class="ident">signal_hook::consts::signal</span>;
<span class="kw">use</span> <span class="ident">uucore::display::Quotable</span>;
<span class="kw">use</span> <span class="ident">uucore::error</span>::{<span class="ident">FromIo</span>, <span class="ident">UResult</span>, <span class="ident">USimpleError</span>};
<span class="kw">use</span> <span class="ident">uucore::show_error</span>;
<span class="kw">use</span> <span class="ident">uucore::InvalidEncodingHandling</span>;
<span class="kw">const</span> <span class="ident">ABOUT</span>: <span class="kw-2">&amp;</span><span class="ident">str</span> <span class="op">=</span> <span class="string">&quot;copy, and optionally convert, a file system resource&quot;</span>;
@@ -1247,9 +1258,12 @@
};
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="ident">amt</span>) <span class="op">=</span> <span class="ident">skip</span> {
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">buf</span> <span class="op">=</span> <span class="macro">vec!</span>[<span class="ident">BUF_INIT_BYTE</span>; <span class="ident">amt</span>];
<span class="ident">i</span>.<span class="ident">force_fill</span>(<span class="kw-2">&amp;mut</span> <span class="ident">buf</span>, <span class="ident">amt</span>)
<span class="kw">let</span> <span class="ident">num_bytes_read</span> <span class="op">=</span> <span class="ident">i</span>
.<span class="ident">force_fill</span>(<span class="ident">amt</span>.<span class="ident">try_into</span>().<span class="ident">unwrap</span>())
.<span class="ident">map_err_context</span>(<span class="op">|</span><span class="op">|</span> <span class="string">&quot;failed to read input&quot;</span>.<span class="ident">to_string</span>())<span class="question-mark">?</span>;
<span class="kw">if</span> <span class="ident">num_bytes_read</span> <span class="op">&lt;</span> <span class="ident">amt</span> {
<span class="macro">show_error!</span>(<span class="string">&quot;&#39;standard input&#39;: cannot skip to specified offset&quot;</span>);
}
}
<span class="prelude-val">Ok</span>(<span class="ident">i</span>)
@@ -1431,17 +1445,19 @@
})
}
<span class="doccomment">/// Force-fills a buffer, ignoring zero-length reads which would otherwise be</span>
<span class="doccomment">/// interpreted as EOF.</span>
<span class="doccomment">/// Note: This will not return unless the source (eventually) produces</span>
<span class="doccomment">/// enough bytes to meet target_len.</span>
<span class="kw">fn</span> <span class="ident">force_fill</span>(<span class="kw-2">&amp;mut</span> <span class="self">self</span>, <span class="ident">buf</span>: <span class="kw-2">&amp;mut</span> [<span class="ident">u8</span>], <span class="ident">target_len</span>: <span class="ident">usize</span>) -&gt; <span class="ident">std::io::Result</span><span class="op">&lt;</span><span class="ident">usize</span><span class="op">&gt;</span> {
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">base_idx</span> <span class="op">=</span> <span class="number">0</span>;
<span class="kw">while</span> <span class="ident">base_idx</span> <span class="op">&lt;</span> <span class="ident">target_len</span> {
<span class="ident">base_idx</span> <span class="op">+</span><span class="op">=</span> <span class="self">self</span>.<span class="ident">read</span>(<span class="kw-2">&amp;mut</span> <span class="ident">buf</span>[<span class="ident">base_idx</span>..<span class="ident">target_len</span>])<span class="question-mark">?</span>;
}
<span class="prelude-val">Ok</span>(<span class="ident">base_idx</span>)
<span class="doccomment">/// Read the specified number of bytes from this reader.</span>
<span class="doccomment">///</span>
<span class="doccomment">/// On success, this method returns the number of bytes read. If</span>
<span class="doccomment">/// this reader has fewer than `n` bytes available, then it reads</span>
<span class="doccomment">/// as many as possible. In that case, this method returns a</span>
<span class="doccomment">/// number less than `n`.</span>
<span class="doccomment">///</span>
<span class="doccomment">/// # Errors</span>
<span class="doccomment">///</span>
<span class="doccomment">/// If there is a problem reading.</span>
<span class="kw">fn</span> <span class="ident">force_fill</span>(<span class="kw-2">&amp;mut</span> <span class="self">self</span>, <span class="ident">n</span>: <span class="ident">u64</span>) -&gt; <span class="ident">std::io::Result</span><span class="op">&lt;</span><span class="ident">usize</span><span class="op">&gt;</span> {
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">buf</span> <span class="op">=</span> <span class="macro">vec!</span>[];
<span class="self">self</span>.<span class="ident">take</span>(<span class="ident">n</span>).<span class="ident">read_to_end</span>(<span class="kw-2">&amp;mut</span> <span class="ident">buf</span>)
}
}
@@ -2027,10 +2043,14 @@
}
});
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">progress_as_secs</span> <span class="op">=</span> <span class="number">0</span>;
<span class="kw">while</span> <span class="kw">let</span> <span class="prelude-val">Ok</span>(<span class="ident">update</span>) <span class="op">=</span> <span class="ident">rx</span>.<span class="ident">recv</span>() {
<span class="comment">// (Re)print status line if progress is requested.</span>
<span class="kw">if</span> <span class="prelude-val">Some</span>(<span class="ident">StatusLevel::Progress</span>) <span class="op">==</span> <span class="ident">print_level</span> {
<span class="kw">if</span> <span class="prelude-val">Some</span>(<span class="ident">StatusLevel::Progress</span>) <span class="op">==</span> <span class="ident">print_level</span>
<span class="op">&amp;&amp;</span> <span class="ident">update</span>.<span class="ident">duration</span>.<span class="ident">as_secs</span>() <span class="op">&gt;</span><span class="op">=</span> <span class="ident">progress_as_secs</span>
{
<span class="ident">reprint_prog_line</span>(<span class="kw-2">&amp;</span><span class="ident">update</span>);
<span class="ident">progress_as_secs</span> <span class="op">=</span> <span class="ident">update</span>.<span class="ident">duration</span>.<span class="ident">as_secs</span>() <span class="op">+</span> <span class="number">1</span>;
}
<span class="comment">// Handle signals</span>
<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>
+11 -291
View File
@@ -383,146 +383,6 @@
<span id="382">382</span>
<span id="383">383</span>
<span id="384">384</span>
<span id="385">385</span>
<span id="386">386</span>
<span id="387">387</span>
<span id="388">388</span>
<span id="389">389</span>
<span id="390">390</span>
<span id="391">391</span>
<span id="392">392</span>
<span id="393">393</span>
<span id="394">394</span>
<span id="395">395</span>
<span id="396">396</span>
<span id="397">397</span>
<span id="398">398</span>
<span id="399">399</span>
<span id="400">400</span>
<span id="401">401</span>
<span id="402">402</span>
<span id="403">403</span>
<span id="404">404</span>
<span id="405">405</span>
<span id="406">406</span>
<span id="407">407</span>
<span id="408">408</span>
<span id="409">409</span>
<span id="410">410</span>
<span id="411">411</span>
<span id="412">412</span>
<span id="413">413</span>
<span id="414">414</span>
<span id="415">415</span>
<span id="416">416</span>
<span id="417">417</span>
<span id="418">418</span>
<span id="419">419</span>
<span id="420">420</span>
<span id="421">421</span>
<span id="422">422</span>
<span id="423">423</span>
<span id="424">424</span>
<span id="425">425</span>
<span id="426">426</span>
<span id="427">427</span>
<span id="428">428</span>
<span id="429">429</span>
<span id="430">430</span>
<span id="431">431</span>
<span id="432">432</span>
<span id="433">433</span>
<span id="434">434</span>
<span id="435">435</span>
<span id="436">436</span>
<span id="437">437</span>
<span id="438">438</span>
<span id="439">439</span>
<span id="440">440</span>
<span id="441">441</span>
<span id="442">442</span>
<span id="443">443</span>
<span id="444">444</span>
<span id="445">445</span>
<span id="446">446</span>
<span id="447">447</span>
<span id="448">448</span>
<span id="449">449</span>
<span id="450">450</span>
<span id="451">451</span>
<span id="452">452</span>
<span id="453">453</span>
<span id="454">454</span>
<span id="455">455</span>
<span id="456">456</span>
<span id="457">457</span>
<span id="458">458</span>
<span id="459">459</span>
<span id="460">460</span>
<span id="461">461</span>
<span id="462">462</span>
<span id="463">463</span>
<span id="464">464</span>
<span id="465">465</span>
<span id="466">466</span>
<span id="467">467</span>
<span id="468">468</span>
<span id="469">469</span>
<span id="470">470</span>
<span id="471">471</span>
<span id="472">472</span>
<span id="473">473</span>
<span id="474">474</span>
<span id="475">475</span>
<span id="476">476</span>
<span id="477">477</span>
<span id="478">478</span>
<span id="479">479</span>
<span id="480">480</span>
<span id="481">481</span>
<span id="482">482</span>
<span id="483">483</span>
<span id="484">484</span>
<span id="485">485</span>
<span id="486">486</span>
<span id="487">487</span>
<span id="488">488</span>
<span id="489">489</span>
<span id="490">490</span>
<span id="491">491</span>
<span id="492">492</span>
<span id="493">493</span>
<span id="494">494</span>
<span id="495">495</span>
<span id="496">496</span>
<span id="497">497</span>
<span id="498">498</span>
<span id="499">499</span>
<span id="500">500</span>
<span id="501">501</span>
<span id="502">502</span>
<span id="503">503</span>
<span id="504">504</span>
<span id="505">505</span>
<span id="506">506</span>
<span id="507">507</span>
<span id="508">508</span>
<span id="509">509</span>
<span id="510">510</span>
<span id="511">511</span>
<span id="512">512</span>
<span id="513">513</span>
<span id="514">514</span>
<span id="515">515</span>
<span id="516">516</span>
<span id="517">517</span>
<span id="518">518</span>
<span id="519">519</span>
<span id="520">520</span>
<span id="521">521</span>
<span id="522">522</span>
<span id="523">523</span>
<span id="524">524</span>
</pre><pre class="rust"><code><span class="comment">// This file is part of the uutils coreutils package.</span>
<span class="comment">//</span>
<span class="comment">// (c) Fangxu Hu &lt;framlog@gmail.com&gt;</span>
@@ -530,8 +390,8 @@
<span class="comment">//</span>
<span class="comment">// For the full copyright and license information, please view the LICENSE file</span>
<span class="comment">// that was distributed with this source code.</span>
<span class="kw">mod</span> <span class="ident">table</span>;
<span class="kw">use</span> <span class="ident">uucore::error::UError</span>;
<span class="kw">use</span> <span class="ident">uucore::error::UResult</span>;
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">unix</span>)]</span>
<span class="kw">use</span> <span class="ident">uucore::fsext::statfs_fn</span>;
@@ -539,14 +399,11 @@
<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>};
<span class="kw">use</span> <span class="ident">number_prefix::NumberPrefix</span>;
<span class="kw">use</span> <span class="ident">std::cell::Cell</span>;
<span class="kw">use</span> <span class="ident">std::collections::HashMap</span>;
<span class="kw">use</span> <span class="ident">std::collections::HashSet</span>;
<span class="kw">use</span> <span class="ident">std::error::Error</span>;
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">unix</span>)]</span>
<span class="kw">use</span> <span class="ident">std::ffi::CString</span>;
<span class="kw">use</span> <span class="ident">std::fmt::Display</span>;
<span class="kw">use</span> <span class="ident">std::iter::FromIterator</span>;
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">unix</span>)]</span>
<span class="kw">use</span> <span class="ident">std::mem</span>;
@@ -554,6 +411,8 @@
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">windows</span>)]</span>
<span class="kw">use</span> <span class="ident">std::path::Path</span>;
<span class="kw">use</span> <span class="ident"><span class="kw">crate</span>::table</span>::{<span class="ident">DisplayRow</span>, <span class="ident">Header</span>, <span class="ident">Row</span>};
<span class="kw">static</span> <span class="ident">ABOUT</span>: <span class="kw-2">&amp;</span><span class="ident">str</span> <span class="op">=</span> <span class="string">&quot;Show information about the file system on which each FILE resides,\n\
or all file systems by default.&quot;</span>;
@@ -583,6 +442,7 @@
<span class="ident">exclude</span>: <span class="ident">HashSet</span><span class="op">&lt;</span><span class="ident">String</span><span class="op">&gt;</span>,
}
<span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Default</span>)]</span>
<span class="kw">struct</span> <span class="ident">Options</span> {
<span class="ident">show_local_fs</span>: <span class="ident">bool</span>,
<span class="ident">show_all_fs</span>: <span class="ident">bool</span>,
@@ -761,64 +621,6 @@
.<span class="ident">collect</span>()
}
<span class="doccomment">/// Convert `value` to a human readable string based on `base`.</span>
<span class="doccomment">/// e.g. It returns 1G when value is 1 * 1024 * 1024 * 1024 and base is 1024.</span>
<span class="doccomment">/// Note: It returns `value` if `base` isn&#39;t positive.</span>
<span class="kw">fn</span> <span class="ident">human_readable</span>(<span class="ident">value</span>: <span class="ident">u64</span>, <span class="ident">base</span>: <span class="ident">i64</span>) -&gt; <span class="ident">UResult</span><span class="op">&lt;</span><span class="ident">String</span><span class="op">&gt;</span> {
<span class="kw">let</span> <span class="ident">base_str</span> <span class="op">=</span> <span class="kw">match</span> <span class="ident">base</span> {
<span class="ident">d</span> <span class="kw">if</span> <span class="ident">d</span> <span class="op">&lt;</span> <span class="number">0</span> =&gt; <span class="ident">value</span>.<span class="ident">to_string</span>(),
<span class="comment">// ref: [Binary prefix](https://en.wikipedia.org/wiki/Binary_prefix) @@ &lt;https://archive.is/cnwmF&gt;</span>
<span class="comment">// ref: [SI/metric prefix](https://en.wikipedia.org/wiki/Metric_prefix) @@ &lt;https://archive.is/QIuLj&gt;</span>
<span class="number">1000</span> =&gt; <span class="kw">match</span> <span class="ident">NumberPrefix::decimal</span>(<span class="ident">value</span> <span class="kw">as</span> <span class="ident">f64</span>) {
<span class="ident">NumberPrefix::Standalone</span>(<span class="ident">bytes</span>) =&gt; <span class="ident">bytes</span>.<span class="ident">to_string</span>(),
<span class="ident">NumberPrefix::Prefixed</span>(<span class="ident">prefix</span>, <span class="ident">bytes</span>) =&gt; <span class="macro">format!</span>(<span class="string">&quot;{:.1}{}&quot;</span>, <span class="ident">bytes</span>, <span class="ident">prefix</span>.<span class="ident">symbol</span>()),
},
<span class="number">1024</span> =&gt; <span class="kw">match</span> <span class="ident">NumberPrefix::binary</span>(<span class="ident">value</span> <span class="kw">as</span> <span class="ident">f64</span>) {
<span class="ident">NumberPrefix::Standalone</span>(<span class="ident">bytes</span>) =&gt; <span class="ident">bytes</span>.<span class="ident">to_string</span>(),
<span class="ident">NumberPrefix::Prefixed</span>(<span class="ident">prefix</span>, <span class="ident">bytes</span>) =&gt; <span class="macro">format!</span>(<span class="string">&quot;{:.1}{}&quot;</span>, <span class="ident">bytes</span>, <span class="ident">prefix</span>.<span class="ident">symbol</span>()),
},
<span class="kw">_</span> =&gt; <span class="kw">return</span> <span class="prelude-val">Err</span>(<span class="ident">DfError::InvalidBaseValue</span>(<span class="ident">base</span>.<span class="ident">to_string</span>()).<span class="ident">into</span>()),
};
<span class="prelude-val">Ok</span>(<span class="ident">base_str</span>)
}
<span class="kw">fn</span> <span class="ident">use_size</span>(<span class="ident">free_size</span>: <span class="ident">u64</span>, <span class="ident">total_size</span>: <span class="ident">u64</span>) -&gt; <span class="ident">String</span> {
<span class="kw">if</span> <span class="ident">total_size</span> <span class="op">==</span> <span class="number">0</span> {
<span class="kw">return</span> <span class="ident">String::from</span>(<span class="string">&quot;-&quot;</span>);
}
<span class="kw">return</span> <span class="macro">format!</span>(
<span class="string">&quot;{:.0}%&quot;</span>,
<span class="number">100f64</span> <span class="op">-</span> <span class="number">100f64</span> <span class="op">*</span> (<span class="ident">free_size</span> <span class="kw">as</span> <span class="ident">f64</span> <span class="op">/</span> <span class="ident">total_size</span> <span class="kw">as</span> <span class="ident">f64</span>)
);
}
<span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Debug</span>)]</span>
<span class="kw">enum</span> <span class="ident">DfError</span> {
<span class="ident">InvalidBaseValue</span>(<span class="ident">String</span>),
}
<span class="kw">impl</span> <span class="ident">Display</span> <span class="kw">for</span> <span class="ident">DfError</span> {
<span class="kw">fn</span> <span class="ident">fmt</span>(<span class="kw-2">&amp;</span><span class="self">self</span>, <span class="ident">f</span>: <span class="kw-2">&amp;mut</span> <span class="ident">std::fmt::Formatter</span><span class="op">&lt;</span><span class="lifetime">&#39;_</span><span class="op">&gt;</span>) -&gt; <span class="ident">std::fmt::Result</span> {
<span class="kw">match</span> <span class="self">self</span> {
<span class="ident">DfError::InvalidBaseValue</span>(<span class="ident">s</span>) =&gt; <span class="macro">write!</span>(<span class="ident">f</span>, <span class="string">&quot;Internal error: Unknown base value {}&quot;</span>, <span class="ident">s</span>),
}
}
}
<span class="kw">impl</span> <span class="ident">Error</span> <span class="kw">for</span> <span class="ident">DfError</span> {}
<span class="kw">impl</span> <span class="ident">UError</span> <span class="kw">for</span> <span class="ident">DfError</span> {
<span class="kw">fn</span> <span class="ident">code</span>(<span class="kw-2">&amp;</span><span class="self">self</span>) -&gt; <span class="ident">i32</span> {
<span class="kw">match</span> <span class="self">self</span> {
<span class="ident">DfError::InvalidBaseValue</span>(<span class="kw">_</span>) =&gt; <span class="number">1</span>,
}
}
}
<span class="attribute">#[<span class="ident">uucore::main</span>]</span>
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">uumain</span>(<span class="ident">args</span>: <span class="kw">impl</span> <span class="ident">uucore::Args</span>) -&gt; <span class="ident">UResult</span><span class="op">&lt;</span>()<span class="op">&gt;</span> {
<span class="kw">let</span> <span class="ident">usage</span> <span class="op">=</span> <span class="ident">usage</span>();
@@ -839,98 +641,16 @@
<span class="kw">let</span> <span class="ident">opt</span> <span class="op">=</span> <span class="ident">Options::from</span>(<span class="kw-2">&amp;</span><span class="ident">matches</span>);
<span class="kw">let</span> <span class="ident">fs_list</span> <span class="op">=</span> <span class="ident">filter_mount_list</span>(<span class="ident">read_fs_list</span>(), <span class="kw-2">&amp;</span><span class="ident">paths</span>, <span class="kw-2">&amp;</span><span class="ident">opt</span>)
<span class="kw">let</span> <span class="ident">mounts</span> <span class="op">=</span> <span class="ident">read_fs_list</span>();
<span class="kw">let</span> <span class="ident">data</span>: <span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">Row</span><span class="op">&gt;</span> <span class="op">=</span> <span class="ident">filter_mount_list</span>(<span class="ident">mounts</span>, <span class="kw-2">&amp;</span><span class="ident">paths</span>, <span class="kw-2">&amp;</span><span class="ident">opt</span>)
.<span class="ident">into_iter</span>()
.<span class="ident">filter_map</span>(<span class="ident">Filesystem::new</span>)
.<span class="ident">filter</span>(<span class="op">|</span><span class="ident">fs</span><span class="op">|</span> <span class="ident">fs</span>.<span class="ident">usage</span>.<span class="ident">blocks</span> <span class="op">!</span><span class="op">=</span> <span class="number">0</span> <span class="op">|</span><span class="op">|</span> <span class="ident">opt</span>.<span class="ident">show_all_fs</span> <span class="op">|</span><span class="op">|</span> <span class="ident">opt</span>.<span class="ident">show_listed_fs</span>)
.<span class="ident">collect</span>::<span class="op">&lt;</span><span class="ident">Vec</span><span class="op">&lt;</span><span class="kw">_</span><span class="op">&gt;</span><span class="op">&gt;</span>();
<span class="comment">// set headers</span>
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">header</span> <span class="op">=</span> <span class="macro">vec!</span>[<span class="string">&quot;Filesystem&quot;</span>];
<span class="kw">if</span> <span class="ident">opt</span>.<span class="ident">show_fs_type</span> {
<span class="ident">header</span>.<span class="ident">push</span>(<span class="string">&quot;Type&quot;</span>);
}
<span class="ident">header</span>.<span class="ident">extend_from_slice</span>(<span class="kw-2">&amp;</span><span class="kw">if</span> <span class="ident">opt</span>.<span class="ident">show_inode_instead</span> {
<span class="comment">// spell-checker:disable-next-line</span>
[<span class="string">&quot;Inodes&quot;</span>, <span class="string">&quot;Iused&quot;</span>, <span class="string">&quot;IFree&quot;</span>, <span class="string">&quot;IUses%&quot;</span>]
} <span class="kw">else</span> {
[
<span class="kw">if</span> <span class="ident">opt</span>.<span class="ident">human_readable_base</span> <span class="op">==</span> <span class="op">-</span><span class="number">1</span> {
<span class="string">&quot;1k-blocks&quot;</span>
} <span class="kw">else</span> {
<span class="string">&quot;Size&quot;</span>
},
<span class="string">&quot;Used&quot;</span>,
<span class="string">&quot;Available&quot;</span>,
<span class="string">&quot;Use%&quot;</span>,
]
});
<span class="kw">if</span> <span class="macro">cfg!</span>(<span class="ident">target_os</span> <span class="op">=</span> <span class="string">&quot;macos&quot;</span>) <span class="op">&amp;&amp;</span> <span class="op">!</span><span class="ident">opt</span>.<span class="ident">show_inode_instead</span> {
<span class="ident">header</span>.<span class="ident">insert</span>(<span class="ident">header</span>.<span class="ident">len</span>() <span class="op">-</span> <span class="number">1</span>, <span class="string">&quot;Capacity&quot;</span>);
}
<span class="ident">header</span>.<span class="ident">push</span>(<span class="string">&quot;Mounted on&quot;</span>);
<span class="kw">for</span> (<span class="ident">idx</span>, <span class="ident">title</span>) <span class="kw">in</span> <span class="ident">header</span>.<span class="ident">iter</span>().<span class="ident">enumerate</span>() {
<span class="kw">if</span> <span class="ident">idx</span> <span class="op">==</span> <span class="number">0</span> <span class="op">|</span><span class="op">|</span> <span class="ident">idx</span> <span class="op">==</span> <span class="ident">header</span>.<span class="ident">len</span>() <span class="op">-</span> <span class="number">1</span> {
<span class="macro">print!</span>(<span class="string">&quot;{0: &lt;16} &quot;</span>, <span class="ident">title</span>);
} <span class="kw">else</span> <span class="kw">if</span> <span class="ident">opt</span>.<span class="ident">show_fs_type</span> <span class="op">&amp;&amp;</span> <span class="ident">idx</span> <span class="op">==</span> <span class="number">1</span> {
<span class="macro">print!</span>(<span class="string">&quot;{0: &lt;5} &quot;</span>, <span class="ident">title</span>);
} <span class="kw">else</span> <span class="kw">if</span> <span class="ident">idx</span> <span class="op">==</span> <span class="ident">header</span>.<span class="ident">len</span>() <span class="op">-</span> <span class="number">2</span> {
<span class="macro">print!</span>(<span class="string">&quot;{0: &gt;5} &quot;</span>, <span class="ident">title</span>);
} <span class="kw">else</span> {
<span class="macro">print!</span>(<span class="string">&quot;{0: &gt;12} &quot;</span>, <span class="ident">title</span>);
}
}
<span class="macro">println!</span>();
<span class="kw">for</span> <span class="ident">fs</span> <span class="kw">in</span> <span class="kw-2">&amp;</span><span class="ident">fs_list</span> {
<span class="macro">print!</span>(<span class="string">&quot;{0: &lt;16} &quot;</span>, <span class="ident">fs</span>.<span class="ident">mount_info</span>.<span class="ident">dev_name</span>);
<span class="kw">if</span> <span class="ident">opt</span>.<span class="ident">show_fs_type</span> {
<span class="macro">print!</span>(<span class="string">&quot;{0: &lt;5} &quot;</span>, <span class="ident">fs</span>.<span class="ident">mount_info</span>.<span class="ident">fs_type</span>);
}
<span class="kw">if</span> <span class="ident">opt</span>.<span class="ident">show_inode_instead</span> {
<span class="macro">print!</span>(
<span class="string">&quot;{0: &gt;12} &quot;</span>,
<span class="ident">human_readable</span>(<span class="ident">fs</span>.<span class="ident">usage</span>.<span class="ident">files</span>, <span class="ident">opt</span>.<span class="ident">human_readable_base</span>)<span class="question-mark">?</span>
);
<span class="macro">print!</span>(
<span class="string">&quot;{0: &gt;12} &quot;</span>,
<span class="ident">human_readable</span>(<span class="ident">fs</span>.<span class="ident">usage</span>.<span class="ident">files</span> <span class="op">-</span> <span class="ident">fs</span>.<span class="ident">usage</span>.<span class="ident">ffree</span>, <span class="ident">opt</span>.<span class="ident">human_readable_base</span>)<span class="question-mark">?</span>
);
<span class="macro">print!</span>(
<span class="string">&quot;{0: &gt;12} &quot;</span>,
<span class="ident">human_readable</span>(<span class="ident">fs</span>.<span class="ident">usage</span>.<span class="ident">ffree</span>, <span class="ident">opt</span>.<span class="ident">human_readable_base</span>)<span class="question-mark">?</span>
);
<span class="macro">print!</span>(
<span class="string">&quot;{0: &gt;5} &quot;</span>,
<span class="macro">format!</span>(
<span class="string">&quot;{0:.1}%&quot;</span>,
<span class="number">100f64</span> <span class="op">-</span> <span class="number">100f64</span> <span class="op">*</span> (<span class="ident">fs</span>.<span class="ident">usage</span>.<span class="ident">ffree</span> <span class="kw">as</span> <span class="ident">f64</span> <span class="op">/</span> <span class="ident">fs</span>.<span class="ident">usage</span>.<span class="ident">files</span> <span class="kw">as</span> <span class="ident">f64</span>)
)
);
} <span class="kw">else</span> {
<span class="kw">let</span> <span class="ident">total_size</span> <span class="op">=</span> <span class="ident">fs</span>.<span class="ident">usage</span>.<span class="ident">blocksize</span> <span class="op">*</span> <span class="ident">fs</span>.<span class="ident">usage</span>.<span class="ident">blocks</span>;
<span class="kw">let</span> <span class="ident">free_size</span> <span class="op">=</span> <span class="ident">fs</span>.<span class="ident">usage</span>.<span class="ident">blocksize</span> <span class="op">*</span> <span class="ident">fs</span>.<span class="ident">usage</span>.<span class="ident">bfree</span>;
<span class="macro">print!</span>(
<span class="string">&quot;{0: &gt;12} &quot;</span>,
<span class="ident">human_readable</span>(<span class="ident">total_size</span>, <span class="ident">opt</span>.<span class="ident">human_readable_base</span>)<span class="question-mark">?</span>
);
<span class="macro">print!</span>(
<span class="string">&quot;{0: &gt;12} &quot;</span>,
<span class="ident">human_readable</span>(<span class="ident">total_size</span> <span class="op">-</span> <span class="ident">free_size</span>, <span class="ident">opt</span>.<span class="ident">human_readable_base</span>)<span class="question-mark">?</span>
);
<span class="macro">print!</span>(
<span class="string">&quot;{0: &gt;12} &quot;</span>,
<span class="ident">human_readable</span>(<span class="ident">free_size</span>, <span class="ident">opt</span>.<span class="ident">human_readable_base</span>)<span class="question-mark">?</span>
);
<span class="kw">if</span> <span class="macro">cfg!</span>(<span class="ident">target_os</span> <span class="op">=</span> <span class="string">&quot;macos&quot;</span>) {
<span class="kw">let</span> <span class="ident">used</span> <span class="op">=</span> <span class="ident">fs</span>.<span class="ident">usage</span>.<span class="ident">blocks</span> <span class="op">-</span> <span class="ident">fs</span>.<span class="ident">usage</span>.<span class="ident">bfree</span>;
<span class="kw">let</span> <span class="ident">blocks</span> <span class="op">=</span> <span class="ident">used</span> <span class="op">+</span> <span class="ident">fs</span>.<span class="ident">usage</span>.<span class="ident">bavail</span>;
<span class="macro">print!</span>(<span class="string">&quot;{0: &gt;12} &quot;</span>, <span class="ident">use_size</span>(<span class="ident">used</span>, <span class="ident">blocks</span>));
}
<span class="macro">print!</span>(<span class="string">&quot;{0: &gt;5} &quot;</span>, <span class="ident">use_size</span>(<span class="ident">free_size</span>, <span class="ident">total_size</span>));
}
<span class="macro">print!</span>(<span class="string">&quot;{0: &lt;16}&quot;</span>, <span class="ident">fs</span>.<span class="ident">mount_info</span>.<span class="ident">mount_dir</span>);
<span class="macro">println!</span>();
.<span class="ident">map</span>(<span class="ident">Into::into</span>)
.<span class="ident">collect</span>();
<span class="macro">println!</span>(<span class="string">&quot;{}&quot;</span>, <span class="ident">Header::new</span>(<span class="kw-2">&amp;</span><span class="ident">opt</span>));
<span class="kw">for</span> <span class="ident">row</span> <span class="kw">in</span> <span class="ident">data</span> {
<span class="macro">println!</span>(<span class="string">&quot;{}&quot;</span>, <span class="ident">DisplayRow::new</span>(<span class="ident">row</span>, <span class="kw-2">&amp;</span><span class="ident">opt</span>));
}
<span class="prelude-val">Ok</span>(())
File diff suppressed because it is too large Load Diff
+4 -4
View File
@@ -442,19 +442,19 @@
<span class="kw">impl</span> <span class="ident">Digest</span> <span class="kw">for</span> <span class="ident">sha1::Sha1</span> {
<span class="kw">fn</span> <span class="ident">new</span>() -&gt; <span class="self">Self</span> {
<span class="ident"><span class="self">Self</span>::new</span>()
<span class="ident"><span class="self">Self</span>::default</span>()
}
<span class="kw">fn</span> <span class="ident">input</span>(<span class="kw-2">&amp;mut</span> <span class="self">self</span>, <span class="ident">input</span>: <span class="kw-2">&amp;</span>[<span class="ident">u8</span>]) {
<span class="self">self</span>.<span class="ident">update</span>(<span class="ident">input</span>);
<span class="ident">digest::Digest::update</span>(<span class="self">self</span>, <span class="ident">input</span>);
}
<span class="kw">fn</span> <span class="ident">result</span>(<span class="kw-2">&amp;mut</span> <span class="self">self</span>, <span class="ident">out</span>: <span class="kw-2">&amp;mut</span> [<span class="ident">u8</span>]) {
<span class="ident">out</span>.<span class="ident">copy_from_slice</span>(<span class="kw-2">&amp;</span><span class="self">self</span>.<span class="ident">digest</span>().<span class="ident">bytes</span>());
<span class="ident">digest::Digest::finalize_into_reset</span>(<span class="self">self</span>, <span class="ident">out</span>.<span class="ident">into</span>());
}
<span class="kw">fn</span> <span class="ident">reset</span>(<span class="kw-2">&amp;mut</span> <span class="self">self</span>) {
<span class="self">self</span>.<span class="ident">reset</span>();
<span class="kw-2">*</span><span class="self">self</span> <span class="op">=</span> <span class="ident"><span class="self">Self</span>::new</span>();
}
<span class="kw">fn</span> <span class="ident">output_bits</span>(<span class="kw-2">&amp;</span><span class="self">self</span>) -&gt; <span class="ident">usize</span> {
+66 -112
View File
@@ -611,29 +611,6 @@
<span id="610">610</span>
<span id="611">611</span>
<span id="612">612</span>
<span id="613">613</span>
<span id="614">614</span>
<span id="615">615</span>
<span id="616">616</span>
<span id="617">617</span>
<span id="618">618</span>
<span id="619">619</span>
<span id="620">620</span>
<span id="621">621</span>
<span id="622">622</span>
<span id="623">623</span>
<span id="624">624</span>
<span id="625">625</span>
<span id="626">626</span>
<span id="627">627</span>
<span id="628">628</span>
<span id="629">629</span>
<span id="630">630</span>
<span id="631">631</span>
<span id="632">632</span>
<span id="633">633</span>
<span id="634">634</span>
<span id="635">635</span>
</pre><pre class="rust"><code><span class="comment">// * This file is part of the uutils coreutils package.</span>
<span class="comment">// *</span>
<span class="comment">// * For the full copyright and license information, please view the LICENSE</span>
@@ -641,12 +618,13 @@
<span class="comment">// spell-checker:ignore (vars) zlines BUFWRITER seekable</span>
<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="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>};
<span class="kw">use</span> <span class="ident">std::convert</span>::{<span class="ident">TryFrom</span>, <span class="ident">TryInto</span>};
<span class="kw">use</span> <span class="ident">std::ffi::OsString</span>;
<span class="kw">use</span> <span class="ident">std::io</span>::{<span class="self">self</span>, <span class="ident">BufWriter</span>, <span class="ident">ErrorKind</span>, <span class="ident">Read</span>, <span class="ident">Seek</span>, <span class="ident">SeekFrom</span>, <span class="ident">Write</span>};
<span class="kw">use</span> <span class="ident">uucore::display::Quotable</span>;
<span class="kw">use</span> <span class="ident">uucore::error</span>::{<span class="ident">FromIo</span>, <span class="ident">UError</span>, <span class="ident">UResult</span>, <span class="ident">USimpleError</span>};
<span class="kw">use</span> <span class="ident">uucore::lines::lines</span>;
<span class="kw">use</span> <span class="ident">uucore::show</span>;
<span class="kw">const</span> <span class="ident">BUF_SIZE</span>: <span class="ident">usize</span> <span class="op">=</span> <span class="number">65536</span>;
@@ -671,10 +649,8 @@
<span class="kw">pub</span> <span class="kw">const</span> <span class="ident">ZERO_NAME</span>: <span class="kw-2">&amp;</span><span class="ident">str</span> <span class="op">=</span> <span class="string">&quot;ZERO&quot;</span>;
<span class="kw">pub</span> <span class="kw">const</span> <span class="ident">FILES_NAME</span>: <span class="kw-2">&amp;</span><span class="ident">str</span> <span class="op">=</span> <span class="string">&quot;FILE&quot;</span>;
}
<span class="kw">mod</span> <span class="ident">lines</span>;
<span class="kw">mod</span> <span class="ident">parse</span>;
<span class="kw">mod</span> <span class="ident">take</span>;
<span class="kw">use</span> <span class="ident">lines::zlines</span>;
<span class="kw">use</span> <span class="ident">take::take_all_but</span>;
<span class="kw">use</span> <span class="ident">take::take_lines</span>;
@@ -740,25 +716,42 @@
)
.<span class="ident">arg</span>(<span class="ident">Arg::new</span>(<span class="ident">options::FILES_NAME</span>).<span class="ident">multiple_occurrences</span>(<span class="bool-val">true</span>))
}
<span class="attribute">#[<span class="ident">derive</span>(<span class="ident">PartialEq</span>, <span class="ident">Debug</span>, <span class="ident">Clone</span>, <span class="ident">Copy</span>)]</span>
<span class="kw">enum</span> <span class="ident">Modes</span> {
<span class="ident">Lines</span>(<span class="ident">usize</span>),
<span class="ident">Bytes</span>(<span class="ident">usize</span>),
<span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Debug</span>, <span class="ident">PartialEq</span>)]</span>
<span class="kw">enum</span> <span class="ident">Mode</span> {
<span class="ident">FirstLines</span>(<span class="ident">usize</span>),
<span class="ident">AllButLastLines</span>(<span class="ident">usize</span>),
<span class="ident">FirstBytes</span>(<span class="ident">usize</span>),
<span class="ident">AllButLastBytes</span>(<span class="ident">usize</span>),
}
<span class="kw">impl</span> <span class="ident">Default</span> <span class="kw">for</span> <span class="ident">Modes</span> {
<span class="kw">impl</span> <span class="ident">Default</span> <span class="kw">for</span> <span class="ident">Mode</span> {
<span class="kw">fn</span> <span class="ident">default</span>() -&gt; <span class="self">Self</span> {
<span class="ident"><span class="self">Self</span>::Lines</span>(<span class="number">10</span>)
<span class="ident"><span class="self">Self</span>::FirstLines</span>(<span class="number">10</span>)
}
}
<span class="kw">fn</span> <span class="ident">parse_mode</span><span class="op">&lt;</span><span class="ident">F</span><span class="op">&gt;</span>(<span class="ident">src</span>: <span class="kw-2">&amp;</span><span class="ident">str</span>, <span class="ident">closure</span>: <span class="ident">F</span>) -&gt; <span class="prelude-ty">Result</span><span class="op">&lt;</span>(<span class="ident">Modes</span>, <span class="ident">bool</span>), <span class="ident">String</span><span class="op">&gt;</span>
<span class="kw">where</span>
<span class="ident">F</span>: <span class="ident">FnOnce</span>(<span class="ident">usize</span>) -&gt; <span class="ident">Modes</span>,
{
<span class="kw">match</span> <span class="ident">parse::parse_num</span>(<span class="ident">src</span>) {
<span class="prelude-val">Ok</span>((<span class="ident">n</span>, <span class="ident">last</span>)) =&gt; <span class="prelude-val">Ok</span>((<span class="ident">closure</span>(<span class="ident">n</span>), <span class="ident">last</span>)),
<span class="prelude-val">Err</span>(<span class="ident">e</span>) =&gt; <span class="prelude-val">Err</span>(<span class="ident">e</span>.<span class="ident">to_string</span>()),
<span class="kw">impl</span> <span class="ident">Mode</span> {
<span class="kw">fn</span> <span class="ident">from</span>(<span class="ident">matches</span>: <span class="kw-2">&amp;</span><span class="ident">ArgMatches</span>) -&gt; <span class="prelude-ty">Result</span><span class="op">&lt;</span><span class="self">Self</span>, <span class="ident">String</span><span class="op">&gt;</span> {
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="ident">v</span>) <span class="op">=</span> <span class="ident">matches</span>.<span class="ident">value_of</span>(<span class="ident">options::BYTES_NAME</span>) {
<span class="kw">let</span> (<span class="ident">n</span>, <span class="ident">all_but_last</span>) <span class="op">=</span>
<span class="ident">parse::parse_num</span>(<span class="ident">v</span>).<span class="ident">map_err</span>(<span class="op">|</span><span class="ident">err</span><span class="op">|</span> <span class="macro">format!</span>(<span class="string">&quot;invalid number of bytes: {}&quot;</span>, <span class="ident">err</span>))<span class="question-mark">?</span>;
<span class="kw">if</span> <span class="ident">all_but_last</span> {
<span class="prelude-val">Ok</span>(<span class="ident"><span class="self">Self</span>::AllButLastBytes</span>(<span class="ident">n</span>))
} <span class="kw">else</span> {
<span class="prelude-val">Ok</span>(<span class="ident"><span class="self">Self</span>::FirstBytes</span>(<span class="ident">n</span>))
}
} <span class="kw">else</span> <span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="ident">v</span>) <span class="op">=</span> <span class="ident">matches</span>.<span class="ident">value_of</span>(<span class="ident">options::LINES_NAME</span>) {
<span class="kw">let</span> (<span class="ident">n</span>, <span class="ident">all_but_last</span>) <span class="op">=</span>
<span class="ident">parse::parse_num</span>(<span class="ident">v</span>).<span class="ident">map_err</span>(<span class="op">|</span><span class="ident">err</span><span class="op">|</span> <span class="macro">format!</span>(<span class="string">&quot;invalid number of lines: {}&quot;</span>, <span class="ident">err</span>))<span class="question-mark">?</span>;
<span class="kw">if</span> <span class="ident">all_but_last</span> {
<span class="prelude-val">Ok</span>(<span class="ident"><span class="self">Self</span>::AllButLastLines</span>(<span class="ident">n</span>))
} <span class="kw">else</span> {
<span class="prelude-val">Ok</span>(<span class="ident"><span class="self">Self</span>::FirstLines</span>(<span class="ident">n</span>))
}
} <span class="kw">else</span> {
<span class="prelude-val">Ok</span>(<span class="ident">Default::default</span>())
}
}
}
@@ -793,8 +786,7 @@
<span class="kw">pub</span> <span class="ident">quiet</span>: <span class="ident">bool</span>,
<span class="kw">pub</span> <span class="ident">verbose</span>: <span class="ident">bool</span>,
<span class="kw">pub</span> <span class="ident">zeroed</span>: <span class="ident">bool</span>,
<span class="kw">pub</span> <span class="ident">all_but_last</span>: <span class="ident">bool</span>,
<span class="kw">pub</span> <span class="ident">mode</span>: <span class="ident">Modes</span>,
<span class="kw">pub</span> <span class="ident">mode</span>: <span class="ident">Mode</span>,
<span class="kw">pub</span> <span class="ident">files</span>: <span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">String</span><span class="op">&gt;</span>,
}
@@ -809,18 +801,7 @@
<span class="ident">options</span>.<span class="ident">verbose</span> <span class="op">=</span> <span class="ident">matches</span>.<span class="ident">is_present</span>(<span class="ident">options::VERBOSE_NAME</span>);
<span class="ident">options</span>.<span class="ident">zeroed</span> <span class="op">=</span> <span class="ident">matches</span>.<span class="ident">is_present</span>(<span class="ident">options::ZERO_NAME</span>);
<span class="kw">let</span> <span class="ident">mode_and_from_end</span> <span class="op">=</span> <span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="ident">v</span>) <span class="op">=</span> <span class="ident">matches</span>.<span class="ident">value_of</span>(<span class="ident">options::BYTES_NAME</span>) {
<span class="ident">parse_mode</span>(<span class="ident">v</span>, <span class="ident">Modes::Bytes</span>)
.<span class="ident">map_err</span>(<span class="op">|</span><span class="ident">err</span><span class="op">|</span> <span class="macro">format!</span>(<span class="string">&quot;invalid number of bytes: {}&quot;</span>, <span class="ident">err</span>))<span class="question-mark">?</span>
} <span class="kw">else</span> <span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="ident">v</span>) <span class="op">=</span> <span class="ident">matches</span>.<span class="ident">value_of</span>(<span class="ident">options::LINES_NAME</span>) {
<span class="ident">parse_mode</span>(<span class="ident">v</span>, <span class="ident">Modes::Lines</span>)
.<span class="ident">map_err</span>(<span class="op">|</span><span class="ident">err</span><span class="op">|</span> <span class="macro">format!</span>(<span class="string">&quot;invalid number of lines: {}&quot;</span>, <span class="ident">err</span>))<span class="question-mark">?</span>
} <span class="kw">else</span> {
(<span class="ident">Modes::Lines</span>(<span class="number">10</span>), <span class="bool-val">false</span>)
};
<span class="ident">options</span>.<span class="ident">mode</span> <span class="op">=</span> <span class="ident">mode_and_from_end</span>.<span class="number">0</span>;
<span class="ident">options</span>.<span class="ident">all_but_last</span> <span class="op">=</span> <span class="ident">mode_and_from_end</span>.<span class="number">1</span>;
<span class="ident">options</span>.<span class="ident">mode</span> <span class="op">=</span> <span class="ident">Mode::from</span>(<span class="kw-2">&amp;</span><span class="ident">matches</span>)<span class="question-mark">?</span>;
<span class="ident">options</span>.<span class="ident">files</span> <span class="op">=</span> <span class="kw">match</span> <span class="ident">matches</span>.<span class="ident">values_of</span>(<span class="ident">options::FILES_NAME</span>) {
<span class="prelude-val">Some</span>(<span class="ident">v</span>) =&gt; <span class="ident">v</span>.<span class="ident">map</span>(<span class="op">|</span><span class="ident">s</span><span class="op">|</span> <span class="ident">s</span>.<span class="ident">to_owned</span>()).<span class="ident">collect</span>(),
@@ -917,12 +898,14 @@
<span class="kw">if</span> <span class="ident">zero</span> {
<span class="kw">let</span> <span class="ident">stdout</span> <span class="op">=</span> <span class="ident">std::io::stdout</span>();
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">stdout</span> <span class="op">=</span> <span class="ident">stdout</span>.<span class="ident">lock</span>();
<span class="kw">for</span> <span class="ident">bytes</span> <span class="kw">in</span> <span class="ident">take_all_but</span>(<span class="ident">zlines</span>(<span class="ident">input</span>), <span class="ident">n</span>) {
<span class="kw">for</span> <span class="ident">bytes</span> <span class="kw">in</span> <span class="ident">take_all_but</span>(<span class="ident">lines</span>(<span class="ident">input</span>, <span class="string">b&#39;\0&#39;</span>), <span class="ident">n</span>) {
<span class="ident">stdout</span>.<span class="ident">write_all</span>(<span class="kw-2">&amp;</span><span class="ident">bytes</span><span class="question-mark">?</span>)<span class="question-mark">?</span>;
}
} <span class="kw">else</span> {
<span class="kw">for</span> <span class="ident">line</span> <span class="kw">in</span> <span class="ident">take_all_but</span>(<span class="ident">input</span>.<span class="ident">lines</span>(), <span class="ident">n</span>) {
<span class="macro">println!</span>(<span class="string">&quot;{}&quot;</span>, <span class="ident">line</span><span class="question-mark">?</span>);
<span class="kw">let</span> <span class="ident">stdout</span> <span class="op">=</span> <span class="ident">std::io::stdout</span>();
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">stdout</span> <span class="op">=</span> <span class="ident">stdout</span>.<span class="ident">lock</span>();
<span class="kw">for</span> <span class="ident">bytes</span> <span class="kw">in</span> <span class="ident">take_all_but</span>(<span class="ident">lines</span>(<span class="ident">input</span>, <span class="string">b&#39;\n&#39;</span>), <span class="ident">n</span>) {
<span class="ident">stdout</span>.<span class="ident">write_all</span>(<span class="kw-2">&amp;</span><span class="ident">bytes</span><span class="question-mark">?</span>)<span class="question-mark">?</span>;
}
}
<span class="prelude-val">Ok</span>(())
@@ -1010,9 +993,8 @@
}
<span class="kw">fn</span> <span class="ident">head_backwards_file</span>(<span class="ident">input</span>: <span class="kw-2">&amp;mut</span> <span class="ident">std::fs::File</span>, <span class="ident">options</span>: <span class="kw-2">&amp;</span><span class="ident">HeadOptions</span>) -&gt; <span class="ident">std::io::Result</span><span class="op">&lt;</span>()<span class="op">&gt;</span> {
<span class="macro">assert!</span>(<span class="ident">options</span>.<span class="ident">all_but_last</span>);
<span class="kw">match</span> <span class="ident">options</span>.<span class="ident">mode</span> {
<span class="ident">Modes::Bytes</span>(<span class="ident">n</span>) =&gt; {
<span class="ident">Mode::AllButLastBytes</span>(<span class="ident">n</span>) =&gt; {
<span class="kw">let</span> <span class="ident">size</span> <span class="op">=</span> <span class="ident">input</span>.<span class="ident">metadata</span>()<span class="question-mark">?</span>.<span class="ident">len</span>().<span class="ident">try_into</span>().<span class="ident">unwrap</span>();
<span class="kw">if</span> <span class="ident">n</span> <span class="op">&gt;</span><span class="op">=</span> <span class="ident">size</span> {
<span class="kw">return</span> <span class="prelude-val">Ok</span>(());
@@ -1023,31 +1005,29 @@
)<span class="question-mark">?</span>;
}
}
<span class="ident">Modes::Lines</span>(<span class="ident">n</span>) =&gt; {
<span class="ident">Mode::AllButLastLines</span>(<span class="ident">n</span>) =&gt; {
<span class="kw">let</span> <span class="ident">found</span> <span class="op">=</span> <span class="ident">find_nth_line_from_end</span>(<span class="ident">input</span>, <span class="ident">n</span>, <span class="ident">options</span>.<span class="ident">zeroed</span>)<span class="question-mark">?</span>;
<span class="ident">read_n_bytes</span>(
<span class="kw-2">&amp;mut</span> <span class="ident">std::io::BufReader::with_capacity</span>(<span class="ident">BUF_SIZE</span>, <span class="ident">input</span>),
<span class="ident">found</span>,
)<span class="question-mark">?</span>;
}
<span class="kw">_</span> =&gt; <span class="macro">unreachable!</span>(),
}
<span class="prelude-val">Ok</span>(())
}
<span class="kw">fn</span> <span class="ident">head_file</span>(<span class="ident">input</span>: <span class="kw-2">&amp;mut</span> <span class="ident">std::fs::File</span>, <span class="ident">options</span>: <span class="kw-2">&amp;</span><span class="ident">HeadOptions</span>) -&gt; <span class="ident">std::io::Result</span><span class="op">&lt;</span>()<span class="op">&gt;</span> {
<span class="kw">if</span> <span class="ident">options</span>.<span class="ident">all_but_last</span> {
<span class="ident">head_backwards_file</span>(<span class="ident">input</span>, <span class="ident">options</span>)
} <span class="kw">else</span> {
<span class="kw">match</span> <span class="ident">options</span>.<span class="ident">mode</span> {
<span class="ident">Modes::Bytes</span>(<span class="ident">n</span>) =&gt; {
<span class="ident">read_n_bytes</span>(<span class="kw-2">&amp;mut</span> <span class="ident">std::io::BufReader::with_capacity</span>(<span class="ident">BUF_SIZE</span>, <span class="ident">input</span>), <span class="ident">n</span>)
}
<span class="ident">Modes::Lines</span>(<span class="ident">n</span>) =&gt; <span class="ident">read_n_lines</span>(
<span class="kw-2">&amp;mut</span> <span class="ident">std::io::BufReader::with_capacity</span>(<span class="ident">BUF_SIZE</span>, <span class="ident">input</span>),
<span class="ident">n</span>,
<span class="ident">options</span>.<span class="ident">zeroed</span>,
),
<span class="kw">match</span> <span class="ident">options</span>.<span class="ident">mode</span> {
<span class="ident">Mode::FirstBytes</span>(<span class="ident">n</span>) =&gt; {
<span class="ident">read_n_bytes</span>(<span class="kw-2">&amp;mut</span> <span class="ident">std::io::BufReader::with_capacity</span>(<span class="ident">BUF_SIZE</span>, <span class="ident">input</span>), <span class="ident">n</span>)
}
<span class="ident">Mode::FirstLines</span>(<span class="ident">n</span>) =&gt; <span class="ident">read_n_lines</span>(
<span class="kw-2">&amp;mut</span> <span class="ident">std::io::BufReader::with_capacity</span>(<span class="ident">BUF_SIZE</span>, <span class="ident">input</span>),
<span class="ident">n</span>,
<span class="ident">options</span>.<span class="ident">zeroed</span>,
),
<span class="ident">Mode::AllButLastBytes</span>(<span class="kw">_</span>) <span class="op">|</span> <span class="ident">Mode::AllButLastLines</span>(<span class="kw">_</span>) =&gt; <span class="ident">head_backwards_file</span>(<span class="ident">input</span>, <span class="ident">options</span>),
}
}
@@ -1065,19 +1045,11 @@
<span class="kw">let</span> <span class="ident">stdin</span> <span class="op">=</span> <span class="ident">std::io::stdin</span>();
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">stdin</span> <span class="op">=</span> <span class="ident">stdin</span>.<span class="ident">lock</span>();
<span class="kw">match</span> <span class="ident">options</span>.<span class="ident">mode</span> {
<span class="ident">Modes::Bytes</span>(<span class="ident">n</span>) =&gt; {
<span class="kw">if</span> <span class="ident">options</span>.<span class="ident">all_but_last</span> {
<span class="ident">read_but_last_n_bytes</span>(<span class="kw-2">&amp;mut</span> <span class="ident">stdin</span>, <span class="ident">n</span>)
} <span class="kw">else</span> {
<span class="ident">read_n_bytes</span>(<span class="kw-2">&amp;mut</span> <span class="ident">stdin</span>, <span class="ident">n</span>)
}
}
<span class="ident">Modes::Lines</span>(<span class="ident">n</span>) =&gt; {
<span class="kw">if</span> <span class="ident">options</span>.<span class="ident">all_but_last</span> {
<span class="ident">read_but_last_n_lines</span>(<span class="kw-2">&amp;mut</span> <span class="ident">stdin</span>, <span class="ident">n</span>, <span class="ident">options</span>.<span class="ident">zeroed</span>)
} <span class="kw">else</span> {
<span class="ident">read_n_lines</span>(<span class="kw-2">&amp;mut</span> <span class="ident">stdin</span>, <span class="ident">n</span>, <span class="ident">options</span>.<span class="ident">zeroed</span>)
}
<span class="ident">Mode::FirstBytes</span>(<span class="ident">n</span>) =&gt; <span class="ident">read_n_bytes</span>(<span class="kw-2">&amp;mut</span> <span class="ident">stdin</span>, <span class="ident">n</span>),
<span class="ident">Mode::AllButLastBytes</span>(<span class="ident">n</span>) =&gt; <span class="ident">read_but_last_n_bytes</span>(<span class="kw-2">&amp;mut</span> <span class="ident">stdin</span>, <span class="ident">n</span>),
<span class="ident">Mode::FirstLines</span>(<span class="ident">n</span>) =&gt; <span class="ident">read_n_lines</span>(<span class="kw-2">&amp;mut</span> <span class="ident">stdin</span>, <span class="ident">n</span>, <span class="ident">options</span>.<span class="ident">zeroed</span>),
<span class="ident">Mode::AllButLastLines</span>(<span class="ident">n</span>) =&gt; {
<span class="ident">read_but_last_n_lines</span>(<span class="kw-2">&amp;mut</span> <span class="ident">stdin</span>, <span class="ident">n</span>, <span class="ident">options</span>.<span class="ident">zeroed</span>)
}
}
}
@@ -1148,17 +1120,16 @@
<span class="kw">let</span> <span class="ident">args</span> <span class="op">=</span> <span class="ident">options</span>(<span class="string">&quot;-n -10M -vz&quot;</span>).<span class="ident">unwrap</span>();
<span class="macro">assert!</span>(<span class="ident">args</span>.<span class="ident">zeroed</span>);
<span class="macro">assert!</span>(<span class="ident">args</span>.<span class="ident">verbose</span>);
<span class="macro">assert!</span>(<span class="ident">args</span>.<span class="ident">all_but_last</span>);
<span class="macro">assert_eq!</span>(<span class="ident">args</span>.<span class="ident">mode</span>, <span class="ident">Modes::Lines</span>(<span class="number">10</span> <span class="op">*</span> <span class="number">1024</span> <span class="op">*</span> <span class="number">1024</span>));
<span class="macro">assert_eq!</span>(<span class="ident">args</span>.<span class="ident">mode</span>, <span class="ident">Mode::AllButLastLines</span>(<span class="number">10</span> <span class="op">*</span> <span class="number">1024</span> <span class="op">*</span> <span class="number">1024</span>));
}
<span class="attribute">#[<span class="ident">test</span>]</span>
<span class="kw">fn</span> <span class="ident">test_gnu_compatibility</span>() {
<span class="kw">let</span> <span class="ident">args</span> <span class="op">=</span> <span class="ident">options</span>(<span class="string">&quot;-n 1 -c 1 -n 5 -c kiB -vqvqv&quot;</span>).<span class="ident">unwrap</span>(); <span class="comment">// spell-checker:disable-line</span>
<span class="macro">assert!</span>(<span class="ident">args</span>.<span class="ident">mode</span> <span class="op">==</span> <span class="ident">Modes::Bytes</span>(<span class="number">1024</span>));
<span class="macro">assert!</span>(<span class="ident">args</span>.<span class="ident">mode</span> <span class="op">==</span> <span class="ident">Mode::FirstBytes</span>(<span class="number">1024</span>));
<span class="macro">assert!</span>(<span class="ident">args</span>.<span class="ident">verbose</span>);
<span class="macro">assert_eq!</span>(<span class="ident">options</span>(<span class="string">&quot;-5&quot;</span>).<span class="ident">unwrap</span>().<span class="ident">mode</span>, <span class="ident">Modes::Lines</span>(<span class="number">5</span>));
<span class="macro">assert_eq!</span>(<span class="ident">options</span>(<span class="string">&quot;-2b&quot;</span>).<span class="ident">unwrap</span>().<span class="ident">mode</span>, <span class="ident">Modes::Bytes</span>(<span class="number">1024</span>));
<span class="macro">assert_eq!</span>(<span class="ident">options</span>(<span class="string">&quot;-5 -c 1&quot;</span>).<span class="ident">unwrap</span>().<span class="ident">mode</span>, <span class="ident">Modes::Bytes</span>(<span class="number">1</span>));
<span class="macro">assert_eq!</span>(<span class="ident">options</span>(<span class="string">&quot;-5&quot;</span>).<span class="ident">unwrap</span>().<span class="ident">mode</span>, <span class="ident">Mode::FirstLines</span>(<span class="number">5</span>));
<span class="macro">assert_eq!</span>(<span class="ident">options</span>(<span class="string">&quot;-2b&quot;</span>).<span class="ident">unwrap</span>().<span class="ident">mode</span>, <span class="ident">Mode::FirstBytes</span>(<span class="number">1024</span>));
<span class="macro">assert_eq!</span>(<span class="ident">options</span>(<span class="string">&quot;-5 -c 1&quot;</span>).<span class="ident">unwrap</span>().<span class="ident">mode</span>, <span class="ident">Mode::FirstBytes</span>(<span class="number">1</span>));
}
<span class="attribute">#[<span class="ident">test</span>]</span>
<span class="kw">fn</span> <span class="ident">all_args_test</span>() {
@@ -1169,10 +1140,10 @@
<span class="macro">assert!</span>(<span class="ident">options</span>(<span class="string">&quot;-v&quot;</span>).<span class="ident">unwrap</span>().<span class="ident">verbose</span>);
<span class="macro">assert!</span>(<span class="ident">options</span>(<span class="string">&quot;--zero-terminated&quot;</span>).<span class="ident">unwrap</span>().<span class="ident">zeroed</span>);
<span class="macro">assert!</span>(<span class="ident">options</span>(<span class="string">&quot;-z&quot;</span>).<span class="ident">unwrap</span>().<span class="ident">zeroed</span>);
<span class="macro">assert_eq!</span>(<span class="ident">options</span>(<span class="string">&quot;--lines 15&quot;</span>).<span class="ident">unwrap</span>().<span class="ident">mode</span>, <span class="ident">Modes::Lines</span>(<span class="number">15</span>));
<span class="macro">assert_eq!</span>(<span class="ident">options</span>(<span class="string">&quot;-n 15&quot;</span>).<span class="ident">unwrap</span>().<span class="ident">mode</span>, <span class="ident">Modes::Lines</span>(<span class="number">15</span>));
<span class="macro">assert_eq!</span>(<span class="ident">options</span>(<span class="string">&quot;--bytes 15&quot;</span>).<span class="ident">unwrap</span>().<span class="ident">mode</span>, <span class="ident">Modes::Bytes</span>(<span class="number">15</span>));
<span class="macro">assert_eq!</span>(<span class="ident">options</span>(<span class="string">&quot;-c 15&quot;</span>).<span class="ident">unwrap</span>().<span class="ident">mode</span>, <span class="ident">Modes::Bytes</span>(<span class="number">15</span>));
<span class="macro">assert_eq!</span>(<span class="ident">options</span>(<span class="string">&quot;--lines 15&quot;</span>).<span class="ident">unwrap</span>().<span class="ident">mode</span>, <span class="ident">Mode::FirstLines</span>(<span class="number">15</span>));
<span class="macro">assert_eq!</span>(<span class="ident">options</span>(<span class="string">&quot;-n 15&quot;</span>).<span class="ident">unwrap</span>().<span class="ident">mode</span>, <span class="ident">Mode::FirstLines</span>(<span class="number">15</span>));
<span class="macro">assert_eq!</span>(<span class="ident">options</span>(<span class="string">&quot;--bytes 15&quot;</span>).<span class="ident">unwrap</span>().<span class="ident">mode</span>, <span class="ident">Mode::FirstBytes</span>(<span class="number">15</span>));
<span class="macro">assert_eq!</span>(<span class="ident">options</span>(<span class="string">&quot;-c 15&quot;</span>).<span class="ident">unwrap</span>().<span class="ident">mode</span>, <span class="ident">Mode::FirstBytes</span>(<span class="number">15</span>));
}
<span class="attribute">#[<span class="ident">test</span>]</span>
<span class="kw">fn</span> <span class="ident">test_options_errors</span>() {
@@ -1186,26 +1157,9 @@
<span class="macro">assert!</span>(<span class="op">!</span><span class="ident">opts</span>.<span class="ident">verbose</span>);
<span class="macro">assert!</span>(<span class="op">!</span><span class="ident">opts</span>.<span class="ident">quiet</span>);
<span class="macro">assert!</span>(<span class="op">!</span><span class="ident">opts</span>.<span class="ident">zeroed</span>);
<span class="macro">assert!</span>(<span class="op">!</span><span class="ident">opts</span>.<span class="ident">all_but_last</span>);
<span class="macro">assert_eq!</span>(<span class="ident">opts</span>.<span class="ident">mode</span>, <span class="ident">Modes::Lines</span>(<span class="number">10</span>));
<span class="macro">assert_eq!</span>(<span class="ident">opts</span>.<span class="ident">mode</span>, <span class="ident">Mode::FirstLines</span>(<span class="number">10</span>));
<span class="macro">assert!</span>(<span class="ident">opts</span>.<span class="ident">files</span>.<span class="ident">is_empty</span>());
}
<span class="attribute">#[<span class="ident">test</span>]</span>
<span class="kw">fn</span> <span class="ident">test_parse_mode</span>() {
<span class="macro">assert_eq!</span>(
<span class="ident">parse_mode</span>(<span class="string">&quot;123&quot;</span>, <span class="ident">Modes::Lines</span>),
<span class="prelude-val">Ok</span>((<span class="ident">Modes::Lines</span>(<span class="number">123</span>), <span class="bool-val">false</span>))
);
<span class="macro">assert_eq!</span>(
<span class="ident">parse_mode</span>(<span class="string">&quot;-456&quot;</span>, <span class="ident">Modes::Bytes</span>),
<span class="prelude-val">Ok</span>((<span class="ident">Modes::Bytes</span>(<span class="number">456</span>), <span class="bool-val">true</span>))
);
<span class="macro">assert!</span>(<span class="ident">parse_mode</span>(<span class="string">&quot;Nonsensical Nonsense&quot;</span>, <span class="ident">Modes::Bytes</span>).<span class="ident">is_err</span>());
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">target_pointer_width</span> <span class="op">=</span> <span class="string">&quot;64&quot;</span>)]</span>
<span class="macro">assert!</span>(<span class="ident">parse_mode</span>(<span class="string">&quot;1Y&quot;</span>, <span class="ident">Modes::Lines</span>).<span class="ident">is_err</span>());
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">target_pointer_width</span> <span class="op">=</span> <span class="string">&quot;32&quot;</span>)]</span>
<span class="macro">assert!</span>(<span class="ident">parse_mode</span>(<span class="string">&quot;1T&quot;</span>, <span class="ident">Modes::Bytes</span>).<span class="ident">is_err</span>());
}
<span class="kw">fn</span> <span class="ident">arg_outputs</span>(<span class="ident">src</span>: <span class="kw-2">&amp;</span><span class="ident">str</span>) -&gt; <span class="prelude-ty">Result</span><span class="op">&lt;</span><span class="ident">String</span>, <span class="ident">String</span><span class="op">&gt;</span> {
<span class="kw">let</span> <span class="ident">split</span> <span class="op">=</span> <span class="ident">src</span>.<span class="ident">split_whitespace</span>().<span class="ident">map</span>(<span class="ident">OsString::from</span>);
<span class="kw">match</span> <span class="ident">arg_iterate</span>(<span class="ident">split</span>) {
-154
View File
@@ -1,154 +0,0 @@
<!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="Source of the Rust file `src&#x2F;uu&#x2F;head&#x2F;src&#x2F;lines.rs`."><meta name="keywords" content="rust, rustlang, rust-lang"><title>lines.rs - source</title><link rel="stylesheet" type="text/css" href="../../normalize.css"><link rel="stylesheet" type="text/css" href="../../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../../ayu.css" disabled ><script id="default-settings" ></script><script src="../../storage.js"></script><script src="../../crates.js"></script><script defer src="../../main.js"></script><script defer src="../../source-script.js"></script><script defer src="../../source-files.js"></script>
<noscript><link rel="stylesheet" href="../../noscript.css"></noscript><link rel="alternate icon" type="image/png" href="../../favicon-16x16.png"><link rel="alternate icon" type="image/png" href="../../favicon-32x32.png"><link rel="icon" type="image/svg+xml" href="../../favicon.svg"><style type="text/css">#crate-search{background-image:url("../../down-arrow.svg");}</style></head><body class="rustdoc source"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><div class="sidebar-menu" role="button">&#9776;</div><a href='../../uu_head/index.html'><div class='logo-container rust-logo'><img src='../../rust-logo.png' alt='logo'></div></a></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu" title="themes"><img width="18" height="18" alt="Pick another theme!" src="../../brush.svg"></button><div id="theme-choices" role="menu"></div></div><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><button type="button" id="help-button" title="help">?</button><a id="settings-menu" href="../../settings.html" title="settings"><img width="18" height="18" alt="Change settings" src="../../wheel.svg"></a></div></form></nav><section id="main" class="content"><div class="example-wrap"><pre class="line-numbers"><span id="1"> 1</span>
<span id="2"> 2</span>
<span id="3"> 3</span>
<span id="4"> 4</span>
<span id="5"> 5</span>
<span id="6"> 6</span>
<span id="7"> 7</span>
<span id="8"> 8</span>
<span id="9"> 9</span>
<span id="10">10</span>
<span id="11">11</span>
<span id="12">12</span>
<span id="13">13</span>
<span id="14">14</span>
<span id="15">15</span>
<span id="16">16</span>
<span id="17">17</span>
<span id="18">18</span>
<span id="19">19</span>
<span id="20">20</span>
<span id="21">21</span>
<span id="22">22</span>
<span id="23">23</span>
<span id="24">24</span>
<span id="25">25</span>
<span id="26">26</span>
<span id="27">27</span>
<span id="28">28</span>
<span id="29">29</span>
<span id="30">30</span>
<span id="31">31</span>
<span id="32">32</span>
<span id="33">33</span>
<span id="34">34</span>
<span id="35">35</span>
<span id="36">36</span>
<span id="37">37</span>
<span id="38">38</span>
<span id="39">39</span>
<span id="40">40</span>
<span id="41">41</span>
<span id="42">42</span>
<span id="43">43</span>
<span id="44">44</span>
<span id="45">45</span>
<span id="46">46</span>
<span id="47">47</span>
<span id="48">48</span>
<span id="49">49</span>
<span id="50">50</span>
<span id="51">51</span>
<span id="52">52</span>
<span id="53">53</span>
<span id="54">54</span>
<span id="55">55</span>
<span id="56">56</span>
<span id="57">57</span>
<span id="58">58</span>
<span id="59">59</span>
<span id="60">60</span>
<span id="61">61</span>
<span id="62">62</span>
<span id="63">63</span>
<span id="64">64</span>
<span id="65">65</span>
<span id="66">66</span>
<span id="67">67</span>
<span id="68">68</span>
<span id="69">69</span>
<span id="70">70</span>
<span id="71">71</span>
<span id="72">72</span>
<span id="73">73</span>
<span id="74">74</span>
<span id="75">75</span>
</pre><pre class="rust"><code><span class="comment">// spell-checker:ignore (vars) zline zlines</span>
<span class="doccomment">//! Iterate over zero-terminated lines.</span>
<span class="kw">use</span> <span class="ident">std::io::BufRead</span>;
<span class="doccomment">/// The zero byte, representing the null character.</span>
<span class="kw">const</span> <span class="ident">ZERO</span>: <span class="ident">u8</span> <span class="op">=</span> <span class="number">0</span>;
<span class="doccomment">/// Returns an iterator over the lines of the given reader.</span>
<span class="doccomment">///</span>
<span class="doccomment">/// The iterator returned from this function will yield instances of</span>
<span class="doccomment">/// [`std::io::Result`]&lt;[`Vec`]&lt;[`u8`]&gt;&gt;, representing the bytes of the line</span>
<span class="doccomment">/// *including* the null character (with the possible exception of the</span>
<span class="doccomment">/// last line, which may not have one).</span>
<span class="doccomment">///</span>
<span class="doccomment">/// # Examples</span>
<span class="doccomment">///</span>
<span class="doccomment">/// ```rust,ignore</span>
<span class="doccomment">/// use std::io::Cursor;</span>
<span class="doccomment">///</span>
<span class="doccomment">/// let cursor = Cursor::new(b&quot;x\0y\0z\0&quot;);</span>
<span class="doccomment">/// let mut iter = zlines(cursor).map(|l| l.unwrap());</span>
<span class="doccomment">/// assert_eq!(iter.next(), Some(b&quot;x\0&quot;.to_vec()));</span>
<span class="doccomment">/// assert_eq!(iter.next(), Some(b&quot;y\0&quot;.to_vec()));</span>
<span class="doccomment">/// assert_eq!(iter.next(), Some(b&quot;z\0&quot;.to_vec()));</span>
<span class="doccomment">/// assert_eq!(iter.next(), None);</span>
<span class="doccomment">/// ```</span>
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">zlines</span><span class="op">&lt;</span><span class="ident">B</span><span class="op">&gt;</span>(<span class="ident">buf</span>: <span class="ident">B</span>) -&gt; <span class="ident">ZLines</span><span class="op">&lt;</span><span class="ident">B</span><span class="op">&gt;</span> {
<span class="ident">ZLines</span> { <span class="ident">buf</span> }
}
<span class="doccomment">/// An iterator over the zero-terminated lines of an instance of `BufRead`.</span>
<span class="kw">pub</span> <span class="kw">struct</span> <span class="ident">ZLines</span><span class="op">&lt;</span><span class="ident">B</span><span class="op">&gt;</span> {
<span class="ident">buf</span>: <span class="ident">B</span>,
}
<span class="kw">impl</span><span class="op">&lt;</span><span class="ident">B</span>: <span class="ident">BufRead</span><span class="op">&gt;</span> <span class="ident">Iterator</span> <span class="kw">for</span> <span class="ident">ZLines</span><span class="op">&lt;</span><span class="ident">B</span><span class="op">&gt;</span> {
<span class="kw">type</span> <span class="ident">Item</span> <span class="op">=</span> <span class="ident">std::io::Result</span><span class="op">&lt;</span><span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">u8</span><span class="op">&gt;</span><span class="op">&gt;</span>;
<span class="kw">fn</span> <span class="ident">next</span>(<span class="kw-2">&amp;mut</span> <span class="self">self</span>) -&gt; <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="ident">std::io::Result</span><span class="op">&lt;</span><span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">u8</span><span class="op">&gt;</span><span class="op">&gt;</span><span class="op">&gt;</span> {
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">buf</span> <span class="op">=</span> <span class="ident">Vec::new</span>();
<span class="kw">match</span> <span class="self">self</span>.<span class="ident">buf</span>.<span class="ident">read_until</span>(<span class="ident">ZERO</span>, <span class="kw-2">&amp;mut</span> <span class="ident">buf</span>) {
<span class="prelude-val">Ok</span>(<span class="number">0</span>) =&gt; <span class="prelude-val">None</span>,
<span class="prelude-val">Ok</span>(<span class="kw">_</span>) =&gt; <span class="prelude-val">Some</span>(<span class="prelude-val">Ok</span>(<span class="ident">buf</span>)),
<span class="prelude-val">Err</span>(<span class="ident">e</span>) =&gt; <span class="prelude-val">Some</span>(<span class="prelude-val">Err</span>(<span class="ident">e</span>)),
}
}
}
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">test</span>)]</span>
<span class="kw">mod</span> <span class="ident">tests</span> {
<span class="kw">use</span> <span class="ident"><span class="kw">crate</span>::lines::zlines</span>;
<span class="kw">use</span> <span class="ident">std::io::Cursor</span>;
<span class="attribute">#[<span class="ident">test</span>]</span>
<span class="kw">fn</span> <span class="ident">test_null_terminated</span>() {
<span class="kw">let</span> <span class="ident">cursor</span> <span class="op">=</span> <span class="ident">Cursor::new</span>(<span class="string">b&quot;x\0y\0z\0&quot;</span>);
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">iter</span> <span class="op">=</span> <span class="ident">zlines</span>(<span class="ident">cursor</span>).<span class="ident">map</span>(<span class="op">|</span><span class="ident">l</span><span class="op">|</span> <span class="ident">l</span>.<span class="ident">unwrap</span>());
<span class="macro">assert_eq!</span>(<span class="ident">iter</span>.<span class="ident">next</span>(), <span class="prelude-val">Some</span>(<span class="string">b&quot;x\0&quot;</span>.<span class="ident">to_vec</span>()));
<span class="macro">assert_eq!</span>(<span class="ident">iter</span>.<span class="ident">next</span>(), <span class="prelude-val">Some</span>(<span class="string">b&quot;y\0&quot;</span>.<span class="ident">to_vec</span>()));
<span class="macro">assert_eq!</span>(<span class="ident">iter</span>.<span class="ident">next</span>(), <span class="prelude-val">Some</span>(<span class="string">b&quot;z\0&quot;</span>.<span class="ident">to_vec</span>()));
<span class="macro">assert_eq!</span>(<span class="ident">iter</span>.<span class="ident">next</span>(), <span class="prelude-val">None</span>);
}
<span class="attribute">#[<span class="ident">test</span>]</span>
<span class="kw">fn</span> <span class="ident">test_not_null_terminated</span>() {
<span class="kw">let</span> <span class="ident">cursor</span> <span class="op">=</span> <span class="ident">Cursor::new</span>(<span class="string">b&quot;x\0y\0z&quot;</span>);
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">iter</span> <span class="op">=</span> <span class="ident">zlines</span>(<span class="ident">cursor</span>).<span class="ident">map</span>(<span class="op">|</span><span class="ident">l</span><span class="op">|</span> <span class="ident">l</span>.<span class="ident">unwrap</span>());
<span class="macro">assert_eq!</span>(<span class="ident">iter</span>.<span class="ident">next</span>(), <span class="prelude-val">Some</span>(<span class="string">b&quot;x\0&quot;</span>.<span class="ident">to_vec</span>()));
<span class="macro">assert_eq!</span>(<span class="ident">iter</span>.<span class="ident">next</span>(), <span class="prelude-val">Some</span>(<span class="string">b&quot;y\0&quot;</span>.<span class="ident">to_vec</span>()));
<span class="macro">assert_eq!</span>(<span class="ident">iter</span>.<span class="ident">next</span>(), <span class="prelude-val">Some</span>(<span class="string">b&quot;z&quot;</span>.<span class="ident">to_vec</span>()));
<span class="macro">assert_eq!</span>(<span class="ident">iter</span>.<span class="ident">next</span>(), <span class="prelude-val">None</span>);
}
}
</code></pre></div>
</section><section id="search" class="content hidden"></section><div id="rustdoc-vars" data-root-path="../../" data-current-crate="uu_head" data-search-index-js="../../search-index.js" data-search-js="../../search.js"></div>
</body></html>
+105 -129
View File
@@ -2583,18 +2583,6 @@
<span id="2582">2582</span>
<span id="2583">2583</span>
<span id="2584">2584</span>
<span id="2585">2585</span>
<span id="2586">2586</span>
<span id="2587">2587</span>
<span id="2588">2588</span>
<span id="2589">2589</span>
<span id="2590">2590</span>
<span id="2591">2591</span>
<span id="2592">2592</span>
<span id="2593">2593</span>
<span id="2594">2594</span>
<span id="2595">2595</span>
<span id="2596">2596</span>
</pre><pre class="rust"><code><span class="comment">// This file is part of the uutils coreutils package.</span>
<span class="comment">//</span>
<span class="comment">// (c) Jeremiah Peschka &lt;jeremiah.peschka@gmail.com&gt;</span>
@@ -2921,16 +2909,16 @@
<span class="kw">struct</span> <span class="ident">PaddingCollection</span> {
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">unix</span>)]</span>
<span class="ident">longest_inode_len</span>: <span class="ident">usize</span>,
<span class="ident">longest_link_count_len</span>: <span class="ident">usize</span>,
<span class="ident">longest_uname_len</span>: <span class="ident">usize</span>,
<span class="ident">longest_group_len</span>: <span class="ident">usize</span>,
<span class="ident">longest_context_len</span>: <span class="ident">usize</span>,
<span class="ident">longest_size_len</span>: <span class="ident">usize</span>,
<span class="ident">inode</span>: <span class="ident">usize</span>,
<span class="ident">link_count</span>: <span class="ident">usize</span>,
<span class="ident">uname</span>: <span class="ident">usize</span>,
<span class="ident">group</span>: <span class="ident">usize</span>,
<span class="ident">context</span>: <span class="ident">usize</span>,
<span class="ident">size</span>: <span class="ident">usize</span>,
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">unix</span>)]</span>
<span class="ident">longest_major_len</span>: <span class="ident">usize</span>,
<span class="ident">major</span>: <span class="ident">usize</span>,
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">unix</span>)]</span>
<span class="ident">longest_minor_len</span>: <span class="ident">usize</span>,
<span class="ident">minor</span>: <span class="ident">usize</span>,
}
<span class="kw">impl</span> <span class="ident">Config</span> {
@@ -3902,9 +3890,9 @@ only ignore &#39;.&#39; and &#39;..&#39;.&quot;</span>,
)
}
<span class="doccomment">/// Represents a Path along with it&#39;s associated data</span>
<span class="doccomment">/// Any data that will be reused several times makes sense to be added to this structure</span>
<span class="doccomment">/// Caching data here helps eliminate redundant syscalls to fetch same information</span>
<span class="doccomment">/// Represents a Path along with it&#39;s associated data.</span>
<span class="doccomment">/// Any data that will be reused several times makes sense to be added to this structure.</span>
<span class="doccomment">/// Caching data here helps eliminate redundant syscalls to fetch same information.</span>
<span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Debug</span>)]</span>
<span class="kw">struct</span> <span class="ident">PathData</span> {
<span class="comment">// Result&lt;MetaData&gt; got from symlink_metadata() or metadata() based on config</span>
@@ -4305,92 +4293,10 @@ only ignore &#39;.&#39; and &#39;..&#39;.&quot;</span>,
<span class="comment">// option, print the security context to the left of the size column.</span>
<span class="kw">if</span> <span class="ident">config</span>.<span class="ident">format</span> <span class="op">==</span> <span class="ident">Format::Long</span> {
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">unix</span>)]</span>
<span class="kw">let</span> (
<span class="kw-2">mut</span> <span class="ident">longest_inode_len</span>,
<span class="kw-2">mut</span> <span class="ident">longest_link_count_len</span>,
<span class="kw-2">mut</span> <span class="ident">longest_uname_len</span>,
<span class="kw-2">mut</span> <span class="ident">longest_group_len</span>,
<span class="kw-2">mut</span> <span class="ident">longest_context_len</span>,
<span class="kw-2">mut</span> <span class="ident">longest_size_len</span>,
<span class="kw-2">mut</span> <span class="ident">longest_major_len</span>,
<span class="kw-2">mut</span> <span class="ident">longest_minor_len</span>,
) <span class="op">=</span> (<span class="number">1</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">1</span>);
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">not</span>(<span class="ident">unix</span>))]</span>
<span class="kw">let</span> (
<span class="kw-2">mut</span> <span class="ident">longest_link_count_len</span>,
<span class="kw-2">mut</span> <span class="ident">longest_uname_len</span>,
<span class="kw-2">mut</span> <span class="ident">longest_group_len</span>,
<span class="kw-2">mut</span> <span class="ident">longest_context_len</span>,
<span class="kw-2">mut</span> <span class="ident">longest_size_len</span>,
) <span class="op">=</span> (<span class="number">1</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">1</span>);
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">unix</span>)]</span>
<span class="kw">for</span> <span class="ident">item</span> <span class="kw">in</span> <span class="ident">items</span> {
<span class="kw">let</span> <span class="ident">context_len</span> <span class="op">=</span> <span class="ident">item</span>.<span class="ident">security_context</span>.<span class="ident">len</span>();
<span class="kw">let</span> (<span class="ident">link_count_len</span>, <span class="ident">uname_len</span>, <span class="ident">group_len</span>, <span class="ident">size_len</span>, <span class="ident">major_len</span>, <span class="ident">minor_len</span>, <span class="ident">inode_len</span>) <span class="op">=</span>
<span class="ident">display_dir_entry_size</span>(<span class="ident">item</span>, <span class="ident">config</span>, <span class="ident">out</span>);
<span class="ident">longest_inode_len</span> <span class="op">=</span> <span class="ident">inode_len</span>.<span class="ident">max</span>(<span class="ident">longest_inode_len</span>);
<span class="ident">longest_link_count_len</span> <span class="op">=</span> <span class="ident">link_count_len</span>.<span class="ident">max</span>(<span class="ident">longest_link_count_len</span>);
<span class="ident">longest_uname_len</span> <span class="op">=</span> <span class="ident">uname_len</span>.<span class="ident">max</span>(<span class="ident">longest_uname_len</span>);
<span class="ident">longest_group_len</span> <span class="op">=</span> <span class="ident">group_len</span>.<span class="ident">max</span>(<span class="ident">longest_group_len</span>);
<span class="kw">if</span> <span class="ident">config</span>.<span class="ident">context</span> {
<span class="ident">longest_context_len</span> <span class="op">=</span> <span class="ident">context_len</span>.<span class="ident">max</span>(<span class="ident">longest_context_len</span>);
}
<span class="kw">if</span> <span class="ident">items</span>.<span class="ident">len</span>() <span class="op">==</span> <span class="number">1usize</span> {
<span class="ident">longest_size_len</span> <span class="op">=</span> <span class="number">0usize</span>;
<span class="ident">longest_major_len</span> <span class="op">=</span> <span class="number">0usize</span>;
<span class="ident">longest_minor_len</span> <span class="op">=</span> <span class="number">0usize</span>;
} <span class="kw">else</span> {
<span class="ident">longest_major_len</span> <span class="op">=</span> <span class="ident">major_len</span>.<span class="ident">max</span>(<span class="ident">longest_major_len</span>);
<span class="ident">longest_minor_len</span> <span class="op">=</span> <span class="ident">minor_len</span>.<span class="ident">max</span>(<span class="ident">longest_minor_len</span>);
<span class="ident">longest_size_len</span> <span class="op">=</span> <span class="ident">size_len</span>
.<span class="ident">max</span>(<span class="ident">longest_size_len</span>)
.<span class="ident">max</span>(<span class="ident">longest_major_len</span> <span class="op">+</span> <span class="ident">longest_minor_len</span> <span class="op">+</span> <span class="number">2usize</span>);
}
}
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">not</span>(<span class="ident">unix</span>))]</span>
<span class="kw">for</span> <span class="ident">item</span> <span class="kw">in</span> <span class="ident">items</span> {
<span class="kw">let</span> <span class="ident">context_len</span> <span class="op">=</span> <span class="ident">item</span>.<span class="ident">security_context</span>.<span class="ident">len</span>();
<span class="kw">let</span> (
<span class="ident">link_count_len</span>,
<span class="ident">uname_len</span>,
<span class="ident">group_len</span>,
<span class="ident">size_len</span>,
<span class="ident">_major_len</span>,
<span class="ident">_minor_len</span>,
<span class="ident">_inode_len</span>,
) <span class="op">=</span> <span class="ident">display_dir_entry_size</span>(<span class="ident">item</span>, <span class="ident">config</span>, <span class="ident">out</span>);
<span class="ident">longest_link_count_len</span> <span class="op">=</span> <span class="ident">link_count_len</span>.<span class="ident">max</span>(<span class="ident">longest_link_count_len</span>);
<span class="ident">longest_uname_len</span> <span class="op">=</span> <span class="ident">uname_len</span>.<span class="ident">max</span>(<span class="ident">longest_uname_len</span>);
<span class="ident">longest_group_len</span> <span class="op">=</span> <span class="ident">group_len</span>.<span class="ident">max</span>(<span class="ident">longest_group_len</span>);
<span class="kw">if</span> <span class="ident">config</span>.<span class="ident">context</span> {
<span class="ident">longest_context_len</span> <span class="op">=</span> <span class="ident">context_len</span>.<span class="ident">max</span>(<span class="ident">longest_context_len</span>);
}
<span class="ident">longest_size_len</span> <span class="op">=</span> <span class="ident">size_len</span>.<span class="ident">max</span>(<span class="ident">longest_size_len</span>);
}
<span class="kw">let</span> <span class="ident">padding_collection</span> <span class="op">=</span> <span class="ident">calculate_padding_collection</span>(<span class="ident">items</span>, <span class="ident">config</span>, <span class="ident">out</span>);
<span class="kw">for</span> <span class="ident">item</span> <span class="kw">in</span> <span class="ident">items</span> {
<span class="ident">display_item_long</span>(
<span class="ident">item</span>,
<span class="kw-2">&amp;</span><span class="ident">PaddingCollection</span> {
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">unix</span>)]</span>
<span class="ident">longest_inode_len</span>,
<span class="ident">longest_link_count_len</span>,
<span class="ident">longest_uname_len</span>,
<span class="ident">longest_group_len</span>,
<span class="ident">longest_context_len</span>,
<span class="ident">longest_size_len</span>,
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">unix</span>)]</span>
<span class="ident">longest_major_len</span>,
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">unix</span>)]</span>
<span class="ident">longest_minor_len</span>,
},
<span class="ident">config</span>,
<span class="ident">out</span>,
);
<span class="ident">display_item_long</span>(<span class="ident">item</span>, <span class="kw-2">&amp;</span><span class="ident">padding_collection</span>, <span class="ident">config</span>, <span class="ident">out</span>);
}
} <span class="kw">else</span> {
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">longest_context_len</span> <span class="op">=</span> <span class="number">1</span>;
@@ -4563,11 +4469,7 @@ only ignore &#39;.&#39; and &#39;..&#39;.&quot;</span>,
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">unix</span>)]</span>
{
<span class="kw">if</span> <span class="ident">config</span>.<span class="ident">inode</span> {
<span class="kw">let</span> <span class="kw">_</span> <span class="op">=</span> <span class="macro">write!</span>(
<span class="ident">out</span>,
<span class="string">&quot;{} &quot;</span>,
<span class="ident">pad_left</span>(<span class="kw-2">&amp;</span><span class="ident">get_inode</span>(<span class="ident">md</span>), <span class="ident">padding</span>.<span class="ident">longest_inode_len</span>),
);
<span class="kw">let</span> <span class="kw">_</span> <span class="op">=</span> <span class="macro">write!</span>(<span class="ident">out</span>, <span class="string">&quot;{} &quot;</span>, <span class="ident">pad_left</span>(<span class="kw-2">&amp;</span><span class="ident">get_inode</span>(<span class="ident">md</span>), <span class="ident">padding</span>.<span class="ident">inode</span>),);
}
}
@@ -4582,14 +4484,14 @@ only ignore &#39;.&#39; and &#39;..&#39;.&quot;</span>,
} <span class="kw">else</span> {
<span class="string">&quot;&quot;</span>
},
<span class="ident">pad_left</span>(<span class="kw-2">&amp;</span><span class="ident">display_symlink_count</span>(<span class="ident">md</span>), <span class="ident">padding</span>.<span class="ident">longest_link_count_len</span>),
<span class="ident">pad_left</span>(<span class="kw-2">&amp;</span><span class="ident">display_symlink_count</span>(<span class="ident">md</span>), <span class="ident">padding</span>.<span class="ident">link_count</span>),
);
<span class="kw">if</span> <span class="ident">config</span>.<span class="ident">long</span>.<span class="ident">owner</span> {
<span class="kw">let</span> <span class="kw">_</span> <span class="op">=</span> <span class="macro">write!</span>(
<span class="ident">out</span>,
<span class="string">&quot; {}&quot;</span>,
<span class="ident">pad_right</span>(<span class="kw-2">&amp;</span><span class="ident">display_uname</span>(<span class="ident">md</span>, <span class="ident">config</span>), <span class="ident">padding</span>.<span class="ident">longest_uname_len</span>),
<span class="ident">pad_right</span>(<span class="kw-2">&amp;</span><span class="ident">display_uname</span>(<span class="ident">md</span>, <span class="ident">config</span>), <span class="ident">padding</span>.<span class="ident">uname</span>),
);
}
@@ -4597,7 +4499,7 @@ only ignore &#39;.&#39; and &#39;..&#39;.&quot;</span>,
<span class="kw">let</span> <span class="kw">_</span> <span class="op">=</span> <span class="macro">write!</span>(
<span class="ident">out</span>,
<span class="string">&quot; {}&quot;</span>,
<span class="ident">pad_right</span>(<span class="kw-2">&amp;</span><span class="ident">display_group</span>(<span class="ident">md</span>, <span class="ident">config</span>), <span class="ident">padding</span>.<span class="ident">longest_group_len</span>),
<span class="ident">pad_right</span>(<span class="kw-2">&amp;</span><span class="ident">display_group</span>(<span class="ident">md</span>, <span class="ident">config</span>), <span class="ident">padding</span>.<span class="ident">group</span>),
);
}
@@ -4605,7 +4507,7 @@ only ignore &#39;.&#39; and &#39;..&#39;.&quot;</span>,
<span class="kw">let</span> <span class="kw">_</span> <span class="op">=</span> <span class="macro">write!</span>(
<span class="ident">out</span>,
<span class="string">&quot; {}&quot;</span>,
<span class="ident">pad_right</span>(<span class="kw-2">&amp;</span><span class="ident">item</span>.<span class="ident">security_context</span>, <span class="ident">padding</span>.<span class="ident">longest_context_len</span>),
<span class="ident">pad_right</span>(<span class="kw-2">&amp;</span><span class="ident">item</span>.<span class="ident">security_context</span>, <span class="ident">padding</span>.<span class="ident">context</span>),
);
}
@@ -4615,13 +4517,13 @@ only ignore &#39;.&#39; and &#39;..&#39;.&quot;</span>,
<span class="kw">let</span> <span class="kw">_</span> <span class="op">=</span> <span class="macro">write!</span>(
<span class="ident">out</span>,
<span class="string">&quot; {}&quot;</span>,
<span class="ident">pad_right</span>(<span class="kw-2">&amp;</span><span class="ident">display_uname</span>(<span class="ident">md</span>, <span class="ident">config</span>), <span class="ident">padding</span>.<span class="ident">longest_uname_len</span>),
<span class="ident">pad_right</span>(<span class="kw-2">&amp;</span><span class="ident">display_uname</span>(<span class="ident">md</span>, <span class="ident">config</span>), <span class="ident">padding</span>.<span class="ident">uname</span>),
);
}
<span class="kw">match</span> <span class="ident">display_size_or_rdev</span>(<span class="ident">md</span>, <span class="ident">config</span>) {
<span class="ident">SizeOrDeviceId::Size</span>(<span class="ident">size</span>) =&gt; {
<span class="kw">let</span> <span class="kw">_</span> <span class="op">=</span> <span class="macro">write!</span>(<span class="ident">out</span>, <span class="string">&quot; {}&quot;</span>, <span class="ident">pad_left</span>(<span class="kw-2">&amp;</span><span class="ident">size</span>, <span class="ident">padding</span>.<span class="ident">longest_size_len</span>),);
<span class="kw">let</span> <span class="kw">_</span> <span class="op">=</span> <span class="macro">write!</span>(<span class="ident">out</span>, <span class="string">&quot; {}&quot;</span>, <span class="ident">pad_left</span>(<span class="kw-2">&amp;</span><span class="ident">size</span>, <span class="ident">padding</span>.<span class="ident">size</span>),);
}
<span class="ident">SizeOrDeviceId::Device</span>(<span class="ident">major</span>, <span class="ident">minor</span>) =&gt; {
<span class="kw">let</span> <span class="kw">_</span> <span class="op">=</span> <span class="macro">write!</span>(
@@ -4632,10 +4534,10 @@ only ignore &#39;.&#39; and &#39;..&#39;.&quot;</span>,
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">not</span>(<span class="ident">unix</span>))]</span>
<span class="number">0usize</span>,
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">unix</span>)]</span>
<span class="ident">padding</span>.<span class="ident">longest_major_len</span>.<span class="ident">max</span>(
<span class="ident">padding</span>.<span class="ident">major</span>.<span class="ident">max</span>(
<span class="ident">padding</span>
.<span class="ident">longest_size_len</span>
.<span class="ident">saturating_sub</span>(<span class="ident">padding</span>.<span class="ident">longest_minor_len</span>.<span class="ident">saturating_add</span>(<span class="number">2usize</span>))
.<span class="ident">size</span>
.<span class="ident">saturating_sub</span>(<span class="ident">padding</span>.<span class="ident">minor</span>.<span class="ident">saturating_add</span>(<span class="number">2usize</span>))
)
),
<span class="ident">pad_left</span>(
@@ -4643,7 +4545,7 @@ only ignore &#39;.&#39; and &#39;..&#39;.&quot;</span>,
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">not</span>(<span class="ident">unix</span>))]</span>
<span class="number">0usize</span>,
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">unix</span>)]</span>
<span class="ident">padding</span>.<span class="ident">longest_minor_len</span>,
<span class="ident">padding</span>.<span class="ident">minor</span>,
),
);
}
@@ -4657,7 +4559,7 @@ only ignore &#39;.&#39; and &#39;..&#39;.&quot;</span>,
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">unix</span>)]</span>
{
<span class="kw">if</span> <span class="ident">config</span>.<span class="ident">inode</span> {
<span class="kw">let</span> <span class="kw">_</span> <span class="op">=</span> <span class="macro">write!</span>(<span class="ident">out</span>, <span class="string">&quot;{} &quot;</span>, <span class="ident">pad_left</span>(<span class="string">&quot;?&quot;</span>, <span class="ident">padding</span>.<span class="ident">longest_inode_len</span>),);
<span class="kw">let</span> <span class="kw">_</span> <span class="op">=</span> <span class="macro">write!</span>(<span class="ident">out</span>, <span class="string">&quot;{} &quot;</span>, <span class="ident">pad_left</span>(<span class="string">&quot;?&quot;</span>, <span class="ident">padding</span>.<span class="ident">inode</span>),);
}
}
@@ -4705,29 +4607,29 @@ only ignore &#39;.&#39; and &#39;..&#39;.&quot;</span>,
} <span class="kw">else</span> {
<span class="string">&quot;&quot;</span>
},
<span class="ident">pad_left</span>(<span class="string">&quot;?&quot;</span>, <span class="ident">padding</span>.<span class="ident">longest_link_count_len</span>),
<span class="ident">pad_left</span>(<span class="string">&quot;?&quot;</span>, <span class="ident">padding</span>.<span class="ident">link_count</span>),
);
<span class="kw">if</span> <span class="ident">config</span>.<span class="ident">long</span>.<span class="ident">owner</span> {
<span class="kw">let</span> <span class="kw">_</span> <span class="op">=</span> <span class="macro">write!</span>(<span class="ident">out</span>, <span class="string">&quot; {}&quot;</span>, <span class="ident">pad_right</span>(<span class="string">&quot;?&quot;</span>, <span class="ident">padding</span>.<span class="ident">longest_uname_len</span>));
<span class="kw">let</span> <span class="kw">_</span> <span class="op">=</span> <span class="macro">write!</span>(<span class="ident">out</span>, <span class="string">&quot; {}&quot;</span>, <span class="ident">pad_right</span>(<span class="string">&quot;?&quot;</span>, <span class="ident">padding</span>.<span class="ident">uname</span>));
}
<span class="kw">if</span> <span class="ident">config</span>.<span class="ident">long</span>.<span class="ident">group</span> {
<span class="kw">let</span> <span class="kw">_</span> <span class="op">=</span> <span class="macro">write!</span>(<span class="ident">out</span>, <span class="string">&quot; {}&quot;</span>, <span class="ident">pad_right</span>(<span class="string">&quot;?&quot;</span>, <span class="ident">padding</span>.<span class="ident">longest_group_len</span>));
<span class="kw">let</span> <span class="kw">_</span> <span class="op">=</span> <span class="macro">write!</span>(<span class="ident">out</span>, <span class="string">&quot; {}&quot;</span>, <span class="ident">pad_right</span>(<span class="string">&quot;?&quot;</span>, <span class="ident">padding</span>.<span class="ident">group</span>));
}
<span class="kw">if</span> <span class="ident">config</span>.<span class="ident">context</span> {
<span class="kw">let</span> <span class="kw">_</span> <span class="op">=</span> <span class="macro">write!</span>(
<span class="ident">out</span>,
<span class="string">&quot; {}&quot;</span>,
<span class="ident">pad_right</span>(<span class="kw-2">&amp;</span><span class="ident">item</span>.<span class="ident">security_context</span>, <span class="ident">padding</span>.<span class="ident">longest_context_len</span>)
<span class="ident">pad_right</span>(<span class="kw-2">&amp;</span><span class="ident">item</span>.<span class="ident">security_context</span>, <span class="ident">padding</span>.<span class="ident">context</span>)
);
}
<span class="comment">// Author is only different from owner on GNU/Hurd, so we reuse</span>
<span class="comment">// the owner, since GNU/Hurd is not currently supported by Rust.</span>
<span class="kw">if</span> <span class="ident">config</span>.<span class="ident">long</span>.<span class="ident">author</span> {
<span class="kw">let</span> <span class="kw">_</span> <span class="op">=</span> <span class="macro">write!</span>(<span class="ident">out</span>, <span class="string">&quot; {}&quot;</span>, <span class="ident">pad_right</span>(<span class="string">&quot;?&quot;</span>, <span class="ident">padding</span>.<span class="ident">longest_uname_len</span>));
<span class="kw">let</span> <span class="kw">_</span> <span class="op">=</span> <span class="macro">write!</span>(<span class="ident">out</span>, <span class="string">&quot; {}&quot;</span>, <span class="ident">pad_right</span>(<span class="string">&quot;?&quot;</span>, <span class="ident">padding</span>.<span class="ident">uname</span>));
}
<span class="kw">let</span> <span class="ident">dfn</span> <span class="op">=</span> <span class="ident">display_file_name</span>(<span class="ident">item</span>, <span class="ident">config</span>, <span class="prelude-val">None</span>, <span class="number">0</span>, <span class="ident">out</span>).<span class="ident">contents</span>;
@@ -4736,7 +4638,7 @@ only ignore &#39;.&#39; and &#39;..&#39;.&quot;</span>,
<span class="kw">let</span> <span class="kw">_</span> <span class="op">=</span> <span class="macro">writeln!</span>(
<span class="ident">out</span>,
<span class="string">&quot; {} {} {}&quot;</span>,
<span class="ident">pad_left</span>(<span class="string">&quot;?&quot;</span>, <span class="ident">padding</span>.<span class="ident">longest_size_len</span>),
<span class="ident">pad_left</span>(<span class="string">&quot;?&quot;</span>, <span class="ident">padding</span>.<span class="ident">size</span>),
<span class="ident">pad_left</span>(<span class="string">&quot;?&quot;</span>, <span class="ident">date_len</span>),
<span class="ident">dfn</span>,
);
@@ -5191,6 +5093,80 @@ only ignore &#39;.&#39; and &#39;..&#39;.&quot;</span>,
<span class="ident">substitute_string</span>
}
}
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">unix</span>)]</span>
<span class="kw">fn</span> <span class="ident">calculate_padding_collection</span>(
<span class="ident">items</span>: <span class="kw-2">&amp;</span>[<span class="ident">PathData</span>],
<span class="ident">config</span>: <span class="kw-2">&amp;</span><span class="ident">Config</span>,
<span class="ident">out</span>: <span class="kw-2">&amp;mut</span> <span class="ident">BufWriter</span><span class="op">&lt;</span><span class="ident">Stdout</span><span class="op">&gt;</span>,
) -&gt; <span class="ident">PaddingCollection</span> {
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">padding_collections</span> <span class="op">=</span> <span class="ident">PaddingCollection</span> {
<span class="ident">inode</span>: <span class="number">1</span>,
<span class="ident">link_count</span>: <span class="number">1</span>,
<span class="ident">uname</span>: <span class="number">1</span>,
<span class="ident">group</span>: <span class="number">1</span>,
<span class="ident">context</span>: <span class="number">1</span>,
<span class="ident">size</span>: <span class="number">1</span>,
<span class="ident">major</span>: <span class="number">1</span>,
<span class="ident">minor</span>: <span class="number">1</span>,
};
<span class="kw">for</span> <span class="ident">item</span> <span class="kw">in</span> <span class="ident">items</span> {
<span class="kw">let</span> <span class="ident">context_len</span> <span class="op">=</span> <span class="ident">item</span>.<span class="ident">security_context</span>.<span class="ident">len</span>();
<span class="kw">let</span> (<span class="ident">link_count_len</span>, <span class="ident">uname_len</span>, <span class="ident">group_len</span>, <span class="ident">size_len</span>, <span class="ident">major_len</span>, <span class="ident">minor_len</span>, <span class="ident">inode_len</span>) <span class="op">=</span>
<span class="ident">display_dir_entry_size</span>(<span class="ident">item</span>, <span class="ident">config</span>, <span class="ident">out</span>);
<span class="ident">padding_collections</span>.<span class="ident">inode</span> <span class="op">=</span> <span class="ident">inode_len</span>.<span class="ident">max</span>(<span class="ident">padding_collections</span>.<span class="ident">inode</span>);
<span class="ident">padding_collections</span>.<span class="ident">link_count</span> <span class="op">=</span> <span class="ident">link_count_len</span>.<span class="ident">max</span>(<span class="ident">padding_collections</span>.<span class="ident">link_count</span>);
<span class="ident">padding_collections</span>.<span class="ident">uname</span> <span class="op">=</span> <span class="ident">uname_len</span>.<span class="ident">max</span>(<span class="ident">padding_collections</span>.<span class="ident">uname</span>);
<span class="ident">padding_collections</span>.<span class="ident">group</span> <span class="op">=</span> <span class="ident">group_len</span>.<span class="ident">max</span>(<span class="ident">padding_collections</span>.<span class="ident">group</span>);
<span class="kw">if</span> <span class="ident">config</span>.<span class="ident">context</span> {
<span class="ident">padding_collections</span>.<span class="ident">context</span> <span class="op">=</span> <span class="ident">context_len</span>.<span class="ident">max</span>(<span class="ident">padding_collections</span>.<span class="ident">context</span>);
}
<span class="kw">if</span> <span class="ident">items</span>.<span class="ident">len</span>() <span class="op">==</span> <span class="number">1usize</span> {
<span class="ident">padding_collections</span>.<span class="ident">size</span> <span class="op">=</span> <span class="number">0usize</span>;
<span class="ident">padding_collections</span>.<span class="ident">major</span> <span class="op">=</span> <span class="number">0usize</span>;
<span class="ident">padding_collections</span>.<span class="ident">minor</span> <span class="op">=</span> <span class="number">0usize</span>;
} <span class="kw">else</span> {
<span class="ident">padding_collections</span>.<span class="ident">major</span> <span class="op">=</span> <span class="ident">major_len</span>.<span class="ident">max</span>(<span class="ident">padding_collections</span>.<span class="ident">major</span>);
<span class="ident">padding_collections</span>.<span class="ident">minor</span> <span class="op">=</span> <span class="ident">minor_len</span>.<span class="ident">max</span>(<span class="ident">padding_collections</span>.<span class="ident">minor</span>);
<span class="ident">padding_collections</span>.<span class="ident">size</span> <span class="op">=</span> <span class="ident">size_len</span>
.<span class="ident">max</span>(<span class="ident">padding_collections</span>.<span class="ident">size</span>)
.<span class="ident">max</span>(<span class="ident">padding_collections</span>.<span class="ident">major</span> <span class="op">+</span> <span class="ident">padding_collections</span>.<span class="ident">minor</span> <span class="op">+</span> <span class="number">2usize</span>);
}
}
<span class="ident">padding_collections</span>
}
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">not</span>(<span class="ident">unix</span>))]</span>
<span class="kw">fn</span> <span class="ident">calculate_padding_collection</span>(
<span class="ident">items</span>: <span class="kw-2">&amp;</span>[<span class="ident">PathData</span>],
<span class="ident">config</span>: <span class="kw-2">&amp;</span><span class="ident">Config</span>,
<span class="ident">out</span>: <span class="kw-2">&amp;mut</span> <span class="ident">BufWriter</span><span class="op">&lt;</span><span class="ident">Stdout</span><span class="op">&gt;</span>,
) -&gt; <span class="ident">PaddingCollection</span> {
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">padding_collections</span> <span class="op">=</span> <span class="ident">PaddingCollection</span> {
<span class="ident">link_count</span>: <span class="number">1</span>,
<span class="ident">uname</span>: <span class="number">1</span>,
<span class="ident">group</span>: <span class="number">1</span>,
<span class="ident">context</span>: <span class="number">1</span>,
<span class="ident">size</span>: <span class="number">1</span>,
};
<span class="kw">for</span> <span class="ident">item</span> <span class="kw">in</span> <span class="ident">items</span> {
<span class="kw">let</span> <span class="ident">context_len</span> <span class="op">=</span> <span class="ident">item</span>.<span class="ident">security_context</span>.<span class="ident">len</span>();
<span class="kw">let</span> (<span class="ident">link_count_len</span>, <span class="ident">uname_len</span>, <span class="ident">group_len</span>, <span class="ident">size_len</span>, <span class="ident">_major_len</span>, <span class="ident">_minor_len</span>, <span class="ident">_inode_len</span>) <span class="op">=</span>
<span class="ident">display_dir_entry_size</span>(<span class="ident">item</span>, <span class="ident">config</span>, <span class="ident">out</span>);
<span class="ident">padding_collections</span>.<span class="ident">link_count</span> <span class="op">=</span> <span class="ident">link_count_len</span>.<span class="ident">max</span>(<span class="ident">padding_collections</span>.<span class="ident">link_count</span>);
<span class="ident">padding_collections</span>.<span class="ident">uname</span> <span class="op">=</span> <span class="ident">uname_len</span>.<span class="ident">max</span>(<span class="ident">padding_collections</span>.<span class="ident">uname</span>);
<span class="ident">padding_collections</span>.<span class="ident">group</span> <span class="op">=</span> <span class="ident">group_len</span>.<span class="ident">max</span>(<span class="ident">padding_collections</span>.<span class="ident">group</span>);
<span class="kw">if</span> <span class="ident">config</span>.<span class="ident">context</span> {
<span class="ident">padding_collections</span>.<span class="ident">context</span> <span class="op">=</span> <span class="ident">context_len</span>.<span class="ident">max</span>(<span class="ident">padding_collections</span>.<span class="ident">context</span>);
}
<span class="ident">padding_collections</span>.<span class="ident">size</span> <span class="op">=</span> <span class="ident">size_len</span>.<span class="ident">max</span>(<span class="ident">padding_collections</span>.<span class="ident">size</span>);
}
<span class="ident">padding_collections</span>
}
</code></pre></div>
</section><section id="search" class="content hidden"></section><div id="rustdoc-vars" data-root-path="../../" data-current-crate="uu_ls" data-search-index-js="../../search-index.js" data-search-js="../../search.js"></div>
</body></html>
+32 -20
View File
@@ -153,6 +153,12 @@
<span id="152">152</span>
<span id="153">153</span>
<span id="154">154</span>
<span id="155">155</span>
<span id="156">156</span>
<span id="157">157</span>
<span id="158">158</span>
<span id="159">159</span>
<span id="160">160</span>
</pre><pre class="rust"><code><span class="comment">// * This file is part of the uutils coreutils package.</span>
<span class="comment">// *</span>
<span class="comment">// * (c) Alex Lyon &lt;arcterus@mail.com&gt;</span>
@@ -164,8 +170,7 @@
<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="kw">use</span> <span class="ident">std::fs::File</span>;
<span class="kw">use</span> <span class="ident">std::io</span>::{<span class="ident">stdin</span>, <span class="ident">BufRead</span>, <span class="ident">BufReader</span>, <span class="ident">Read</span>};
<span class="kw">use</span> <span class="ident">std::iter::repeat</span>;
<span class="kw">use</span> <span class="ident">std::io</span>::{<span class="ident">stdin</span>, <span class="ident">stdout</span>, <span class="ident">BufRead</span>, <span class="ident">BufReader</span>, <span class="ident">Read</span>, <span class="ident">Write</span>};
<span class="kw">use</span> <span class="ident">std::path::Path</span>;
<span class="kw">use</span> <span class="ident">uucore::error</span>::{<span class="ident">FromIo</span>, <span class="ident">UResult</span>};
@@ -232,7 +237,7 @@ FILE, separated by TABs, to standard output.&quot;</span>;
}
<span class="kw">fn</span> <span class="ident">paste</span>(<span class="ident">filenames</span>: <span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">String</span><span class="op">&gt;</span>, <span class="ident">serial</span>: <span class="ident">bool</span>, <span class="ident">delimiters</span>: <span class="kw-2">&amp;</span><span class="ident">str</span>) -&gt; <span class="ident">UResult</span><span class="op">&lt;</span>()<span class="op">&gt;</span> {
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">files</span> <span class="op">=</span> <span class="macro">vec!</span>[];
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">files</span> <span class="op">=</span> <span class="ident">Vec::with_capacity</span>(<span class="ident">filenames</span>.<span class="ident">len</span>());
<span class="kw">for</span> <span class="ident">name</span> <span class="kw">in</span> <span class="ident">filenames</span> {
<span class="kw">let</span> <span class="ident">file</span> <span class="op">=</span> <span class="kw">if</span> <span class="ident">name</span> <span class="op">==</span> <span class="string">&quot;-&quot;</span> {
<span class="prelude-val">None</span>
@@ -244,55 +249,62 @@ FILE, separated by TABs, to standard output.&quot;</span>;
<span class="ident">files</span>.<span class="ident">push</span>(<span class="ident">file</span>);
}
<span class="kw">let</span> <span class="ident">delimiters</span>: <span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">String</span><span class="op">&gt;</span> <span class="op">=</span> <span class="ident">unescape</span>(<span class="ident">delimiters</span>)
.<span class="ident">chars</span>()
.<span class="ident">map</span>(<span class="op">|</span><span class="ident">x</span><span class="op">|</span> <span class="ident">x</span>.<span class="ident">to_string</span>())
.<span class="ident">collect</span>();
<span class="kw">let</span> <span class="ident">delimiters</span>: <span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">char</span><span class="op">&gt;</span> <span class="op">=</span> <span class="ident">unescape</span>(<span class="ident">delimiters</span>).<span class="ident">chars</span>().<span class="ident">collect</span>();
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">delim_count</span> <span class="op">=</span> <span class="number">0</span>;
<span class="kw">let</span> <span class="ident">stdout</span> <span class="op">=</span> <span class="ident">stdout</span>();
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">stdout</span> <span class="op">=</span> <span class="ident">stdout</span>.<span class="ident">lock</span>();
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">output</span> <span class="op">=</span> <span class="ident">String::new</span>();
<span class="kw">if</span> <span class="ident">serial</span> {
<span class="kw">for</span> <span class="ident">file</span> <span class="kw">in</span> <span class="kw-2">&amp;mut</span> <span class="ident">files</span> {
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">output</span> <span class="op">=</span> <span class="ident">String::new</span>();
<span class="ident">output</span>.<span class="ident">clear</span>();
<span class="kw">loop</span> {
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">line</span> <span class="op">=</span> <span class="ident">String::new</span>();
<span class="kw">match</span> <span class="ident">read_line</span>(<span class="ident">file</span>.<span class="ident">as_mut</span>(), <span class="kw-2">&amp;mut</span> <span class="ident">line</span>) {
<span class="kw">match</span> <span class="ident">read_line</span>(<span class="ident">file</span>.<span class="ident">as_mut</span>(), <span class="kw-2">&amp;mut</span> <span class="ident">output</span>) {
<span class="prelude-val">Ok</span>(<span class="number">0</span>) =&gt; <span class="kw">break</span>,
<span class="prelude-val">Ok</span>(<span class="kw">_</span>) =&gt; {
<span class="ident">output</span>.<span class="ident">push_str</span>(<span class="ident">line</span>.<span class="ident">trim_end</span>());
<span class="ident">output</span>.<span class="ident">push_str</span>(<span class="kw-2">&amp;</span><span class="ident">delimiters</span>[<span class="ident">delim_count</span> <span class="op">%</span> <span class="ident">delimiters</span>.<span class="ident">len</span>()]);
<span class="kw">if</span> <span class="ident">output</span>.<span class="ident">ends_with</span>(<span class="string">&#39;\n&#39;</span>) {
<span class="ident">output</span>.<span class="ident">pop</span>();
}
<span class="ident">output</span>.<span class="ident">push</span>(<span class="ident">delimiters</span>[<span class="ident">delim_count</span> <span class="op">%</span> <span class="ident">delimiters</span>.<span class="ident">len</span>()]);
}
<span class="prelude-val">Err</span>(<span class="ident">e</span>) =&gt; <span class="kw">return</span> <span class="prelude-val">Err</span>(<span class="ident">e</span>.<span class="ident">map_err_context</span>(<span class="ident">String::new</span>)),
}
<span class="ident">delim_count</span> <span class="op">+</span><span class="op">=</span> <span class="number">1</span>;
}
<span class="macro">println!</span>(<span class="string">&quot;{}&quot;</span>, <span class="kw-2">&amp;</span><span class="ident">output</span>[..<span class="ident">output</span>.<span class="ident">len</span>() <span class="op">-</span> <span class="number">1</span>]);
<span class="ident">output</span>.<span class="ident">pop</span>();
<span class="macro">writeln!</span>(<span class="ident">stdout</span>, <span class="string">&quot;{}&quot;</span>, <span class="ident">output</span>)<span class="question-mark">?</span>;
}
} <span class="kw">else</span> {
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">eof</span>: <span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">bool</span><span class="op">&gt;</span> <span class="op">=</span> <span class="ident">repeat</span>(<span class="bool-val">false</span>).<span class="ident">take</span>(<span class="ident">files</span>.<span class="ident">len</span>()).<span class="ident">collect</span>();
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">eof</span> <span class="op">=</span> <span class="macro">vec!</span>[<span class="bool-val">false</span>; <span class="ident">files</span>.<span class="ident">len</span>()];
<span class="kw">loop</span> {
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">output</span> <span class="op">=</span> <span class="ident">String::new</span>();
<span class="ident">output</span>.<span class="ident">clear</span>();
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">eof_count</span> <span class="op">=</span> <span class="number">0</span>;
<span class="kw">for</span> (<span class="ident">i</span>, <span class="ident">file</span>) <span class="kw">in</span> <span class="ident">files</span>.<span class="ident">iter_mut</span>().<span class="ident">enumerate</span>() {
<span class="kw">if</span> <span class="ident">eof</span>[<span class="ident">i</span>] {
<span class="ident">eof_count</span> <span class="op">+</span><span class="op">=</span> <span class="number">1</span>;
} <span class="kw">else</span> {
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">line</span> <span class="op">=</span> <span class="ident">String::new</span>();
<span class="kw">match</span> <span class="ident">read_line</span>(<span class="ident">file</span>.<span class="ident">as_mut</span>(), <span class="kw-2">&amp;mut</span> <span class="ident">line</span>) {
<span class="kw">match</span> <span class="ident">read_line</span>(<span class="ident">file</span>.<span class="ident">as_mut</span>(), <span class="kw-2">&amp;mut</span> <span class="ident">output</span>) {
<span class="prelude-val">Ok</span>(<span class="number">0</span>) =&gt; {
<span class="ident">eof</span>[<span class="ident">i</span>] <span class="op">=</span> <span class="bool-val">true</span>;
<span class="ident">eof_count</span> <span class="op">+</span><span class="op">=</span> <span class="number">1</span>;
}
<span class="prelude-val">Ok</span>(<span class="kw">_</span>) =&gt; <span class="ident">output</span>.<span class="ident">push_str</span>(<span class="ident">line</span>.<span class="ident">trim_end</span>()),
<span class="prelude-val">Ok</span>(<span class="kw">_</span>) =&gt; {
<span class="kw">if</span> <span class="ident">output</span>.<span class="ident">ends_with</span>(<span class="string">&#39;\n&#39;</span>) {
<span class="ident">output</span>.<span class="ident">pop</span>();
}
}
<span class="prelude-val">Err</span>(<span class="ident">e</span>) =&gt; <span class="kw">return</span> <span class="prelude-val">Err</span>(<span class="ident">e</span>.<span class="ident">map_err_context</span>(<span class="ident">String::new</span>)),
}
}
<span class="ident">output</span>.<span class="ident">push_str</span>(<span class="kw-2">&amp;</span><span class="ident">delimiters</span>[<span class="ident">delim_count</span> <span class="op">%</span> <span class="ident">delimiters</span>.<span class="ident">len</span>()]);
<span class="ident">output</span>.<span class="ident">push</span>(<span class="ident">delimiters</span>[<span class="ident">delim_count</span> <span class="op">%</span> <span class="ident">delimiters</span>.<span class="ident">len</span>()]);
<span class="ident">delim_count</span> <span class="op">+</span><span class="op">=</span> <span class="number">1</span>;
}
<span class="kw">if</span> <span class="ident">files</span>.<span class="ident">len</span>() <span class="op">==</span> <span class="ident">eof_count</span> {
<span class="kw">break</span>;
}
<span class="macro">println!</span>(<span class="string">&quot;{}&quot;</span>, <span class="kw-2">&amp;</span><span class="ident">output</span>[..<span class="ident">output</span>.<span class="ident">len</span>() <span class="op">-</span> <span class="number">1</span>]);
<span class="comment">// Remove final delimiter</span>
<span class="ident">output</span>.<span class="ident">pop</span>();
<span class="macro">writeln!</span>(<span class="ident">stdout</span>, <span class="string">&quot;{}&quot;</span>, <span class="ident">output</span>)<span class="question-mark">?</span>;
<span class="ident">delim_count</span> <span class="op">=</span> <span class="number">0</span>;
}
}
+11 -1
View File
@@ -1300,6 +1300,11 @@
<span id="1299">1299</span>
<span id="1300">1300</span>
<span id="1301">1301</span>
<span id="1302">1302</span>
<span id="1303">1303</span>
<span id="1304">1304</span>
<span id="1305">1305</span>
<span id="1306">1306</span>
</pre><pre class="rust"><code><span class="attribute">#![<span class="ident">crate_name</span> <span class="op">=</span> <span class="string">&quot;uu_pr&quot;</span>]</span>
<span class="comment">// This file is part of the uutils coreutils package.</span>
@@ -1334,6 +1339,8 @@
<span class="kw">const</span> <span class="ident">NAME</span>: <span class="kw-2">&amp;</span><span class="ident">str</span> <span class="op">=</span> <span class="string">&quot;pr&quot;</span>;
<span class="kw">const</span> <span class="ident">VERSION</span>: <span class="kw-2">&amp;</span><span class="ident">str</span> <span class="op">=</span> <span class="macro">env!</span>(<span class="string">&quot;CARGO_PKG_VERSION&quot;</span>);
<span class="kw">const</span> <span class="ident">ABOUT</span>: <span class="kw-2">&amp;</span><span class="ident">str</span> <span class="op">=</span>
<span class="string">&quot;Write content of given file or standard input to standard output with pagination filter&quot;</span>;
<span class="kw">const</span> <span class="ident">TAB</span>: <span class="ident">char</span> <span class="op">=</span> <span class="string">&#39;\t&#39;</span>;
<span class="kw">const</span> <span class="ident">LINES_PER_PAGE</span>: <span class="ident">usize</span> <span class="op">=</span> <span class="number">66</span>;
<span class="kw">const</span> <span class="ident">LINES_PER_PAGE_FOR_FORM_FEED</span>: <span class="ident">usize</span> <span class="op">=</span> <span class="number">63</span>;
@@ -1474,7 +1481,10 @@
}
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">uu_app</span><span class="op">&lt;</span><span class="lifetime">&#39;a</span><span class="op">&gt;</span>() -&gt; <span class="ident">App</span><span class="op">&lt;</span><span class="lifetime">&#39;a</span><span class="op">&gt;</span> {
<span class="ident">App::new</span>(<span class="ident">uucore::util_name</span>()).<span class="ident">setting</span>(<span class="ident">AppSettings::InferLongArgs</span>)
<span class="ident">App::new</span>(<span class="ident">uucore::util_name</span>())
.<span class="ident">version</span>(<span class="ident">VERSION</span>)
.<span class="ident">about</span>(<span class="ident">ABOUT</span>)
.<span class="ident">setting</span>(<span class="ident">AppSettings::InferLongArgs</span>)
}
<span class="attribute">#[<span class="ident">uucore::main</span>]</span>
File diff suppressed because it is too large Load Diff
+1 -3
View File
@@ -658,7 +658,6 @@
<span id="657">657</span>
<span id="658">658</span>
<span id="659">659</span>
<span id="660">660</span>
</pre><pre class="rust"><code><span class="comment">// * This file is part of the uutils coreutils package.</span>
<span class="comment">// *</span>
<span class="comment">// * (c) Morten Olsen Lysgaard &lt;morten@lysgaard.no&gt;</span>
@@ -677,11 +676,9 @@
<span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">uucore</span>;
<span class="kw">mod</span> <span class="ident">chunks</span>;
<span class="kw">mod</span> <span class="ident">lines</span>;
<span class="kw">mod</span> <span class="ident">parse</span>;
<span class="kw">mod</span> <span class="ident">platform</span>;
<span class="kw">use</span> <span class="ident">chunks::ReverseChunks</span>;
<span class="kw">use</span> <span class="ident">lines::lines</span>;
<span class="kw">use</span> <span class="ident">clap</span>::{<span class="ident">App</span>, <span class="ident">AppSettings</span>, <span class="ident">Arg</span>};
<span class="kw">use</span> <span class="ident">std::collections::VecDeque</span>;
@@ -694,6 +691,7 @@
<span class="kw">use</span> <span class="ident">std::time::Duration</span>;
<span class="kw">use</span> <span class="ident">uucore::display::Quotable</span>;
<span class="kw">use</span> <span class="ident">uucore::error</span>::{<span class="ident">FromIo</span>, <span class="ident">UResult</span>, <span class="ident">USimpleError</span>};
<span class="kw">use</span> <span class="ident">uucore::lines::lines</span>;
<span class="kw">use</span> <span class="ident">uucore::parse_size</span>::{<span class="ident">parse_size</span>, <span class="ident">ParseSizeError</span>};
<span class="kw">use</span> <span class="ident">uucore::ringbuffer::RingBuffer</span>;

Some files were not shown because too many files have changed in this diff Show More