Skip to content

Commit 6f38a44

Browse files
committed
deploy: f0e8d44
1 parent f785f82 commit 6f38a44

File tree

5 files changed

+207
-25
lines changed

5 files changed

+207
-25
lines changed

dev/src/uu_nice/nice.rs.html

+197-5
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,102 @@
117117
<span id="117">117</span>
118118
<span id="118">118</span>
119119
<span id="119">119</span>
120+
<span id="120">120</span>
121+
<span id="121">121</span>
122+
<span id="122">122</span>
123+
<span id="123">123</span>
124+
<span id="124">124</span>
125+
<span id="125">125</span>
126+
<span id="126">126</span>
127+
<span id="127">127</span>
128+
<span id="128">128</span>
129+
<span id="129">129</span>
130+
<span id="130">130</span>
131+
<span id="131">131</span>
132+
<span id="132">132</span>
133+
<span id="133">133</span>
134+
<span id="134">134</span>
135+
<span id="135">135</span>
136+
<span id="136">136</span>
137+
<span id="137">137</span>
138+
<span id="138">138</span>
139+
<span id="139">139</span>
140+
<span id="140">140</span>
141+
<span id="141">141</span>
142+
<span id="142">142</span>
143+
<span id="143">143</span>
144+
<span id="144">144</span>
145+
<span id="145">145</span>
146+
<span id="146">146</span>
147+
<span id="147">147</span>
148+
<span id="148">148</span>
149+
<span id="149">149</span>
150+
<span id="150">150</span>
151+
<span id="151">151</span>
152+
<span id="152">152</span>
153+
<span id="153">153</span>
154+
<span id="154">154</span>
155+
<span id="155">155</span>
156+
<span id="156">156</span>
157+
<span id="157">157</span>
158+
<span id="158">158</span>
159+
<span id="159">159</span>
160+
<span id="160">160</span>
161+
<span id="161">161</span>
162+
<span id="162">162</span>
163+
<span id="163">163</span>
164+
<span id="164">164</span>
165+
<span id="165">165</span>
166+
<span id="166">166</span>
167+
<span id="167">167</span>
168+
<span id="168">168</span>
169+
<span id="169">169</span>
170+
<span id="170">170</span>
171+
<span id="171">171</span>
172+
<span id="172">172</span>
173+
<span id="173">173</span>
174+
<span id="174">174</span>
175+
<span id="175">175</span>
176+
<span id="176">176</span>
177+
<span id="177">177</span>
178+
<span id="178">178</span>
179+
<span id="179">179</span>
180+
<span id="180">180</span>
181+
<span id="181">181</span>
182+
<span id="182">182</span>
183+
<span id="183">183</span>
184+
<span id="184">184</span>
185+
<span id="185">185</span>
186+
<span id="186">186</span>
187+
<span id="187">187</span>
188+
<span id="188">188</span>
189+
<span id="189">189</span>
190+
<span id="190">190</span>
191+
<span id="191">191</span>
192+
<span id="192">192</span>
193+
<span id="193">193</span>
194+
<span id="194">194</span>
195+
<span id="195">195</span>
196+
<span id="196">196</span>
197+
<span id="197">197</span>
198+
<span id="198">198</span>
199+
<span id="199">199</span>
200+
<span id="200">200</span>
201+
<span id="201">201</span>
202+
<span id="202">202</span>
203+
<span id="203">203</span>
204+
<span id="204">204</span>
205+
<span id="205">205</span>
206+
<span id="206">206</span>
207+
<span id="207">207</span>
208+
<span id="208">208</span>
209+
<span id="209">209</span>
210+
<span id="210">210</span>
211+
<span id="211">211</span>
212+
<span id="212">212</span>
213+
<span id="213">213</span>
214+
<span id="214">214</span>
215+
<span id="215">215</span>
120216
</pre><pre class="rust"><code><span class="comment">// * This file is part of the uutils coreutils package.
121217
// *
122218
// * (c) Alex Lyon &lt;arcterus@mail.com&gt;
@@ -127,14 +223,14 @@
127223
// spell-checker:ignore (ToDO) getpriority execvp setpriority nstr PRIO cstrs ENOENT
128224

