I discovered a quite nasty bug in getdirs. I'm surprised it has never
caused a major problem before. When looking for directories that match
a pattern, the existing code uses 'catch' to avoid an error if nothing
matches the glob. The output is saved in $tmp. When nothing matches,
the error output is saved instead:

% glob /not/here
no files matched glob pattern "/not/here"
% catch {glob /not/here} tmp
1
% puts $tmp
no files matched glob pattern "/not/here"

This is wrong. Instead, we should use glob -nocomplain. This sets $tmp
to empty if there are no matches. In addition, I see no reason why
getdirs should call perror if there are no matches--this path was
never executed before, of course.  Being a utility procedure, it is
fine to return "" and let the caller decide what to do.

I removed the if { $tmp ne "" } and else expressions and
reindented. The diff output below was generated with 'git diff
-w'.

OK?

Cheers, Ben


diff --git a/lib/utils.exp b/lib/utils.exp
index 57a6831..d397679 100644
--- a/lib/utils.exp
+++ b/lib/utils.exp
@@ -44,8 +44,7 @@ proc getdirs { args } {
        set pattern "*"
     }
     verbose "Looking in $path for directories that match \"${pattern}\"" 3
-    catch "glob $path/$pattern" tmp
-    if { $tmp ne "" } {
+    set tmp [glob -nocomplain $path/$pattern]
     foreach i $tmp {
        if {[file isdirectory $i]} {
            switch -- "[file tail $i]" {
@@ -72,10 +71,6 @@ proc getdirs { args } {
            }
        }
     }
-    } else {
-       perror $tmp
-       return ""
-    }
 
     if {![info exists dirs]} {
        return ""

Attachment: signature.asc
Description: PGP signature

_______________________________________________
DejaGnu mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/dejagnu

Reply via email to