@@ -162,9 +162,7 @@ fn add_manually_directories(window_main: &Window, tree_view: &TreeView, excluded
162
162
#[ cfg( target_family = "windows" ) ]
163
163
let mut text = Common :: normalize_windows_path ( text) . to_string_lossy ( ) . to_string ( ) ;
164
164
165
- while text != "/" && ( text. ends_with ( '/' ) || text. ends_with ( '\\' ) ) {
166
- text. pop ( ) ;
167
- }
165
+ remove_ending_slashes ( & mut text) ;
168
166
169
167
if !text. is_empty ( ) {
170
168
let list_store = get_list_store ( & tree_view) ;
@@ -186,3 +184,71 @@ fn add_manually_directories(window_main: &Window, tree_view: &TreeView, excluded
186
184
dialog. close ( ) ;
187
185
} ) ;
188
186
}
187
+ fn remove_ending_slashes ( original_string : & mut String ) {
188
+ let mut windows_disk_path: bool = false ;
189
+ let mut chars = original_string. chars ( ) ;
190
+ if let Some ( first_character) = chars. next ( ) {
191
+ if first_character. is_alphabetic ( ) {
192
+ if let Some ( second_character) = chars. next ( ) {
193
+ if second_character == ':' {
194
+ windows_disk_path = true ;
195
+ original_string. push ( '/' ) ; // In case of adding window path without ending slash e.g. C: instead C:/ or C:\
196
+ }
197
+ }
198
+ }
199
+ }
200
+
201
+ while ( original_string != "/" && ( original_string. ends_with ( '/' ) || original_string. ends_with ( '\\' ) ) ) && ( !windows_disk_path || original_string. len ( ) > 3 ) {
202
+ original_string. pop ( ) ;
203
+ }
204
+ }
205
+ #[ test]
206
+ pub fn test_remove_ending_slashes ( ) {
207
+ let mut original = "/home/rafal" . to_string ( ) ;
208
+ remove_ending_slashes ( & mut original) ;
209
+ assert_eq ! ( & original, "/home/rafal" ) ;
210
+
211
+ let mut original = "/home/rafal/" . to_string ( ) ;
212
+ remove_ending_slashes ( & mut original) ;
213
+ assert_eq ! ( & original, "/home/rafal" ) ;
214
+
215
+ let mut original = "/home/rafal\\ " . to_string ( ) ;
216
+ remove_ending_slashes ( & mut original) ;
217
+ assert_eq ! ( & original, "/home/rafal" ) ;
218
+
219
+ let mut original = "/home/rafal/////////" . to_string ( ) ;
220
+ remove_ending_slashes ( & mut original) ;
221
+ assert_eq ! ( & original, "/home/rafal" ) ;
222
+
223
+ let mut original = "/home/rafal/\\ //////\\ \\ " . to_string ( ) ;
224
+ remove_ending_slashes ( & mut original) ;
225
+ assert_eq ! ( & original, "/home/rafal" ) ;
226
+
227
+ let mut original = "/home/rafal\\ \\ \\ \\ \\ \\ \\ \\ " . to_string ( ) ;
228
+ remove_ending_slashes ( & mut original) ;
229
+ assert_eq ! ( & original, "/home/rafal" ) ;
230
+
231
+ let mut original = "\\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ " . to_string ( ) ;
232
+ remove_ending_slashes ( & mut original) ;
233
+ assert_eq ! ( & original, "" ) ;
234
+
235
+ let mut original = "//////////" . to_string ( ) ;
236
+ remove_ending_slashes ( & mut original) ;
237
+ assert_eq ! ( & original, "/" ) ;
238
+
239
+ let mut original = "C:/" . to_string ( ) ;
240
+ remove_ending_slashes ( & mut original) ;
241
+ assert_eq ! ( & original, "C:/" ) ;
242
+
243
+ let mut original = "C:\\ " . to_string ( ) ;
244
+ remove_ending_slashes ( & mut original) ;
245
+ assert_eq ! ( & original, "C:\\ " ) ;
246
+
247
+ let mut original = "C://////////" . to_string ( ) ;
248
+ remove_ending_slashes ( & mut original) ;
249
+ assert_eq ! ( & original, "C:/" ) ;
250
+
251
+ let mut original = "C:\\ \\ \\ \\ \\ " . to_string ( ) ;
252
+ remove_ending_slashes ( & mut original) ;
253
+ assert_eq ! ( & original, "C:\\ " ) ;
254
+ }
0 commit comments