129225
</span><span class="kw">use </span>libc::{c_char, c_int, execvp, PRIO_PROCESS};
130-
<span class="kw">use </span>std::ffi::CString;
131-
<span class="kw">use </span>std::io::Error;
226+
<span class="kw">use </span>std::ffi::{CString, OsString};
227+
<span class="kw">use </span>std::io::{Error, Write};
132228
<span class="kw">use </span>std::ptr;
133229

134230
<span class="kw">use </span>clap::{crate_version, Arg, ArgAction, Command};
135231
<span class="kw">use </span>uucore::{
136232
error::{set_exit_code, UClapError, UResult, USimpleError, UUsageError},
137-
format_usage, show_error, show_warning,
233+
format_usage, show_error,
138234
};
139235

140236
<span class="kw">pub mod </span>options {
@@ -149,8 +245,89 @@
149245
process).&quot;</span>;
150246
<span class="kw">const </span>USAGE: <span class="kw-2">&amp;</span>str = <span class="string">&quot;{} [OPTIONS] [COMMAND [ARGS]]&quot;</span>;
151247

248+
<span class="kw">fn </span>is_prefix_of(maybe_prefix: <span class="kw-2">&amp;</span>str, target: <span class="kw-2">&amp;</span>str, min_match: usize) -&gt; bool {
249+
<span class="kw">if </span>maybe_prefix.len() &lt; min_match || maybe_prefix.len() &gt; target.len() {
250+
<span class="kw">return </span><span class="bool-val">false</span>;
251+
}
252+
253+
<span class="kw-2">&amp;</span>target[<span class="number">0</span>..maybe_prefix.len()] == maybe_prefix
254+
}
255+
256+
<span class="doccomment">/// Transform legacy arguments into a standardized form.
257+
///
258+
/// The following are all legal argument sequences to GNU nice:
259+
/// - &quot;-1&quot;
260+
/// - &quot;-n1&quot;
261+
/// - &quot;-+1&quot;
262+
/// - &quot;--1&quot;
263+
/// - &quot;-n -1&quot;
264+
///
265+
/// It looks initially like we could add handling for &quot;-{i}&quot;, &quot;--{i}&quot;
266+
/// and &quot;-+{i}&quot; for integers {i} and process them normally using clap.
267+
/// However, the meaning of &quot;-1&quot;, for example, changes depending on
268+
/// its context with legacy argument parsing. clap will not prioritize
269+
/// hyphenated values to previous arguments over matching a known
270+
/// argument. So &quot;-n&quot; &quot;-1&quot; in this case is picked up as two
271+
/// arguments, not one argument with a value.
272+
///
273+
/// Given this context dependency, and the deep hole we end up digging
274+
/// with clap in this case, it&#39;s much simpler to just normalize the
275+
/// arguments to nice before clap starts work. Here, we insert a
276+
/// prefix of &quot;-n&quot; onto all arguments of the form &quot;-{i}&quot;, &quot;--{i}&quot; and
277+
/// &quot;-+{i}&quot; which are not already preceded by &quot;-n&quot;.
278+
</span><span class="kw">fn </span>standardize_nice_args(<span class="kw-2">mut </span>args: <span class="kw">impl </span>uucore::Args) -&gt; <span class="kw">impl </span>uucore::Args {
279+
<span class="kw">let </span><span class="kw-2">mut </span>v = Vec::&lt;OsString&gt;::new();
280+
<span class="kw">let </span><span class="kw-2">mut </span>saw_n = <span class="bool-val">false</span>;
281+
<span class="kw">let </span><span class="kw-2">mut </span>saw_command = <span class="bool-val">false</span>;
282+
<span class="kw">if let </span><span class="prelude-val">Some</span>(cmd) = args.next() {
283+
v.push(cmd);
284+
}
285+
<span class="kw">for </span>s <span class="kw">in </span>args {
286+
<span class="kw">if </span>saw_command {
287+
v.push(s);
288+
} <span class="kw">else if </span>saw_n {
289+
<span class="kw">let </span><span class="kw-2">mut </span>new_arg: OsString = <span class="string">&quot;-n&quot;</span>.into();
290+
new_arg.push(s);
291+
v.push(new_arg);
292+
saw_n = <span class="bool-val">false</span>;
293+
} <span class="kw">else if </span>s.to_str() == <span class="prelude-val">Some</span>(<span class="string">&quot;-n&quot;</span>)
294+
|| s.to_str()
295+
.map(|s| is_prefix_of(s, <span class="string">&quot;--adjustment&quot;</span>, <span class="string">&quot;--a&quot;</span>.len()))
296+
.unwrap_or_default()
297+
{
298+
saw_n = <span class="bool-val">true</span>;
299+
} <span class="kw">else if let </span><span class="prelude-val">Ok</span>(s) = s.clone().into_string() {
300+
<span class="kw">if let </span><span class="prelude-val">Some</span>(stripped) = s.strip_prefix(<span class="string">&#39;-&#39;</span>) {
301+
<span class="kw">match </span>stripped.parse::&lt;i64&gt;() {
302+
<span class="prelude-val">Ok</span>(ix) =&gt; {
303+
<span class="kw">let </span><span class="kw-2">mut </span>new_arg: OsString = <span class="string">&quot;-n&quot;</span>.into();
304+
new_arg.push(ix.to_string());
305+
v.push(new_arg);
306+
}
307+
<span class="prelude-val">Err</span>(<span class="kw">_</span>) =&gt; {
308+
v.push(s.into());
309+
}
310+
}
311+
} <span class="kw">else </span>{
312+
saw_command = <span class="bool-val">true</span>;
313+
v.push(s.into());
314+
}
315+
} <span class="kw">else </span>{
316+
saw_command = <span class="bool-val">true</span>;
317+
v.push(s);
318+
}
319+
}
320+
<span class="kw">if </span>saw_n {
321+
v.push(<span class="string">&quot;-n&quot;</span>.into());
322+
}
323+
324+
v.into_iter()
325+
}
326+
152327
<span class="attribute">#[uucore::main]
153328
</span><span class="kw">pub fn </span>uumain(args: <span class="kw">impl </span>uucore::Args) -&gt; UResult&lt;()&gt; {
329+
<span class="kw">let </span>args = standardize_nice_args(args);
330+
154331
<span class="kw">let </span>matches = uu_app().try_get_matches_from(args).with_exit_code(<span class="number">125</span>)<span class="question-mark">?</span>;
155332

156333
nix::errno::Errno::clear();
@@ -190,8 +367,21 @@
190367
};
191368

