dt: dt-extract-compatibles: Don't follow symlinks when walking tree
[platform/kernel/linux-rpi.git] / scripts / dtc / dt-extract-compatibles
index 2b6d228..2f9d0eb 100755 (executable)
@@ -1,8 +1,8 @@
 #!/usr/bin/env python3
 # SPDX-License-Identifier: GPL-2.0-only
 
+import fnmatch
 import os
-import glob
 import re
 import argparse
 
@@ -49,10 +49,20 @@ def print_compat(filename, compatibles):
        else:
                print(*compatibles, sep='\n')
 
+def glob_without_symlinks(root, glob):
+       for path, dirs, files in os.walk(root):
+               # Ignore hidden directories
+               for d in dirs:
+                       if fnmatch.fnmatch(d, ".*"):
+                               dirs.remove(d)
+               for f in files:
+                       if fnmatch.fnmatch(f, glob):
+                               yield os.path.join(path, f)
+
 def files_to_parse(path_args):
        for f in path_args:
                if os.path.isdir(f):
-                       for filename in glob.iglob(f + "/**/*.c", recursive=True):
+                       for filename in glob_without_symlinks(f, "*.c"):
                                yield filename
                else:
                        yield f