@@ -12,7 +12,7 @@ extern crate rustc_plugin;
12
12
use rustc_interface:: interface;
13
13
use rustc_tools_util:: * ;
14
14
15
- use std:: path:: Path ;
15
+ use std:: path:: { Path , PathBuf } ;
16
16
use std:: process:: { exit, Command } ;
17
17
18
18
mod lintlist;
@@ -270,12 +270,19 @@ pub fn main() {
270
270
let sys_root_arg = arg_value ( & orig_args, "--sysroot" , |_| true ) ;
271
271
let have_sys_root_arg = sys_root_arg. is_some ( ) ;
272
272
let sys_root = sys_root_arg
273
- . map ( std :: string :: ToString :: to_string )
274
- . or_else ( || std:: env:: var ( "SYSROOT" ) . ok ( ) )
273
+ . map ( PathBuf :: from )
274
+ . or_else ( || std:: env:: var ( "SYSROOT" ) . ok ( ) . map ( PathBuf :: from ) )
275
275
. or_else ( || {
276
276
let home = option_env ! ( "RUSTUP_HOME" ) . or ( option_env ! ( "MULTIRUST_HOME" ) ) ;
277
277
let toolchain = option_env ! ( "RUSTUP_TOOLCHAIN" ) . or ( option_env ! ( "MULTIRUST_TOOLCHAIN" ) ) ;
278
- home. and_then ( |home| toolchain. map ( |toolchain| format ! ( "{}/toolchains/{}" , home, toolchain) ) )
278
+ home. and_then ( |home| {
279
+ toolchain. map ( |toolchain| {
280
+ let mut path = PathBuf :: from ( home) ;
281
+ path. push ( "toolchains" ) ;
282
+ path. push ( toolchain) ;
283
+ path
284
+ } )
285
+ } )
279
286
} )
280
287
. or_else ( || {
281
288
Command :: new ( "rustc" )
@@ -284,9 +291,10 @@ pub fn main() {
284
291
. output ( )
285
292
. ok ( )
286
293
. and_then ( |out| String :: from_utf8 ( out. stdout ) . ok ( ) )
287
- . map ( |s| s. trim ( ) . to_owned ( ) )
294
+ . map ( |s| PathBuf :: from ( s. trim ( ) ) )
288
295
} )
289
- . or_else ( || option_env ! ( "SYSROOT" ) . map ( String :: from) )
296
+ . or_else ( || option_env ! ( "SYSROOT" ) . map ( PathBuf :: from) )
297
+ . map ( |pb| pb. to_string_lossy ( ) . to_string ( ) )
290
298
. expect ( "need to specify SYSROOT env var during clippy compilation, or use rustup or multirust" ) ;
291
299
292
300
// Setting RUSTC_WRAPPER causes Cargo to pass 'rustc' as the first argument.
0 commit comments