@@ -215,23 +215,37 @@ pub fn glob_with(pattern: &str, options: MatchOptions) -> Result<Paths, PatternE
215215 // make sure that the pattern is valid first, else early return with error
216216 let _ = Pattern :: new ( pattern) ?;
217217 let mut new_pattern = pattern. to_owned ( ) ;
218- if options. glob_tilde_expansion {
219- let home_dir = get_home_dir ( ) ;
220- if pattern == "~" || pattern. starts_with ( "~/" ) {
221- if let Some ( home) = home_dir {
222- new_pattern = pattern. replacen ( "~" , & home, 1 ) ;
218+ if options. glob_tilde_expansion && pattern. starts_with ( "~" ) {
219+ let mut home_dir = match get_home_dir ( ) {
220+ Some ( v) => v,
221+ None => {
222+ return Err ( PatternError {
223+ pos : 0 ,
224+ msg : "Failed to determine home directory." ,
225+ } )
223226 }
224- } else if pattern. starts_with ( "~" ) {
227+ } ;
228+ if pattern == "~" || pattern. starts_with ( "~/" ) {
229+ new_pattern = pattern. replacen ( "~" , & home_dir, 1 ) ;
230+ } else {
225231 if let Some ( user) = get_user_name ( ) {
226232 match pattern. strip_prefix ( "~" ) . unwrap ( ) . strip_prefix ( & user) {
227233 Some ( v) if v. starts_with ( "/" ) || v. is_empty ( ) => {
228- if let Some ( mut p) = home_dir {
229- p. push_str ( v) ;
230- new_pattern = p;
231- }
234+ home_dir. push_str ( v) ;
235+ new_pattern = home_dir;
236+ }
237+ _ => {
238+ return Err ( PatternError {
239+ pos : 1 ,
240+ msg : "'~' not followed by user name." ,
241+ } )
232242 }
233- _ => { }
234243 } ;
244+ } else {
245+ return Err ( PatternError {
246+ pos : 1 ,
247+ msg : "Failed to determine user name." ,
248+ } ) ;
235249 }
236250 }
237251 }
0 commit comments