192369
niceness += adjustment;
193-
<span class="kw">if unsafe </span>{ libc::setpriority(PRIO_PROCESS, <span class="number">0</span>, niceness) } == -<span class="number">1 </span>{
194-
<span class="macro">show_warning!</span>(<span class="string">&quot;setpriority: {}&quot;</span>, Error::last_os_error());
370+
<span class="comment">// We can&#39;t use `show_warning` because that will panic if stderr
371+
// isn&#39;t writable. The GNU test suite checks specifically that the
372+
// exit code when failing to write the advisory is 125, but Rust
373+
// will produce an exit code of 101 when it panics.
374+
</span><span class="kw">if unsafe </span>{ libc::setpriority(PRIO_PROCESS, <span class="number">0</span>, niceness) } == -<span class="number">1
375+
</span>&amp;&amp; <span class="macro">write!</span>(
376+
std::io::stderr(),
377+
<span class="string">&quot;{}: warning: setpriority: {}&quot;</span>,
378+
uucore::util_name(),
379+
Error::last_os_error()
380+
)
381+
.is_err()
382+
{
383+
set_exit_code(<span class="number">125</span>);
384+
<span class="kw">return </span><span class="prelude-val">Ok</span>(());
195385
}
196386

197387
<span class="kw">let </span>cstrs: Vec&lt;CString&gt; = matches
@@ -228,6 +418,8 @@
228418
.short(<span class="string">&#39;n&#39;</span>)
229419
.long(options::ADJUSTMENT)
230420
.help(<span class="string">&quot;add N to the niceness (default is 10)&quot;</span>)
421+
.action(ArgAction::Set)
422+
.overrides_with(options::ADJUSTMENT)
231423
.allow_hyphen_values(<span class="bool-val">true</span>),
232424
)
233425
.arg(

dev/src/uu_od/prn_float.rs.html

+7-17
Original file line numberDiff line numberDiff line change
@@ -215,11 +215,6 @@
215215
<span id="215">215</span>
216216
<span id="216">216</span>
217217
<span id="217">217</span>
218-
<span id="218">218</span>
219-
<span id="219">219</span>
220-
<span id="220">220</span>
221-
<span id="221">221</span>
222-
<span id="222">222</span>
223218
</pre><pre class="rust"><code><span class="kw">use </span>half::f16;
224219
<span class="kw">use </span>std::f32;
225220
<span class="kw">use </span>std::f64;
@@ -269,7 +264,7 @@
269264

270265
<span class="kw">if </span>f.classify() == FpCategory::Subnormal {
271266
<span class="comment">// subnormal numbers will be normal as f64, so will print with a wrong precision
272-
</span><span class="macro">format!</span>(<span class="string">&quot;{:width$e}&quot;</span>, f, width = width) <span class="comment">// subnormal numbers
267+
</span><span class="macro">format!</span>(<span class="string">&quot;{:width$e}&quot;</span>, f) <span class="comment">// subnormal numbers
273268
</span>} <span class="kw">else </span>{
274269
format_float(f64::from(f), width, precision)
275270
}
@@ -282,12 +277,12 @@
282277
<span class="kw">fn </span>format_float(f: f64, width: usize, precision: usize) -&gt; String {
283278
<span class="kw">if </span>!f.is_normal() {
284279
<span class="kw">if </span>f == -<span class="number">0.0 </span>&amp;&amp; f.is_sign_negative() {
285-
<span class="kw">return </span><span class="macro">format!</span>(<span class="string">&quot;{:&gt;width$}&quot;</span>, <span class="string">&quot;-0&quot;</span>, width = width);
280+
<span class="kw">return </span><span class="macro">format!</span>(<span class="string">&quot;{:&gt;width$}&quot;</span>, <span class="string">&quot;-0&quot;</span>);
286281
}
287282
<span class="kw">if </span>f == <span class="number">0.0 </span>|| !f.is_finite() {
288-
<span class="kw">return </span><span class="macro">format!</span>(<span class="string">&quot;{:width$}&quot;</span>, f, width = width);
283+
<span class="kw">return </span><span class="macro">format!</span>(<span class="string">&quot;{:width$}&quot;</span>, f);
289284
}
290-
<span class="kw">return </span><span class="macro">format!</span>(<span class="string">&quot;{:width$e}&quot;</span>, f, width = width); <span class="comment">// subnormal numbers
285+
<span class="kw">return </span><span class="macro">format!</span>(<span class="string">&quot;{:width$e}&quot;</span>, f); <span class="comment">// subnormal numbers
291286
</span>}
292287

293288
<span class="kw">let </span><span class="kw-2">mut </span>l = f.abs().log10().floor() <span class="kw">as </span>i32;
@@ -299,16 +294,11 @@
299294
}
300295

301296
<span class="kw">if </span>l &gt;= <span class="number">0 </span>&amp;&amp; l &lt;= (precision <span class="kw">as </span>i32 - <span class="number">1</span>) {
302-
<span class="macro">format!</span>(
303-
<span class="string">&quot;{:width$.dec$}&quot;</span>,
304-
f,
305-
width = width,
306-
dec = (precision - <span class="number">1</span>) - l <span class="kw">as </span>usize
307-
)
297+
<span class="macro">format!</span>(<span class="string">&quot;{:width$.dec$}&quot;</span>, f, dec = (precision - <span class="number">1</span>) - l <span class="kw">as </span>usize)
308298
} <span class="kw">else if </span>l == -<span class="number">1 </span>{
309-
<span class="macro">format!</span>(<span class="string">&quot;{:width$.dec$}&quot;</span>, f, width = width, dec = precision)
299+
<span class="macro">format!</span>(<span class="string">&quot;{:width$.dec$}&quot;</span>, f, dec = precision)
310300
} <span class="kw">else </span>{
311-
<span class="macro">format!</span>(<span class="string">&quot;{:width$.dec$e}&quot;</span>, f, width = width, dec = precision - <span class="number">1</span>)
301+
<span class="macro">format!</span>(<span class="string">&quot;{:width$.dec$e}&quot;</span>, f, dec = precision - <span class="number">1</span>)
312302
}
313303
}
314304

0 commit comments

Comments
 (0)