path: root/scripts
diff options
authorAndré Almeida <>2019-09-17 16:41:45 -0300
committerJonathan Corbet <>2019-10-01 06:57:12 -0600
commit2b5f78e5e942d76e5497f53c2298900224b52c51 (patch)
treefe375d7b53e11ef89035c76a744ae41bf114560e /scripts
parent2730ce017fa6df49bad9ad932932b863f63a4b50 (diff)
kernel-doc: fix processing nested structs with attributes
The current regular expression for strip attributes of structs (and for nested ones as well) also removes all whitespaces that may surround the attribute. After that, the code will split structs and iterate for each symbol separated by comma at the end of struct definition (e.g. "} alias1, alias2;"). However, if the nested struct does not have any alias and has an attribute, it will result in a empty string at the closing bracket (e.g "};"). This will make the split return nothing and $newmember will keep uninitialized. Fix that, by ensuring that the attribute substitution will leave at least one whitespace. Signed-off-by: André Almeida <> Signed-off-by: Jonathan Corbet <>
Diffstat (limited to 'scripts')
1 files changed, 4 insertions, 4 deletions
diff --git a/scripts/kernel-doc b/scripts/kernel-doc
index 81dc91760b23..baa2be7e5284 100755
--- a/scripts/kernel-doc
+++ b/scripts/kernel-doc
@@ -1073,10 +1073,10 @@ sub dump_struct($$) {
# strip comments:
$members =~ s/\/\*.*?\*\///gos;
# strip attributes
- $members =~ s/\s*__attribute__\s*\(\([a-z0-9,_\*\s\(\)]*\)\)//gi;
- $members =~ s/\s*__aligned\s*\([^;]*\)//gos;
- $members =~ s/\s*__packed\s*//gos;
- $members =~ s/\s*CRYPTO_MINALIGN_ATTR//gos;
+ $members =~ s/\s*__attribute__\s*\(\([a-z0-9,_\*\s\(\)]*\)\)/ /gi;
+ $members =~ s/\s*__aligned\s*\([^;]*\)/ /gos;
+ $members =~ s/\s*__packed\s*/ /gos;
+ $members =~ s/\s*CRYPTO_MINALIGN_ATTR/ /gos;
$members =~ s/DECLARE_BITMAP\s*\(([^,)]+),\s*([^,)]+)\)/unsigned long $1\[BITS_TO_LONGS($2)\]/gos;