|
1165 | 1165 | <span id="1163">1163</span>
|
1166 | 1166 | <span id="1164">1164</span>
|
1167 | 1167 | <span id="1165">1165</span>
|
1168 |
| -<span id="1166">1166</span> |
1169 |
| -<span id="1167">1167</span> |
1170 |
| -<span id="1168">1168</span> |
1171 |
| -<span id="1169">1169</span> |
1172 |
| -<span id="1170">1170</span> |
1173 |
| -<span id="1171">1171</span> |
1174 |
| -<span id="1172">1172</span> |
1175 |
| -<span id="1173">1173</span> |
1176 |
| -<span id="1174">1174</span> |
1177 |
| -<span id="1175">1175</span> |
1178 |
| -<span id="1176">1176</span> |
1179 |
| -<span id="1177">1177</span> |
1180 |
| -<span id="1178">1178</span> |
1181 |
| -<span id="1179">1179</span> |
1182 |
| -<span id="1180">1180</span> |
1183 | 1168 | </pre><pre class="rust"><code><span class="comment">// This file is part of the uutils coreutils package.</span>
|
1184 | 1169 | <span class="comment">//</span>
|
1185 | 1170 | <span class="comment">// (c) Tyler Steele <tyler.steele@protonmail.com></span>
|
|
1227 | 1212 |
|
1228 | 1213 | <span class="kw">struct</span> <span class="ident">Input</span><span class="op"><</span><span class="ident">R</span>: <span class="ident">Read</span><span class="op">></span> {
|
1229 | 1214 | <span class="ident">src</span>: <span class="ident">R</span>,
|
1230 |
| - <span class="ident">non_ascii</span>: <span class="ident">bool</span>, |
1231 | 1215 | <span class="ident">ibs</span>: <span class="ident">usize</span>,
|
1232 | 1216 | <span class="ident">print_level</span>: <span class="prelude-ty">Option</span><span class="op"><</span><span class="ident">StatusLevel</span><span class="op">></span>,
|
1233 | 1217 | <span class="ident">count</span>: <span class="prelude-ty">Option</span><span class="op"><</span><span class="ident">CountType</span><span class="op">></span>,
|
|
1238 | 1222 | <span class="kw">impl</span> <span class="ident">Input</span><span class="op"><</span><span class="ident">io::Stdin</span><span class="op">></span> {
|
1239 | 1223 | <span class="kw">fn</span> <span class="ident">new</span>(<span class="ident">matches</span>: <span class="kw-2">&</span><span class="ident">Matches</span>) -> <span class="ident">UResult</span><span class="op"><</span><span class="self">Self</span><span class="op">></span> {
|
1240 | 1224 | <span class="kw">let</span> <span class="ident">ibs</span> <span class="op">=</span> <span class="ident">parseargs::parse_ibs</span>(<span class="ident">matches</span>)<span class="question-mark">?</span>;
|
1241 |
| - <span class="kw">let</span> <span class="ident">non_ascii</span> <span class="op">=</span> <span class="ident">parseargs::parse_input_non_ascii</span>(<span class="ident">matches</span>)<span class="question-mark">?</span>; |
1242 | 1225 | <span class="kw">let</span> <span class="ident">print_level</span> <span class="op">=</span> <span class="ident">parseargs::parse_status_level</span>(<span class="ident">matches</span>)<span class="question-mark">?</span>;
|
1243 | 1226 | <span class="kw">let</span> <span class="ident">cflags</span> <span class="op">=</span> <span class="ident">parseargs::parse_conv_flag_input</span>(<span class="ident">matches</span>)<span class="question-mark">?</span>;
|
1244 | 1227 | <span class="kw">let</span> <span class="ident">iflags</span> <span class="op">=</span> <span class="ident">parseargs::parse_iflags</span>(<span class="ident">matches</span>)<span class="question-mark">?</span>;
|
|
1249 | 1232 |
|
1250 | 1233 | <span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">i</span> <span class="op">=</span> <span class="self">Self</span> {
|
1251 | 1234 | <span class="ident">src</span>: <span class="ident">io::stdin</span>(),
|
1252 |
| - <span class="ident">non_ascii</span>, |
1253 | 1235 | <span class="ident">ibs</span>,
|
1254 | 1236 | <span class="ident">print_level</span>,
|
1255 | 1237 | <span class="ident">count</span>,
|
|
1313 | 1295 | <span class="kw">impl</span> <span class="ident">Input</span><span class="op"><</span><span class="ident">File</span><span class="op">></span> {
|
1314 | 1296 | <span class="kw">fn</span> <span class="ident">new</span>(<span class="ident">matches</span>: <span class="kw-2">&</span><span class="ident">Matches</span>) -> <span class="ident">UResult</span><span class="op"><</span><span class="self">Self</span><span class="op">></span> {
|
1315 | 1297 | <span class="kw">let</span> <span class="ident">ibs</span> <span class="op">=</span> <span class="ident">parseargs::parse_ibs</span>(<span class="ident">matches</span>)<span class="question-mark">?</span>;
|
1316 |
| - <span class="kw">let</span> <span class="ident">non_ascii</span> <span class="op">=</span> <span class="ident">parseargs::parse_input_non_ascii</span>(<span class="ident">matches</span>)<span class="question-mark">?</span>; |
1317 | 1298 | <span class="kw">let</span> <span class="ident">print_level</span> <span class="op">=</span> <span class="ident">parseargs::parse_status_level</span>(<span class="ident">matches</span>)<span class="question-mark">?</span>;
|
1318 | 1299 | <span class="kw">let</span> <span class="ident">cflags</span> <span class="op">=</span> <span class="ident">parseargs::parse_conv_flag_input</span>(<span class="ident">matches</span>)<span class="question-mark">?</span>;
|
1319 | 1300 | <span class="kw">let</span> <span class="ident">iflags</span> <span class="op">=</span> <span class="ident">parseargs::parse_iflags</span>(<span class="ident">matches</span>)<span class="question-mark">?</span>;
|
|
1345 | 1326 |
|
1346 | 1327 | <span class="kw">let</span> <span class="ident">i</span> <span class="op">=</span> <span class="self">Self</span> {
|
1347 | 1328 | <span class="ident">src</span>,
|
1348 |
| - <span class="ident">non_ascii</span>, |
1349 | 1329 | <span class="ident">ibs</span>,
|
1350 | 1330 | <span class="ident">print_level</span>,
|
1351 | 1331 | <span class="ident">count</span>,
|
|
1789 | 1769 |
|
1790 | 1770 | <span class="doccomment">/// Read helper performs read operations common to all dd reads, and dispatches the buffer to relevant helper functions as dictated by the operations requested by the user.</span>
|
1791 | 1771 | <span class="kw">fn</span> <span class="ident">read_helper</span><span class="op"><</span><span class="ident">R</span>: <span class="ident">Read</span><span class="op">></span>(<span class="ident">i</span>: <span class="kw-2">&mut</span> <span class="ident">Input</span><span class="op"><</span><span class="ident">R</span><span class="op">></span>, <span class="ident">bsize</span>: <span class="ident">usize</span>) -> <span class="ident">std::io::Result</span><span class="op"><</span>(<span class="ident">ReadStat</span>, <span class="ident">Vec</span><span class="op"><</span><span class="ident">u8</span><span class="op">></span>)<span class="op">></span> {
|
1792 |
| - <span class="comment">// Local Predicate Fns -----------------------------------------------</span> |
1793 |
| - <span class="kw">fn</span> <span class="ident">is_conv</span><span class="op"><</span><span class="ident">R</span>: <span class="ident">Read</span><span class="op">></span>(<span class="ident">i</span>: <span class="kw-2">&</span><span class="ident">Input</span><span class="op"><</span><span class="ident">R</span><span class="op">></span>) -> <span class="ident">bool</span> { |
1794 |
| - <span class="ident">i</span>.<span class="ident">cflags</span>.<span class="ident">ctable</span>.<span class="ident">is_some</span>() |
1795 |
| - } |
1796 |
| - <span class="kw">fn</span> <span class="ident">is_block</span><span class="op"><</span><span class="ident">R</span>: <span class="ident">Read</span><span class="op">></span>(<span class="ident">i</span>: <span class="kw-2">&</span><span class="ident">Input</span><span class="op"><</span><span class="ident">R</span><span class="op">></span>) -> <span class="ident">bool</span> { |
1797 |
| - <span class="ident">i</span>.<span class="ident">cflags</span>.<span class="ident">block</span>.<span class="ident">is_some</span>() |
1798 |
| - } |
1799 |
| - <span class="kw">fn</span> <span class="ident">is_unblock</span><span class="op"><</span><span class="ident">R</span>: <span class="ident">Read</span><span class="op">></span>(<span class="ident">i</span>: <span class="kw-2">&</span><span class="ident">Input</span><span class="op"><</span><span class="ident">R</span><span class="op">></span>) -> <span class="ident">bool</span> { |
1800 |
| - <span class="ident">i</span>.<span class="ident">cflags</span>.<span class="ident">unblock</span>.<span class="ident">is_some</span>() |
1801 |
| - } |
1802 | 1772 | <span class="comment">// Local Helper Fns -------------------------------------------------</span>
|
1803 | 1773 | <span class="kw">fn</span> <span class="ident">perform_swab</span>(<span class="ident">buf</span>: <span class="kw-2">&mut</span> [<span class="ident">u8</span>]) {
|
1804 | 1774 | <span class="kw">for</span> <span class="ident">base</span> <span class="kw">in</span> (<span class="number">1</span>..<span class="ident">buf</span>.<span class="ident">len</span>()).<span class="ident">step_by</span>(<span class="number">2</span>) {
|
|
1821 | 1791 | <span class="kw">if</span> <span class="ident">i</span>.<span class="ident">cflags</span>.<span class="ident">swab</span> {
|
1822 | 1792 | <span class="ident">perform_swab</span>(<span class="kw-2">&mut</span> <span class="ident">buf</span>);
|
1823 | 1793 | }
|
1824 |
| - <span class="kw">if</span> <span class="ident">is_conv</span>(<span class="ident">i</span>) <span class="op">|</span><span class="op">|</span> <span class="ident">is_block</span>(<span class="ident">i</span>) <span class="op">|</span><span class="op">|</span> <span class="ident">is_unblock</span>(<span class="ident">i</span>) { |
1825 |
| - <span class="kw">let</span> <span class="ident">buf</span> <span class="op">=</span> <span class="ident">conv_block_unblock_helper</span>(<span class="ident">buf</span>, <span class="ident">i</span>, <span class="kw-2">&mut</span> <span class="ident">rstat</span>).<span class="ident">unwrap</span>(); |
1826 |
| - <span class="prelude-val">Ok</span>((<span class="ident">rstat</span>, <span class="ident">buf</span>)) |
1827 |
| - } <span class="kw">else</span> { |
1828 |
| - <span class="prelude-val">Ok</span>((<span class="ident">rstat</span>, <span class="ident">buf</span>)) |
| 1794 | + |
| 1795 | + <span class="kw">match</span> <span class="ident">i</span>.<span class="ident">cflags</span>.<span class="ident">mode</span> { |
| 1796 | + <span class="prelude-val">Some</span>(<span class="kw-2">ref</span> <span class="ident">mode</span>) => { |
| 1797 | + <span class="kw">let</span> <span class="ident">buf</span> <span class="op">=</span> <span class="ident">conv_block_unblock_helper</span>(<span class="ident">buf</span>, <span class="ident">mode</span>, <span class="kw-2">&mut</span> <span class="ident">rstat</span>); |
| 1798 | + <span class="prelude-val">Ok</span>((<span class="ident">rstat</span>, <span class="ident">buf</span>)) |
| 1799 | + } |
| 1800 | + <span class="prelude-val">None</span> => <span class="prelude-val">Ok</span>((<span class="ident">rstat</span>, <span class="ident">buf</span>)), |
1829 | 1801 | }
|
1830 | 1802 | }
|
1831 | 1803 |
|
|
2271 | 2243 | <span class="ident">src</span>: <span class="ident">LazyReader</span> {
|
2272 | 2244 | <span class="ident">src</span>: <span class="ident">File::open</span>(<span class="string">"./test-resources/deadbeef-16.test"</span>).<span class="ident">unwrap</span>(),
|
2273 | 2245 | },
|
2274 |
| - <span class="ident">non_ascii</span>: <span class="bool-val">false</span>, |
2275 | 2246 | <span class="ident">ibs</span>: <span class="number">16</span>,
|
2276 | 2247 | <span class="ident">print_level</span>: <span class="prelude-val">None</span>,
|
2277 | 2248 | <span class="ident">count</span>: <span class="prelude-val">None</span>,
|
|
2318 | 2289 | <span class="ident">src</span>: <span class="ident">File::open</span>(<span class="string">"./test-resources/random-5828891cb1230748e146f34223bbd3b5.test"</span>)
|
2319 | 2290 | .<span class="ident">unwrap</span>(),
|
2320 | 2291 | },
|
2321 |
| - <span class="ident">non_ascii</span>: <span class="bool-val">false</span>, |
2322 | 2292 | <span class="ident">ibs</span>: <span class="number">521</span>,
|
2323 | 2293 | <span class="ident">print_level</span>: <span class="prelude-val">None</span>,
|
2324 | 2294 | <span class="ident">count</span>: <span class="prelude-val">None</span>,
|
|
0 commit comments