This commit is contained in:
sylvestre
2021-10-03 02:30:58 +00:00
parent a06c298f4e
commit e2f80d17eb
66 changed files with 367 additions and 86 deletions
+1 -1
View File
@@ -139,7 +139,7 @@ var searchIndex = JSON.parse('{\
"uu_link":{"doc":"","t":[5,0,5,5,7],"n":["normalize_error_message","options","uu_app","uumain","FILES"],"q":["uu_link","","","","uu_link::options"],"d":["","","","",""],"i":[0,0,0,0,0],"f":[[[["error",3]],["string",3]],null,[[],["app",3]],[[],["i32",15]],null],"p":[]},\
"uu_ln":{"doc":"","t":[13,13,13,4,3,11,11,11,11,11,11,11,11,11,11,11,11,5,11,11,11,11,11,11,11,5,5],"n":["Force","Interactive","NoClobber","OverwriteMode","Settings","borrow","borrow","borrow_mut","borrow_mut","clone","clone_into","eq","fmt","from","from","into","into","is_symlink","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","uu_app","uumain"],"q":["uu_ln","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["","","","","","","","","","","","","","","","","","","","","","","","","","",""],"i":[1,1,1,0,0,2,1,2,1,1,1,1,1,2,1,2,1,0,1,2,1,2,1,2,1,0,0],"f":[null,null,null,null,null,[[]],[[]],[[]],[[]],[[],["overwritemode",4]],[[]],[[["overwritemode",4]],["bool",15]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[["path",3],["asref",8,["path"]]],["bool",15]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["app",3]],[[],["i32",15]]],"p":[[4,"OverwriteMode"],[3,"Settings"]]},\
"uu_logname":{"doc":"","t":[5,5,5],"n":["getlogin","uu_app","uumain"],"q":["uu_logname","",""],"d":["","",""],"i":[0,0,0],"f":[null,[[],["app",3]],[[],["i32",15]]],"p":[]},\
"uu_ls":{"doc":"","t":[0,5,5,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,0,0,0,0,0,0,0,0,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7],"n":["options","uu_app","uumain","AUTHOR","COLOR","DIRECTORY","FORMAT","FULL_TIME","HIDE","HIDE_CONTROL_CHARS","IGNORE","IGNORE_BACKUPS","INDICATOR_STYLE","INODE","NO_GROUP","PATHS","QUOTING_STYLE","RECURSIVE","REVERSE","SHOW_CONTROL_CHARS","SORT","TIME","TIME_STYLE","WIDTH","dereference","files","format","indicator_style","quoting","size","sort","time","ALL","ARGS","DIR_ARGS","ALL","ALMOST_ALL","ACROSS","COLUMNS","COMMAS","LONG","LONG_NO_GROUP","LONG_NO_OWNER","LONG_NUMERIC_UID_GID","ONE_LINE","CLASSIFY","FILE_TYPE","SLASH","C","ESCAPE","LITERAL","HUMAN_READABLE","SI","EXTENSION","NONE","SIZE","TIME","VERSION","ACCESS","CHANGE"],"q":["uu_ls","","","uu_ls::options","","","","","","","","","","","","","","","","","","","","","","","","","","","","","uu_ls::options::dereference","","","uu_ls::options::files","","uu_ls::options::format","","","","","","","","uu_ls::options::indicator_style","","","uu_ls::options::quoting","","","uu_ls::options::size","","uu_ls::options::sort","","","","","uu_ls::options::time",""],"d":["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"i":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"f":[null,[[],["app",3]],[[],["i32",15]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"p":[]},\
"uu_ls":{"doc":"","t":[0,5,5,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,0,0,0,0,0,0,0,0,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7],"n":["options","uu_app","uumain","AUTHOR","COLOR","CONTEXT","DIRECTORY","FORMAT","FULL_TIME","HIDE","HIDE_CONTROL_CHARS","IGNORE","IGNORE_BACKUPS","INDICATOR_STYLE","INODE","NO_GROUP","PATHS","QUOTING_STYLE","RECURSIVE","REVERSE","SHOW_CONTROL_CHARS","SORT","TIME","TIME_STYLE","WIDTH","dereference","files","format","indicator_style","quoting","size","sort","time","ALL","ARGS","DIR_ARGS","ALL","ALMOST_ALL","ACROSS","COLUMNS","COMMAS","LONG","LONG_NO_GROUP","LONG_NO_OWNER","LONG_NUMERIC_UID_GID","ONE_LINE","CLASSIFY","FILE_TYPE","SLASH","C","ESCAPE","LITERAL","HUMAN_READABLE","SI","EXTENSION","NONE","SIZE","TIME","VERSION","ACCESS","CHANGE"],"q":["uu_ls","","","uu_ls::options","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","uu_ls::options::dereference","","","uu_ls::options::files","","uu_ls::options::format","","","","","","","","uu_ls::options::indicator_style","","","uu_ls::options::quoting","","","uu_ls::options::size","","uu_ls::options::sort","","","","","uu_ls::options::time",""],"d":["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"i":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"f":[null,[[],["app",3]],[[],["i32",15]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"p":[]},\
"uu_mkdir":{"doc":"","t":[5,5],"n":["uu_app","uumain"],"q":["uu_mkdir",""],"d":["",""],"i":[0,0],"f":[[[],["app",3]],[[],["i32",15]]],"p":[]},\
"uu_mkfifo":{"doc":"","t":[5,5],"n":["uu_app","uumain"],"q":["uu_mkfifo",""],"d":["",""],"i":[0,0],"f":[[[],["app",3]],[[],["i32",15]]],"p":[]},\
"uu_mknod":{"doc":"","t":[5,5],"n":["uu_app","uumain"],"q":["uu_mknod",""],"d":["",""],"i":[0,0],"f":[[[],["app",3]],[[],["i32",15]]],"p":[]},\
+299 -21
View File
@@ -1992,6 +1992,145 @@
<span id="1992">1992</span>
<span id="1993">1993</span>
<span id="1994">1994</span>
<span id="1995">1995</span>
<span id="1996">1996</span>
<span id="1997">1997</span>
<span id="1998">1998</span>
<span id="1999">1999</span>
<span id="2000">2000</span>
<span id="2001">2001</span>
<span id="2002">2002</span>
<span id="2003">2003</span>
<span id="2004">2004</span>
<span id="2005">2005</span>
<span id="2006">2006</span>
<span id="2007">2007</span>
<span id="2008">2008</span>
<span id="2009">2009</span>
<span id="2010">2010</span>
<span id="2011">2011</span>
<span id="2012">2012</span>
<span id="2013">2013</span>
<span id="2014">2014</span>
<span id="2015">2015</span>
<span id="2016">2016</span>
<span id="2017">2017</span>
<span id="2018">2018</span>
<span id="2019">2019</span>
<span id="2020">2020</span>
<span id="2021">2021</span>
<span id="2022">2022</span>
<span id="2023">2023</span>
<span id="2024">2024</span>
<span id="2025">2025</span>
<span id="2026">2026</span>
<span id="2027">2027</span>
<span id="2028">2028</span>
<span id="2029">2029</span>
<span id="2030">2030</span>
<span id="2031">2031</span>
<span id="2032">2032</span>
<span id="2033">2033</span>
<span id="2034">2034</span>
<span id="2035">2035</span>
<span id="2036">2036</span>
<span id="2037">2037</span>
<span id="2038">2038</span>
<span id="2039">2039</span>
<span id="2040">2040</span>
<span id="2041">2041</span>
<span id="2042">2042</span>
<span id="2043">2043</span>
<span id="2044">2044</span>
<span id="2045">2045</span>
<span id="2046">2046</span>
<span id="2047">2047</span>
<span id="2048">2048</span>
<span id="2049">2049</span>
<span id="2050">2050</span>
<span id="2051">2051</span>
<span id="2052">2052</span>
<span id="2053">2053</span>
<span id="2054">2054</span>
<span id="2055">2055</span>
<span id="2056">2056</span>
<span id="2057">2057</span>
<span id="2058">2058</span>
<span id="2059">2059</span>
<span id="2060">2060</span>
<span id="2061">2061</span>
<span id="2062">2062</span>
<span id="2063">2063</span>
<span id="2064">2064</span>
<span id="2065">2065</span>
<span id="2066">2066</span>
<span id="2067">2067</span>
<span id="2068">2068</span>
<span id="2069">2069</span>
<span id="2070">2070</span>
<span id="2071">2071</span>
<span id="2072">2072</span>
<span id="2073">2073</span>
<span id="2074">2074</span>
<span id="2075">2075</span>
<span id="2076">2076</span>
<span id="2077">2077</span>
<span id="2078">2078</span>
<span id="2079">2079</span>
<span id="2080">2080</span>
<span id="2081">2081</span>
<span id="2082">2082</span>
<span id="2083">2083</span>
<span id="2084">2084</span>
<span id="2085">2085</span>
<span id="2086">2086</span>
<span id="2087">2087</span>
<span id="2088">2088</span>
<span id="2089">2089</span>
<span id="2090">2090</span>
<span id="2091">2091</span>
<span id="2092">2092</span>
<span id="2093">2093</span>
<span id="2094">2094</span>
<span id="2095">2095</span>
<span id="2096">2096</span>
<span id="2097">2097</span>
<span id="2098">2098</span>
<span id="2099">2099</span>
<span id="2100">2100</span>
<span id="2101">2101</span>
<span id="2102">2102</span>
<span id="2103">2103</span>
<span id="2104">2104</span>
<span id="2105">2105</span>
<span id="2106">2106</span>
<span id="2107">2107</span>
<span id="2108">2108</span>
<span id="2109">2109</span>
<span id="2110">2110</span>
<span id="2111">2111</span>
<span id="2112">2112</span>
<span id="2113">2113</span>
<span id="2114">2114</span>
<span id="2115">2115</span>
<span id="2116">2116</span>
<span id="2117">2117</span>
<span id="2118">2118</span>
<span id="2119">2119</span>
<span id="2120">2120</span>
<span id="2121">2121</span>
<span id="2122">2122</span>
<span id="2123">2123</span>
<span id="2124">2124</span>
<span id="2125">2125</span>
<span id="2126">2126</span>
<span id="2127">2127</span>
<span id="2128">2128</span>
<span id="2129">2129</span>
<span id="2130">2130</span>
<span id="2131">2131</span>
<span id="2132">2132</span>
<span id="2133">2133</span>
</pre><pre class="rust">
<span class="comment">// This file is part of the uutils coreutils package.</span>
<span class="comment">//</span>
@@ -2045,6 +2184,11 @@
<span class="kw">use</span> <span class="ident">uucore::libc</span>::{<span class="ident">S_IXGRP</span>, <span class="ident">S_IXOTH</span>, <span class="ident">S_IXUSR</span>};
<span class="kw">use</span> <span class="ident">uucore</span>::{<span class="ident">fs::display_permissions</span>, <span class="ident">version_cmp::version_cmp</span>};
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">not</span>(<span class="ident">feature</span> <span class="op">=</span> <span class="string">&quot;selinux&quot;</span>))]</span>
<span class="kw">static</span> <span class="ident">CONTEXT_HELP_TEXT</span>: <span class="kw-2">&amp;</span><span class="ident">str</span> <span class="op">=</span> <span class="string">&quot;print any security context of each file (not enabled)&quot;</span>;
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">feature</span> <span class="op">=</span> <span class="string">&quot;selinux&quot;</span>)]</span>
<span class="kw">static</span> <span class="ident">CONTEXT_HELP_TEXT</span>: <span class="kw-2">&amp;</span><span class="ident">str</span> <span class="op">=</span> <span class="string">&quot;print any security context of each file&quot;</span>;
<span class="kw">fn</span> <span class="ident">usage</span>() <span class="op">-</span><span class="op">&gt;</span> <span class="ident">String</span> {
<span class="macro">format!</span>(<span class="string">&quot;{0} [OPTION]... [FILE]...&quot;</span>, <span class="ident">uucore::execution_phrase</span>())
}
@@ -2124,6 +2268,7 @@
<span class="kw">pub</span> <span class="kw">static</span> <span class="ident">FULL_TIME</span>: <span class="kw-2">&amp;</span><span class="ident">str</span> <span class="op">=</span> <span class="string">&quot;full-time&quot;</span>;
<span class="kw">pub</span> <span class="kw">static</span> <span class="ident">HIDE</span>: <span class="kw-2">&amp;</span><span class="ident">str</span> <span class="op">=</span> <span class="string">&quot;hide&quot;</span>;
<span class="kw">pub</span> <span class="kw">static</span> <span class="ident">IGNORE</span>: <span class="kw-2">&amp;</span><span class="ident">str</span> <span class="op">=</span> <span class="string">&quot;ignore&quot;</span>;
<span class="kw">pub</span> <span class="kw">static</span> <span class="ident">CONTEXT</span>: <span class="kw-2">&amp;</span><span class="ident">str</span> <span class="op">=</span> <span class="string">&quot;context&quot;</span>;
}
<span class="kw">const</span> <span class="ident">DEFAULT_TERM_WIDTH</span>: <span class="ident">u16</span> <span class="op">=</span> <span class="number">80</span>;
@@ -2234,6 +2379,8 @@
<span class="ident">quoting_style</span>: <span class="ident">QuotingStyle</span>,
<span class="ident">indicator_style</span>: <span class="ident">IndicatorStyle</span>,
<span class="ident">time_style</span>: <span class="ident">TimeStyle</span>,
<span class="ident">context</span>: <span class="ident">bool</span>,
<span class="ident">selinux_supported</span>: <span class="ident">bool</span>,
}
<span class="comment">// Fields that can be removed or added to the long format</span>
@@ -2245,9 +2392,18 @@
<span class="ident">numeric_uid_gid</span>: <span class="ident">bool</span>,
}
<span class="kw">struct</span> <span class="ident">PaddingCollection</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="kw">impl</span> <span class="ident">Config</span> {
<span class="attribute">#[<span class="ident">allow</span>(<span class="ident">clippy::cognitive_complexity</span>)]</span>
<span class="kw">fn</span> <span class="ident">from</span>(<span class="ident">options</span>: <span class="kw-2">&amp;</span><span class="ident">clap::ArgMatches</span>) <span class="op">-</span><span class="op">&gt;</span> <span class="ident">UResult</span><span class="op">&lt;</span><span class="ident">Config</span><span class="op">&gt;</span> {
<span class="kw">let</span> <span class="ident">context</span> <span class="op">=</span> <span class="ident">options</span>.<span class="ident">is_present</span>(<span class="ident">options::CONTEXT</span>);
<span class="kw">let</span> (<span class="kw-2">mut</span> <span class="ident">format</span>, <span class="ident">opt</span>) <span class="op">=</span> <span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="ident">format_</span>) <span class="op">=</span> <span class="ident">options</span>.<span class="ident">value_of</span>(<span class="ident">options::FORMAT</span>) {
(
<span class="kw">match</span> <span class="ident">format_</span> {
@@ -2591,6 +2747,17 @@
<span class="ident">quoting_style</span>,
<span class="ident">indicator_style</span>,
<span class="ident">time_style</span>,
<span class="ident">context</span>,
<span class="ident">selinux_supported</span>: {
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">feature</span> <span class="op">=</span> <span class="string">&quot;selinux&quot;</span>)]</span>
{
<span class="ident">selinux::kernel_support</span>() <span class="op">!</span><span class="op">=</span> <span class="ident">selinux::KernelSupport::Unsupported</span>
}
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">not</span>(<span class="ident">feature</span> <span class="op">=</span> <span class="string">&quot;selinux&quot;</span>))]</span>
{
<span class="bool-val">false</span>
}
},
})
}
}
@@ -3152,6 +3319,12 @@ only ignore &#39;.&#39; and &#39;..&#39;.&quot;</span>,
.<span class="ident">overrides_with</span>(<span class="ident">options::FULL_TIME</span>)
.<span class="ident">help</span>(<span class="string">&quot;like -l --time-style=full-iso&quot;</span>),
)
.<span class="ident">arg</span>(
<span class="ident">Arg::with_name</span>(<span class="ident">options::CONTEXT</span>)
.<span class="ident">short</span>(<span class="string">&quot;Z&quot;</span>)
.<span class="ident">long</span>(<span class="ident">options::CONTEXT</span>)
.<span class="ident">help</span>(<span class="ident">CONTEXT_HELP_TEXT</span>),
)
<span class="comment">// Positional arguments</span>
.<span class="ident">arg</span>(
<span class="ident">Arg::with_name</span>(<span class="ident">options::PATHS</span>)
@@ -3176,6 +3349,7 @@ only ignore &#39;.&#39; and &#39;..&#39;.&quot;</span>,
<span class="comment">// PathBuf that all above data corresponds to</span>
<span class="ident">p_buf</span>: <span class="ident">PathBuf</span>,
<span class="ident">must_dereference</span>: <span class="ident">bool</span>,
<span class="ident">security_context</span>: <span class="ident">String</span>,
}
<span class="kw">impl</span> <span class="ident">PathData</span> {
@@ -3219,12 +3393,19 @@ only ignore &#39;.&#39; and &#39;..&#39;.&quot;</span>,
<span class="prelude-val">None</span> <span class="op">=</span><span class="op">&gt;</span> <span class="ident">OnceCell::new</span>(),
};
<span class="kw">let</span> <span class="ident">security_context</span> <span class="op">=</span> <span class="kw">if</span> <span class="ident">config</span>.<span class="ident">context</span> {
<span class="ident">get_security_context</span>(<span class="ident">config</span>, <span class="kw-2">&amp;</span><span class="ident">p_buf</span>, <span class="ident">must_dereference</span>)
} <span class="kw">else</span> {
<span class="ident">String::new</span>()
};
<span class="self">Self</span> {
<span class="ident">md</span>: <span class="ident">OnceCell::new</span>(),
<span class="ident">ft</span>,
<span class="ident">display_name</span>,
<span class="ident">p_buf</span>,
<span class="ident">must_dereference</span>,
<span class="ident">security_context</span>,
}
}
@@ -3393,7 +3574,7 @@ only ignore &#39;.&#39; and &#39;..&#39;.&quot;</span>,
}
<span class="kw">fn</span> <span class="ident">display_dir_entry_size</span>(<span class="ident">entry</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="op">-</span><span class="op">&gt;</span> (<span class="ident">usize</span>, <span class="ident">usize</span>, <span class="ident">usize</span>, <span class="ident">usize</span>) {
<span class="comment">// TODO: Cache/memoize the display_* results so we don&#39;t have to recalculate them.</span>
<span class="comment">// TODO: Cache/memorize the display_* results so we don&#39;t have to recalculate them.</span>
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="ident">md</span>) <span class="op">=</span> <span class="ident">entry</span>.<span class="ident">md</span>() {
(
<span class="ident">display_symlink_count</span>(<span class="ident">md</span>).<span class="ident">len</span>(),
@@ -3406,31 +3587,40 @@ only ignore &#39;.&#39; and &#39;..&#39;.&quot;</span>,
}
}
<span class="kw">fn</span> <span class="ident">pad_left</span>(<span class="ident">string</span>: <span class="ident">String</span>, <span class="ident">count</span>: <span class="ident">usize</span>) <span class="op">-</span><span class="op">&gt;</span> <span class="ident">String</span> {
<span class="kw">fn</span> <span class="ident">pad_left</span>(<span class="ident">string</span>: <span class="kw-2">&amp;</span><span class="ident">str</span>, <span class="ident">count</span>: <span class="ident">usize</span>) <span class="op">-</span><span class="op">&gt;</span> <span class="ident">String</span> {
<span class="macro">format!</span>(<span class="string">&quot;{:&gt;width$}&quot;</span>, <span class="ident">string</span>, <span class="ident">width</span> <span class="op">=</span> <span class="ident">count</span>)
}
<span class="kw">fn</span> <span class="ident">pad_right</span>(<span class="ident">string</span>: <span class="ident">String</span>, <span class="ident">count</span>: <span class="ident">usize</span>) <span class="op">-</span><span class="op">&gt;</span> <span class="ident">String</span> {
<span class="kw">fn</span> <span class="ident">pad_right</span>(<span class="ident">string</span>: <span class="kw-2">&amp;</span><span class="ident">str</span>, <span class="ident">count</span>: <span class="ident">usize</span>) <span class="op">-</span><span class="op">&gt;</span> <span class="ident">String</span> {
<span class="macro">format!</span>(<span class="string">&quot;{:&lt;width$}&quot;</span>, <span class="ident">string</span>, <span class="ident">width</span> <span class="op">=</span> <span class="ident">count</span>)
}
<span class="kw">fn</span> <span class="ident">display_items</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;</span><span class="kw-2">mut</span> <span class="ident">BufWriter</span><span class="op">&lt;</span><span class="ident">Stdout</span><span class="op">&gt;</span>) {
<span class="comment">// `-Z`, `--context`:</span>
<span class="comment">// Display the SELinux security context or &#39;?&#39; if none is found. When used with the `-l`</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="op">=</span> <span class="ident">Format::Long</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="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="kw">let</span> <span class="kw-2">mut</span> <span class="ident">total_size</span> <span class="op">=</span> <span class="number">0</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="op">=</span>
<span class="ident">display_dir_entry_size</span>(<span class="ident">item</span>, <span class="ident">config</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_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">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="ident">total_size</span> <span class="op">+</span><span class="op">=</span> <span class="ident">item</span>.<span class="ident">md</span>().<span class="ident">map_or</span>(<span class="number">0</span>, <span class="op">|</span><span class="ident">md</span><span class="op">|</span> <span class="ident">get_block_size</span>(<span class="ident">md</span>, <span class="ident">config</span>));
}
@@ -3442,16 +3632,31 @@ only ignore &#39;.&#39; and &#39;..&#39;.&quot;</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="ident">longest_link_count_len</span>,
<span class="ident">longest_uname_len</span>,
<span class="ident">longest_group_len</span>,
<span class="ident">longest_size_len</span>,
<span class="ident">PaddingCollection</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="ident">config</span>,
<span class="ident">out</span>,
);
}
} <span class="kw">else</span> {
<span class="kw">let</span> <span class="ident">names</span> <span class="op">=</span> <span class="ident">items</span>.<span class="ident">iter</span>().<span class="ident">filter_map</span>(<span class="op">|</span><span class="ident">i</span><span class="op">|</span> <span class="ident">display_file_name</span>(<span class="ident">i</span>, <span class="ident">config</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>;
<span class="kw">let</span> <span class="ident">prefix_context</span> <span class="op">=</span> <span class="kw">if</span> <span class="ident">config</span>.<span class="ident">context</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="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="prelude-val">Some</span>(<span class="ident">longest_context_len</span>)
} <span class="kw">else</span> {
<span class="prelude-val">None</span>
};
<span class="kw">let</span> <span class="ident">names</span> <span class="op">=</span> <span class="ident">items</span>
.<span class="ident">iter</span>()
.<span class="ident">filter_map</span>(<span class="op">|</span><span class="ident">i</span><span class="op">|</span> <span class="ident">display_file_name</span>(<span class="ident">i</span>, <span class="ident">config</span>, <span class="ident">prefix_context</span>));
<span class="kw">match</span> <span class="ident">config</span>.<span class="ident">format</span> {
<span class="ident">Format::Columns</span> <span class="op">=</span><span class="op">&gt;</span> <span class="ident">display_grid</span>(<span class="ident">names</span>, <span class="ident">config</span>.<span class="ident">width</span>, <span class="ident">Direction::TopToBottom</span>, <span class="ident">out</span>),
@@ -3576,15 +3781,13 @@ only ignore &#39;.&#39; and &#39;..&#39;.&quot;</span>,
<span class="doccomment">/// longest_link_count_len: usize,</span>
<span class="doccomment">/// longest_uname_len: usize,</span>
<span class="doccomment">/// longest_group_len: usize,</span>
<span class="doccomment">/// longest_context_len: usize,</span>
<span class="doccomment">/// longest_size_len: usize,</span>
<span class="doccomment">/// ```</span>
<span class="doccomment">/// that decide the maximum possible character count of each field.</span>
<span class="kw">fn</span> <span class="ident">display_item_long</span>(
<span class="ident">item</span>: <span class="kw-2">&amp;</span><span class="ident">PathData</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_size_len</span>: <span class="ident">usize</span>,
<span class="ident">padding</span>: <span class="ident">PaddingCollection</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;</span><span class="kw-2">mut</span> <span class="ident">BufWriter</span><span class="op">&lt;</span><span class="ident">Stdout</span><span class="op">&gt;</span>,
) {
@@ -3605,16 +3808,23 @@ 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="string">&quot;{}{} {}&quot;</span>,
<span class="ident">display_permissions</span>(<span class="ident">md</span>, <span class="bool-val">true</span>),
<span class="ident">pad_left</span>(<span class="ident">display_symlink_count</span>(<span class="ident">md</span>), <span class="ident">longest_link_count_len</span>),
<span class="kw">if</span> <span class="ident">item</span>.<span class="ident">security_context</span>.<span class="ident">len</span>() <span class="op">&gt;</span> <span class="number">1</span> {
<span class="comment">// GNU `ls` uses a &quot;.&quot; character to indicate a file with a security context,</span>
<span class="comment">// but not other alternate access method.</span>
<span class="string">&quot;.&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="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="ident">display_uname</span>(<span class="ident">md</span>, <span class="ident">config</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">longest_uname_len</span>)
);
}
@@ -3622,7 +3832,15 @@ 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="ident">display_group</span>(<span class="ident">md</span>, <span class="ident">config</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">longest_group_len</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>)
);
}
@@ -3632,19 +3850,19 @@ 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="ident">display_uname</span>(<span class="ident">md</span>, <span class="ident">config</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">longest_uname_len</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="ident">display_size_or_rdev</span>(<span class="ident">md</span>, <span class="ident">config</span>), <span class="ident">longest_size_len</span>),
<span class="ident">pad_left</span>(<span class="kw-2">&amp;</span><span class="ident">display_size_or_rdev</span>(<span class="ident">md</span>, <span class="ident">config</span>), <span class="ident">padding</span>.<span class="ident">longest_size_len</span>),
<span class="ident">display_date</span>(<span class="ident">md</span>, <span class="ident">config</span>),
<span class="comment">// unwrap is fine because it fails when metadata is not available</span>
<span class="comment">// but we already know that it is because it&#39;s checked at the</span>
<span class="comment">// start of the function.</span>
<span class="ident">display_file_name</span>(<span class="ident">item</span>, <span class="ident">config</span>).<span class="ident">unwrap</span>().<span class="ident">contents</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="ident">unwrap</span>().<span class="ident">contents</span>,
);
}
@@ -3868,10 +4086,15 @@ only ignore &#39;.&#39; and &#39;..&#39;.&quot;</span>,
<span class="doccomment">/// * `config.indicator_style` to append specific characters to `name` using [`classify_file`].</span>
<span class="doccomment">/// * `config.format` to display symlink targets if `Format::Long`. This function is also</span>
<span class="doccomment">/// responsible for coloring symlink target names if `config.color` is specified.</span>
<span class="doccomment">/// * `config.context` to prepend security context to `name` if compiled with `feat_selinux`.</span>
<span class="doccomment">///</span>
<span class="doccomment">/// Note that non-unicode sequences in symlink targets are dealt with using</span>
<span class="doccomment">/// [`std::path::Path::to_string_lossy`].</span>
<span class="kw">fn</span> <span class="ident">display_file_name</span>(<span class="ident">path</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="op">-</span><span class="op">&gt;</span> <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="ident">Cell</span><span class="op">&gt;</span> {
<span class="kw">fn</span> <span class="ident">display_file_name</span>(
<span class="ident">path</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">prefix_context</span>: <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="ident">usize</span><span class="op">&gt;</span>,
) <span class="op">-</span><span class="op">&gt;</span> <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="ident">Cell</span><span class="op">&gt;</span> {
<span class="comment">// This is our return value. We start by `&amp;path.display_name` and modify it along the way.</span>
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">name</span> <span class="op">=</span> <span class="ident">escape_name</span>(<span class="kw-2">&amp;</span><span class="ident">path</span>.<span class="ident">display_name</span>, <span class="kw-2">&amp;</span><span class="ident">config</span>.<span class="ident">quoting_style</span>);
@@ -3963,6 +4186,20 @@ only ignore &#39;.&#39; and &#39;..&#39;.&quot;</span>,
}
}
<span class="comment">// Prepend the security context to the `name` and adjust `width` in order</span>
<span class="comment">// to get correct alignment from later calls to`display_grid()`.</span>
<span class="kw">if</span> <span class="ident">config</span>.<span class="ident">context</span> {
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="ident">pad_count</span>) <span class="op">=</span> <span class="ident">prefix_context</span> {
<span class="kw">let</span> <span class="ident">security_context</span> <span class="op">=</span> <span class="kw">if</span> <span class="op">!</span><span class="macro">matches!</span>(<span class="ident">config</span>.<span class="ident">format</span>, <span class="ident">Format::Commas</span>) {
<span class="ident">pad_left</span>(<span class="kw-2">&amp;</span><span class="ident">path</span>.<span class="ident">security_context</span>, <span class="ident">pad_count</span>)
} <span class="kw">else</span> {
<span class="ident">path</span>.<span class="ident">security_context</span>.<span class="ident">to_owned</span>()
};
<span class="ident">name</span> <span class="op">=</span> <span class="macro">format!</span>(<span class="string">&quot;{} {}&quot;</span>, <span class="ident">security_context</span>, <span class="ident">name</span>);
<span class="ident">width</span> <span class="op">+</span><span class="op">=</span> <span class="ident">security_context</span>.<span class="ident">len</span>() <span class="op">+</span> <span class="number">1</span>;
}
}
<span class="prelude-val">Some</span>(<span class="ident">Cell</span> {
<span class="ident">contents</span>: <span class="ident">name</span>,
<span class="ident">width</span>,
@@ -3987,6 +4224,47 @@ only ignore &#39;.&#39; and &#39;..&#39;.&quot;</span>,
<span class="kw">fn</span> <span class="ident">display_symlink_count</span>(<span class="ident">metadata</span>: <span class="kw-2">&amp;</span><span class="ident">Metadata</span>) <span class="op">-</span><span class="op">&gt;</span> <span class="ident">String</span> {
<span class="ident">metadata</span>.<span class="ident">nlink</span>().<span class="ident">to_string</span>()
}
<span class="comment">// This returns the SELinux security context as UTF8 `String`.</span>
<span class="comment">// In the long term this should be changed to `OsStr`, see discussions at #2621/#2656</span>
<span class="attribute">#[<span class="ident">allow</span>(<span class="ident">unused_variables</span>)]</span>
<span class="kw">fn</span> <span class="ident">get_security_context</span>(<span class="ident">config</span>: <span class="kw-2">&amp;</span><span class="ident">Config</span>, <span class="ident">p_buf</span>: <span class="kw-2">&amp;</span><span class="ident">Path</span>, <span class="ident">must_dereference</span>: <span class="ident">bool</span>) <span class="op">-</span><span class="op">&gt;</span> <span class="ident">String</span> {
<span class="kw">let</span> <span class="ident">substitute_string</span> <span class="op">=</span> <span class="string">&quot;?&quot;</span>.<span class="ident">to_string</span>();
<span class="kw">if</span> <span class="ident">config</span>.<span class="ident">selinux_supported</span> {
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">feature</span> <span class="op">=</span> <span class="string">&quot;selinux&quot;</span>)]</span>
{
<span class="kw">match</span> <span class="ident">selinux::SecurityContext::of_path</span>(<span class="ident">p_buf</span>, <span class="ident">must_dereference</span>, <span class="bool-val">false</span>) {
<span class="prelude-val">Err</span>(<span class="ident">_r</span>) <span class="op">=</span><span class="op">&gt;</span> {
<span class="comment">// TODO: show the actual reason why it failed</span>
<span class="macro">show_warning!</span>(<span class="string">&quot;failed to get security context of: {}&quot;</span>, <span class="ident">p_buf</span>.<span class="ident">quote</span>());
<span class="ident">substitute_string</span>
}
<span class="prelude-val">Ok</span>(<span class="prelude-val">None</span>) <span class="op">=</span><span class="op">&gt;</span> <span class="ident">substitute_string</span>,
<span class="prelude-val">Ok</span>(<span class="prelude-val">Some</span>(<span class="ident">context</span>)) <span class="op">=</span><span class="op">&gt;</span> {
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">context</span> <span class="op">=</span> <span class="ident">context</span>.<span class="ident">as_bytes</span>();
<span class="kw">if</span> <span class="ident">context</span>.<span class="ident">ends_with</span>(<span class="kw-2">&amp;</span>[<span class="number">0</span>]) {
<span class="comment">// TODO: replace with `strip_prefix()` when MSRV &gt;= 1.51</span>
<span class="ident">context</span> <span class="op">=</span> <span class="kw-2">&amp;</span><span class="ident">context</span>[..<span class="ident">context</span>.<span class="ident">len</span>() <span class="op">-</span> <span class="number">1</span>]
};
<span class="ident">String::from_utf8</span>(<span class="ident">context</span>.<span class="ident">to_vec</span>()).<span class="ident">unwrap_or_else</span>(<span class="op">|</span><span class="ident">e</span><span class="op">|</span> {
<span class="macro">show_warning!</span>(
<span class="string">&quot;getting security context of: {}: {}&quot;</span>,
<span class="ident">p_buf</span>.<span class="ident">quote</span>(),
<span class="ident">e</span>.<span class="ident">to_string</span>()
);
<span class="ident">String::from_utf8_lossy</span>(<span class="ident">context</span>).<span class="ident">into_owned</span>()
})
}
}
}
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">not</span>(<span class="ident">feature</span> <span class="op">=</span> <span class="string">&quot;selinux&quot;</span>))]</span>
{
<span class="ident">substitute_string</span>
}
} <span class="kw">else</span> {
<span class="ident">substitute_string</span>
}
}
</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>
<script src="../../main.js"></script><script src="../../source-script.js"></script><script src="../../source-files.js"></script>
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
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
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
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

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