|
773 | 773 | <span id="768">768</span>
|
774 | 774 | <span id="769">769</span>
|
775 | 775 | <span id="770">770</span>
|
| 776 | +<span id="771">771</span> |
| 777 | +<span id="772">772</span> |
| 778 | +<span id="773">773</span> |
| 779 | +<span id="774">774</span> |
| 780 | +<span id="775">775</span> |
| 781 | +<span id="776">776</span> |
| 782 | +<span id="777">777</span> |
| 783 | +<span id="778">778</span> |
| 784 | +<span id="779">779</span> |
| 785 | +<span id="780">780</span> |
| 786 | +<span id="781">781</span> |
| 787 | +<span id="782">782</span> |
| 788 | +<span id="783">783</span> |
| 789 | +<span id="784">784</span> |
776 | 790 | </pre><pre class="rust"><code><span class="comment">// This file is part of the uutils coreutils package.</span>
|
777 | 791 | <span class="comment">//</span>
|
778 | 792 | <span class="comment">// (c) Fangxu Hu <framlog@gmail.com></span>
|
|
1067 | 1081 | }
|
1068 | 1082 |
|
1069 | 1083 | <span class="doccomment">/// For each path, get the filesystem that contains that path.</span>
|
1070 |
| -<span class="kw">fn</span> <span class="ident">get_named_filesystems</span><span class="op"><</span><span class="ident">P</span><span class="op">></span>(<span class="ident">paths</span>: <span class="kw-2">&</span>[<span class="ident">P</span>]) -> <span class="ident">Vec</span><span class="op"><</span><span class="ident">Filesystem</span><span class="op">></span> |
| 1084 | +<span class="kw">fn</span> <span class="ident">get_named_filesystems</span><span class="op"><</span><span class="ident">P</span><span class="op">></span>(<span class="ident">paths</span>: <span class="kw-2">&</span>[<span class="ident">P</span>], <span class="ident">opt</span>: <span class="kw-2">&</span><span class="ident">Options</span>) -> <span class="ident">Vec</span><span class="op"><</span><span class="ident">Filesystem</span><span class="op">></span> |
1071 | 1085 | <span class="kw">where</span>
|
1072 | 1086 | <span class="ident">P</span>: <span class="ident">AsRef</span><span class="op"><</span><span class="ident">Path</span><span class="op">></span>,
|
1073 | 1087 | {
|
|
1077 | 1091 | <span class="comment">// considered. The "lofs" filesystem is a loopback</span>
|
1078 | 1092 | <span class="comment">// filesystem present on Solaris and FreeBSD systems. It</span>
|
1079 | 1093 | <span class="comment">// is similar to a symbolic link.</span>
|
1080 |
| - <span class="kw">let</span> <span class="ident">mounts</span>: <span class="ident">Vec</span><span class="op"><</span><span class="ident">MountInfo</span><span class="op">></span> <span class="op">=</span> <span class="ident">read_fs_list</span>() |
| 1094 | + <span class="kw">let</span> <span class="ident">mounts</span>: <span class="ident">Vec</span><span class="op"><</span><span class="ident">MountInfo</span><span class="op">></span> <span class="op">=</span> <span class="ident">filter_mount_list</span>(<span class="ident">read_fs_list</span>(), <span class="ident">opt</span>) |
1081 | 1095 | .<span class="ident">into_iter</span>()
|
1082 | 1096 | .<span class="ident">filter</span>(<span class="op">|</span><span class="ident">mi</span><span class="op">|</span> <span class="ident">mi</span>.<span class="ident">fs_type</span> <span class="op">!</span><span class="op">=</span> <span class="string">"lofs"</span> <span class="op">&&</span> <span class="op">!</span><span class="ident">mi</span>.<span class="ident">dummy</span>)
|
1083 | 1097 | .<span class="ident">collect</span>();
|
1084 | 1098 |
|
| 1099 | + <span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">result</span> <span class="op">=</span> <span class="macro">vec!</span>[]; |
| 1100 | + |
| 1101 | + <span class="comment">// this happens if the file system type doesn't exist</span> |
| 1102 | + <span class="kw">if</span> <span class="ident">mounts</span>.<span class="ident">is_empty</span>() { |
| 1103 | + <span class="macro">show!</span>(<span class="ident">USimpleError::new</span>(<span class="number">1</span>, <span class="string">"no file systems processed"</span>)); |
| 1104 | + <span class="kw">return</span> <span class="ident">result</span>; |
| 1105 | + } |
| 1106 | + |
1085 | 1107 | <span class="comment">// Convert each path into a `Filesystem`, which contains</span>
|
1086 | 1108 | <span class="comment">// both the mount information and usage information.</span>
|
1087 |
| - <span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">result</span> <span class="op">=</span> <span class="macro">vec!</span>[]; |
1088 | 1109 | <span class="kw">for</span> <span class="ident">path</span> <span class="kw">in</span> <span class="ident">paths</span> {
|
1089 | 1110 | <span class="kw">match</span> <span class="ident">Filesystem::from_path</span>(<span class="kw-2">&</span><span class="ident">mounts</span>, <span class="ident">path</span>) {
|
1090 | 1111 | <span class="prelude-val">Some</span>(<span class="ident">fs</span>) => <span class="ident">result</span>.<span class="ident">push</span>(<span class="ident">fs</span>),
|
1091 |
| - <span class="prelude-val">None</span> => <span class="macro">show!</span>(<span class="ident">USimpleError::new</span>( |
1092 |
| - <span class="number">1</span>, |
1093 |
| - <span class="macro">format!</span>(<span class="string">"{}: No such file or directory"</span>, <span class="ident">path</span>.<span class="ident">as_ref</span>().<span class="ident">display</span>()) |
1094 |
| - )), |
| 1112 | + <span class="prelude-val">None</span> => { |
| 1113 | + <span class="comment">// this happens if specified file system type != file system type of the file</span> |
| 1114 | + <span class="kw">if</span> <span class="ident">path</span>.<span class="ident">as_ref</span>().<span class="ident">exists</span>() { |
| 1115 | + <span class="macro">show!</span>(<span class="ident">USimpleError::new</span>(<span class="number">1</span>, <span class="string">"no file systems processed"</span>)); |
| 1116 | + } <span class="kw">else</span> { |
| 1117 | + <span class="macro">show!</span>(<span class="ident">USimpleError::new</span>( |
| 1118 | + <span class="number">1</span>, |
| 1119 | + <span class="macro">format!</span>(<span class="string">"{}: No such file or directory"</span>, <span class="ident">path</span>.<span class="ident">as_ref</span>().<span class="ident">display</span>()) |
| 1120 | + )); |
| 1121 | + } |
| 1122 | + } |
1095 | 1123 | }
|
1096 | 1124 | }
|
1097 | 1125 | <span class="ident">result</span>
|
|
1145 | 1173 | }
|
1146 | 1174 | <span class="prelude-val">Some</span>(<span class="ident">paths</span>) => {
|
1147 | 1175 | <span class="kw">let</span> <span class="ident">paths</span>: <span class="ident">Vec</span><span class="op"><</span><span class="kw-2">&</span><span class="ident">str</span><span class="op">></span> <span class="op">=</span> <span class="ident">paths</span>.<span class="ident">collect</span>();
|
1148 |
| - <span class="kw">let</span> <span class="ident">filesystems</span> <span class="op">=</span> <span class="ident">get_named_filesystems</span>(<span class="kw-2">&</span><span class="ident">paths</span>); |
| 1176 | + <span class="kw">let</span> <span class="ident">filesystems</span> <span class="op">=</span> <span class="ident">get_named_filesystems</span>(<span class="kw-2">&</span><span class="ident">paths</span>, <span class="kw-2">&</span><span class="ident">opt</span>); |
1149 | 1177 |
|
1150 | 1178 | <span class="comment">// This can happen if paths are given as command-line arguments</span>
|
1151 | 1179 | <span class="comment">// but none of the paths exist.</span>
|
|
0 commit comments