@@ -80,18 +80,40 @@ void parse_manifest (
80
80
create_manifest_from_value (& cx , & value );
81
81
}
82
82
83
+ String true_ = STRING_LITERAL ("true" );
84
+ String clear_ld_library_path = STRING_LITERAL ("TANGRAM_CLEAR_LD_LIBRARY_PATH" );
85
+ String clear_ld_preload = STRING_LITERAL ("TANGRAM_CLEAR_LD_PRELOAD" );
86
+ String restore_ld_library_path = STRING_LITERAL ("TANGRAM_RESTORE_LD_LIBRARY_PATH" );
87
+ String restore_ld_preload = STRING_LITERAL ("TANGRAM_RESTORE_LD_PRELOAD" );
88
+
83
89
// Render paths.
84
- String ld_library_path = render_ld_library_path (arena , manifest );
85
- if (ld_library_path .ptr ) {
90
+ manifest -> ld_library_path = render_ld_library_path (arena , manifest );
91
+ if (manifest -> ld_library_path .ptr ) {
86
92
String key = STRING_LITERAL ("LD_LIBRARY_PATH" );
87
- insert (arena , & manifest -> env , key , ld_library_path );
93
+ String val = lookup (& manifest -> env , key );
94
+ if (val .ptr ) {
95
+ String ss [2 ] = { val , manifest -> ld_library_path };
96
+ String s = STRING_LITERAL (":" );
97
+ manifest -> ld_library_path = join (arena , s , ss , 2 );
98
+ insert (arena , & manifest -> env , restore_ld_library_path , val );
99
+ } else {
100
+ insert (arena , & manifest -> env , clear_ld_library_path , true_ );
101
+ }
102
+ insert (arena , & manifest -> env , key , manifest -> ld_library_path );
88
103
}
89
-
90
- String ld_preload = render_ld_preload (arena , manifest );
91
- if (ld_preload .ptr ) {
104
+ manifest -> ld_preload = render_ld_preload (arena , manifest );
105
+ if (manifest -> ld_preload .ptr ) {
92
106
String key = STRING_LITERAL ("LD_PRELOAD" );
93
- insert (arena , & manifest -> env , key , ld_preload );
107
+ String val = lookup (& manifest -> env , key );
108
+ if (val .ptr ) {
109
+ String ss [2 ] = { val , manifest -> ld_preload };
110
+ String s = STRING_LITERAL (":" );
111
+ manifest -> ld_preload = join (arena , s , ss , 2 );
112
+ insert (arena , & manifest -> env , restore_ld_preload , val );
113
+ } else {
114
+ insert (arena , & manifest -> env , clear_ld_preload , true_ );
115
+ }
116
+ insert (arena , & manifest -> env , key , manifest -> ld_preload );
94
117
}
95
-
96
118
}
97
119
#undef PATH_MAX
0 commit comments