33// For the full copyright and license information, please view the LICENSE
44// file that was distributed with this source code.
55
6- use clap:: { Arg , ArgAction , Command } ;
76use std:: env;
8- use uucore:: translate;
9- use uucore:: { error:: UResult , format_usage} ;
7+ use std:: io:: Write ;
8+
9+ use clap:: { Arg , ArgAction , Command } ;
10+
11+ use uucore:: error:: UResult ;
12+ use uucore:: line_ending:: LineEnding ;
13+ use uucore:: { format_usage, os_str_as_bytes, translate} ;
1014
1115static OPT_NULL : & str = "null" ;
1216
@@ -21,15 +25,16 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> {
2125 . map ( |v| v. map ( ToString :: to_string) . collect ( ) )
2226 . unwrap_or_default ( ) ;
2327
24- let separator = if matches. get_flag ( OPT_NULL ) {
25- "\x00 "
26- } else {
27- "\n "
28- } ;
28+ let separator = LineEnding :: from_zero_flag ( matches. get_flag ( OPT_NULL ) ) ;
2929
3030 if variables. is_empty ( ) {
31- for ( env_var, value) in env:: vars ( ) {
32- print ! ( "{env_var}={value}{separator}" ) ;
31+ for ( env_var, value) in env:: vars_os ( ) {
32+ let env_bytes = os_str_as_bytes ( & env_var) ?;
33+ let val_bytes = os_str_as_bytes ( & value) ?;
34+ std:: io:: stdout ( ) . lock ( ) . write_all ( env_bytes) ?;
35+ print ! ( "=" ) ;
36+ std:: io:: stdout ( ) . lock ( ) . write_all ( val_bytes) ?;
37+ print ! ( "{separator}" ) ;
3338 }
3439 return Ok ( ( ) ) ;
3540 }
@@ -41,8 +46,10 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> {
4146 error_found = true ;
4247 continue ;
4348 }
44- if let Ok ( var) = env:: var ( env_var) {
45- print ! ( "{var}{separator}" ) ;
49+ if let Some ( var) = env:: var_os ( env_var) {
50+ let val_bytes = os_str_as_bytes ( & var) ?;
51+ std:: io:: stdout ( ) . lock ( ) . write_all ( val_bytes) ?;
52+ print ! ( "{separator}" ) ;
4653 } else {
4754 error_found = true ;
4855 }
0 commit comments