55
66// spell-checker:ignore (API) nodename osname sysname (options) mnrsv mnrsvo
77
8+ use std:: ffi:: { OsStr , OsString } ;
9+
810use clap:: { Arg , ArgAction , Command } ;
911use platform_info:: * ;
12+ use uucore:: display:: println_verbatim;
1013use uucore:: translate;
1114use uucore:: {
1215 error:: { UResult , USimpleError } ,
@@ -26,18 +29,18 @@ pub mod options {
2629}
2730
2831pub struct UNameOutput {
29- pub kernel_name : Option < String > ,
30- pub nodename : Option < String > ,
31- pub kernel_release : Option < String > ,
32- pub kernel_version : Option < String > ,
33- pub machine : Option < String > ,
34- pub os : Option < String > ,
35- pub processor : Option < String > ,
36- pub hardware_platform : Option < String > ,
32+ pub kernel_name : Option < OsString > ,
33+ pub nodename : Option < OsString > ,
34+ pub kernel_release : Option < OsString > ,
35+ pub kernel_version : Option < OsString > ,
36+ pub machine : Option < OsString > ,
37+ pub os : Option < OsString > ,
38+ pub processor : Option < OsString > ,
39+ pub hardware_platform : Option < OsString > ,
3740}
3841
3942impl UNameOutput {
40- fn display ( & self ) -> String {
43+ fn display ( & self ) -> OsString {
4144 [
4245 self . kernel_name . as_ref ( ) ,
4346 self . nodename . as_ref ( ) ,
@@ -50,9 +53,9 @@ impl UNameOutput {
5053 ]
5154 . into_iter ( )
5255 . flatten ( )
53- . map ( |name| name. as_str ( ) )
56+ . map ( |name| name. as_os_str ( ) )
5457 . collect :: < Vec < _ > > ( )
55- . join ( " " )
58+ . join ( OsStr :: new ( " " ) )
5659 }
5760
5861 pub fn new ( opts : & Options ) -> UResult < Self > {
@@ -68,30 +71,28 @@ impl UNameOutput {
6871 || opts. processor
6972 || opts. hardware_platform ) ;
7073
71- let kernel_name = ( opts . kernel_name || opts . all || none )
72- . then ( || uname. sysname ( ) . to_string_lossy ( ) . to_string ( ) ) ;
74+ let kernel_name =
75+ ( opts . kernel_name || opts . all || none ) . then ( || uname. sysname ( ) . to_owned ( ) ) ;
7376
74- let nodename =
75- ( opts. nodename || opts. all ) . then ( || uname. nodename ( ) . to_string_lossy ( ) . to_string ( ) ) ;
77+ let nodename = ( opts. nodename || opts. all ) . then ( || uname. nodename ( ) . to_owned ( ) ) ;
7678
77- let kernel_release = ( opts. kernel_release || opts. all )
78- . then ( || uname. release ( ) . to_string_lossy ( ) . to_string ( ) ) ;
79+ let kernel_release = ( opts. kernel_release || opts. all ) . then ( || uname. release ( ) . to_owned ( ) ) ;
7980
80- let kernel_version = ( opts. kernel_version || opts. all )
81- . then ( || uname. version ( ) . to_string_lossy ( ) . to_string ( ) ) ;
81+ let kernel_version = ( opts. kernel_version || opts. all ) . then ( || uname. version ( ) . to_owned ( ) ) ;
8282
83- let machine =
84- ( opts. machine || opts. all ) . then ( || uname. machine ( ) . to_string_lossy ( ) . to_string ( ) ) ;
83+ let machine = ( opts. machine || opts. all ) . then ( || uname. machine ( ) . to_owned ( ) ) ;
8584
86- let os = ( opts. os || opts. all ) . then ( || uname. osname ( ) . to_string_lossy ( ) . to_string ( ) ) ;
85+ let os = ( opts. os || opts. all ) . then ( || uname. osname ( ) . to_owned ( ) ) ;
8786
8887 // This option is unsupported on modern Linux systems
8988 // See: https://lists.gnu.org/archive/html/bug-coreutils/2005-09/msg00063.html
90- let processor = opts. processor . then ( || translate ! ( "uname-unknown" ) ) ;
89+ let processor = opts. processor . then ( || translate ! ( "uname-unknown" ) . into ( ) ) ;
9190
9291 // This option is unsupported on modern Linux systems
9392 // See: https://lists.gnu.org/archive/html/bug-coreutils/2005-09/msg00063.html
94- let hardware_platform = opts. hardware_platform . then ( || translate ! ( "uname-unknown" ) ) ;
93+ let hardware_platform = opts
94+ . hardware_platform
95+ . then ( || translate ! ( "uname-unknown" ) . into ( ) ) ;
9596
9697 Ok ( Self {
9798 kernel_name,
@@ -134,7 +135,7 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> {
134135 os : matches. get_flag ( options:: OS ) ,
135136 } ;
136137 let output = UNameOutput :: new ( & options) ?;
137- println ! ( "{}" , output. display( ) ) ;
138+ println_verbatim ( output. display ( ) . as_os_str ( ) ) . unwrap ( ) ;
138139 Ok ( ( ) )
139140}
140141
0 commit comments