1
1
use std:: {
2
2
env, fs,
3
- ffi:: CString ,
4
3
str:: FromStr ,
5
4
collections:: HashSet ,
5
+ ffi:: { CString , OsStr } ,
6
6
path:: { Path , PathBuf } ,
7
7
process:: { Command , Stdio , exit} ,
8
8
io:: { Read , Result , Error , Write } ,
@@ -106,16 +106,17 @@ fn is_elf32(path: &str) -> Result<bool> {
106
106
Ok ( buff[ 4 ] == 1 )
107
107
}
108
108
109
- fn get_env_var ( var : & str ) -> String {
110
- env:: var ( var ) . unwrap_or ( "" . into ( ) )
109
+ fn get_env_var < K : AsRef < OsStr > > ( key : K ) -> String {
110
+ env:: var ( key ) . unwrap_or ( "" . into ( ) )
111
111
}
112
112
113
- fn add_to_env ( var : & str , val : & str ) {
114
- let old_val = get_env_var ( var) ;
113
+ fn add_to_env < K : AsRef < OsStr > , V : AsRef < OsStr > > ( key : K , val : V ) {
114
+ let ( key, val) = ( key. as_ref ( ) , val. as_ref ( ) . to_str ( ) . unwrap ( ) ) ;
115
+ let old_val = get_env_var ( key) ;
115
116
if old_val. is_empty ( ) {
116
- env:: set_var ( var , val)
117
+ env:: set_var ( key , val)
117
118
} else if !old_val. contains ( val) {
118
- env:: set_var ( var , format ! ( "{val}:{old_val}" ) )
119
+ env:: set_var ( key , format ! ( "{val}:{old_val}" ) )
119
120
}
120
121
}
121
122
@@ -507,47 +508,50 @@ fn main() {
507
508
let share_dir = PathBuf :: from ( format ! ( "{sharun_dir}/share" ) ) ;
508
509
if share_dir. exists ( ) {
509
510
if let Ok ( dir) = share_dir. read_dir ( ) {
510
- let share = share_dir. to_string_lossy ( ) ;
511
511
add_to_env ( "XDG_DATA_DIRS" , "/usr/local/share" ) ;
512
512
add_to_env ( "XDG_DATA_DIRS" , "/usr/share" ) ;
513
- add_to_env ( "XDG_DATA_DIRS" , & share ) ;
513
+ add_to_env ( "XDG_DATA_DIRS" , & share_dir ) ;
514
514
for entry in dir. flatten ( ) {
515
- if entry. path ( ) . is_dir ( ) {
515
+ let entry_path = entry. path ( ) ;
516
+ if entry_path. is_dir ( ) {
516
517
let name = entry. file_name ( ) ;
517
518
match name. to_str ( ) . unwrap ( ) {
518
519
"glvnd" => {
519
- let egl_vendor = & format ! ( "{share}/glvnd/ egl_vendor.d") ;
520
- if Path :: new ( egl_vendor) . exists ( ) {
520
+ let egl_vendor = & entry_path . join ( " egl_vendor.d") ;
521
+ if egl_vendor. exists ( ) {
521
522
add_to_env ( "__EGL_VENDOR_LIBRARY_DIRS" , "/usr/share/glvnd/egl_vendor.d" ) ;
522
523
add_to_env ( "__EGL_VENDOR_LIBRARY_DIRS" , egl_vendor)
523
524
}
524
525
}
525
526
"vulkan" => {
526
- let icd = & format ! ( "{share}/vulkan/ icd.d") ;
527
- if Path :: new ( icd) . exists ( ) {
527
+ let icd = & entry_path . join ( " icd.d") ;
528
+ if icd. exists ( ) {
528
529
add_to_env ( "VK_DRIVER_FILES" , "/usr/share/vulkan/icd.d" ) ;
529
530
add_to_env ( "VK_DRIVER_FILES" , icd)
530
531
}
531
532
}
532
533
"X11" => {
533
- let xkb = & format ! ( "{share}/X11/ xkb") ;
534
- if Path :: new ( xkb) . exists ( ) {
534
+ let xkb = & entry_path . join ( " xkb") ;
535
+ if xkb. exists ( ) {
535
536
env:: set_var ( "XKB_CONFIG_ROOT" , xkb)
536
537
}
537
538
}
538
539
"glib-2.0" => {
539
- let schemas = & format ! ( "{share}/glib-2.0/ schemas") ;
540
- if Path :: new ( schemas) . exists ( ) {
540
+ let schemas = & entry_path . join ( " schemas") ;
541
+ if schemas. exists ( ) {
541
542
add_to_env ( "GSETTINGS_SCHEMA_DIR" , "/usr/share/glib-2.0/schemas" ) ;
542
543
add_to_env ( "GSETTINGS_SCHEMA_DIR" , schemas)
543
544
}
544
545
}
545
546
"gimp" => {
546
- let gimp = & format ! ( "{share}/gimp/ 2.0") ;
547
- if Path :: new ( gimp ) . exists ( ) {
548
- env:: set_var ( "GIMP2_DATADIR" , gimp )
547
+ let gimp2_datadir = & entry_path . join ( " 2.0") ;
548
+ if gimp2_datadir . exists ( ) {
549
+ env:: set_var ( "GIMP2_DATADIR" , gimp2_datadir )
549
550
}
550
551
}
552
+ "terminfo" => {
553
+ env:: set_var ( "TERMINFO" , entry_path)
554
+ }
551
555
_ => { }
552
556
}
553
557
}
@@ -559,19 +563,20 @@ fn main() {
559
563
if etc_dir. exists ( ) {
560
564
if let Ok ( dir) = etc_dir. read_dir ( ) {
561
565
for entry in dir. flatten ( ) {
562
- if entry. path ( ) . is_dir ( ) {
566
+ let entry_path = entry. path ( ) ;
567
+ if entry_path. is_dir ( ) {
563
568
let name = entry. file_name ( ) ;
564
569
match name. to_str ( ) . unwrap ( ) {
565
570
"fonts" => {
566
- let fonts_conf = etc_dir . join ( "fonts/ fonts.conf" ) ;
571
+ let fonts_conf = entry_path . join ( "fonts.conf" ) ;
567
572
if fonts_conf. exists ( ) {
568
573
env:: set_var ( "FONTCONFIG_FILE" , fonts_conf)
569
574
}
570
575
}
571
576
"gimp" => {
572
- let conf = etc_dir . join ( "gimp/ 2.0" ) ;
573
- if conf . exists ( ) {
574
- env:: set_var ( "GIMP2_SYSCONFDIR" , conf )
577
+ let gimp2_sysconfdir = entry_path . join ( "2.0" ) ;
578
+ if gimp2_sysconfdir . exists ( ) {
579
+ env:: set_var ( "GIMP2_SYSCONFDIR" , gimp2_sysconfdir )
575
580
}
576
581
}
577
582
_ => { }
0 commit comments