@@ -162,9 +162,7 @@ fn add_manually_directories(window_main: &Window, tree_view: &TreeView, excluded
162162 #[ cfg( target_family = "windows" ) ]
163163 let mut text = Common :: normalize_windows_path ( text) . to_string_lossy ( ) . to_string ( ) ;
164164
165- while text != "/" && ( text. ends_with ( '/' ) || text. ends_with ( '\\' ) ) {
166- text. pop ( ) ;
167- }
165+ remove_ending_slashes ( & mut text) ;
168166
169167 if !text. is_empty ( ) {
170168 let list_store = get_list_store ( & tree_view) ;
@@ -186,3 +184,71 @@ fn add_manually_directories(window_main: &Window, tree_view: &TreeView, excluded
186184 dialog. close ( ) ;
187185 } ) ;
188186}
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