~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/scripts/check-sysctl-docs

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /scripts/check-sysctl-docs (Version linux-6.12-rc7) and /scripts/check-sysctl-docs (Version linux-4.9.337)


  1 #!/usr/bin/gawk -f                                
  2 # SPDX-License-Identifier: GPL-2.0                
  3                                                   
  4 # Script to check sysctl documentation against    
  5 #                                                 
  6 # Copyright (c) 2020 Stephen Kitt                 
  7                                                   
  8 # Example invocation:                             
  9 #       scripts/check-sysctl-docs -vtable="ker    
 10 #               Documentation/admin-guide/sysc    
 11 #               $(git grep -l register_sysctl)    
 12 #                                                 
 13 # Specify -vdebug=1 to see debugging informati    
 14                                                   
 15 BEGIN {                                           
 16     if (!table) {                                 
 17         print "Please specify the table to loo    
 18         exit 1                                    
 19     }                                             
 20 }                                                 
 21                                                   
 22 # The following globals are used:                 
 23 # documented: maps documented entries (each ke    
 24 # entries: maps ctl_table names and procnames     
 25 #          enumerating the subkeys for a given    
 26 #          procnames)                             
 27 # curtable: the name of the current ctl_table     
 28 # curentry: the name of the current proc entry    
 29 #           a ctl_table, constructed path when    
 30                                                   
 31                                                   
 32 # Remove punctuation from the given value         
 33 function trimpunct(value) {                       
 34     while (value ~ /^["&]/) {                     
 35         value = substr(value, 2)                  
 36     }                                             
 37     while (value ~ /[]["&,}]$/) {                 
 38         value = substr(value, 1, length(value)    
 39     }                                             
 40     return value                                  
 41 }                                                 
 42                                                   
 43 # Print the information for the given entry       
 44 function printentry(entry) {                      
 45     seen[entry]++                                 
 46     printf "* %s from %s", entry, file[entry]     
 47     if (documented[entry]) {                      
 48         printf " (documented)"                    
 49     }                                             
 50     print ""                                      
 51 }                                                 
 52                                                   
 53                                                   
 54 # Stage 1: build the list of documented entrie    
 55 FNR == NR && /^=+$/ {                             
 56     if (prevline ~ /Documentation for/) {         
 57         # This is the main title                  
 58         next                                      
 59     }                                             
 60                                                   
 61     # The previous line is a section title, pa    
 62     $0 = prevline                                 
 63     if (debug) print "Parsing " $0                
 64     inbrackets = 0                                
 65     for (i = 1; i <= NF; i++) {                   
 66         if (length($i) == 0) {                    
 67             continue                              
 68         }                                         
 69         if (!inbrackets && substr($i, 1, 1) ==    
 70             inbrackets = 1                        
 71         }                                         
 72         if (!inbrackets) {                        
 73             token = trimpunct($i)                 
 74             if (length(token) > 0 && token !=     
 75                 if (debug) print trimpunct($i)    
 76                 documented[trimpunct($i)]++       
 77             }                                     
 78         }                                         
 79         if (inbrackets && substr($i, length($i    
 80             inbrackets = 0                        
 81         }                                         
 82     }                                             
 83 }                                                 
 84                                                   
 85 FNR == NR {                                       
 86     prevline = $0                                 
 87     next                                          
 88 }                                                 
 89                                                   
 90                                                   
 91 # Stage 2: process each file and find all sysc    
 92 BEGINFILE {                                       
 93     delete entries                                
 94     curtable = ""                                 
 95     curentry = ""                                 
 96     delete vars                                   
 97     if (debug) print "Processing file " FILENA    
 98 }                                                 
 99                                                   
100 /^static( const)? struct ctl_table/ {             
101     match($0, /static( const)? struct ctl_tabl    
102     curtable = tables[2]                          
103     if (debug) print "Processing table " curta    
104 }                                                 
105                                                   
106 /^};$/ {                                          
107     curtable = ""                                 
108     curentry = ""                                 
109     delete vars                                   
110 }                                                 
111                                                   
112 curtable && /\.procname[\t ]*=[\t ]*".+"/ {       
113     match($0, /.procname[\t ]*=[\t ]*"([^"]+)"    
114     curentry = names[1]                           
115     if (debug) print "Adding entry " curentry     
116     entries[curtable][curentry]++                 
117     file[curentry] = FILENAME                     
118 }                                                 
119                                                   
120 /register_sysctl.*/ {                             
121     match($0, /register_sysctl(|_init|_sz)\("(    
122     if (debug) print "Registering table " tabl    
123     if (tables[2] == table) {                     
124         for (entry in entries[tables[3]]) {       
125             printentry(entry)                     
126         }                                         
127     }                                             
128 }                                                 
129                                                   
130 /kmemdup.*/ {                                     
131     match($0, /([^ \t]+) *= *kmemdup\(([^,]+)     
132     if (debug) print "Found variable " names[1    
133     if (names[2] in entries) {                    
134         vars[names[1]] = names[2]                 
135     }                                             
136 }                                                 
137                                                   
138 /__register_sysctl_table.*/ {                     
139     match($0, /__register_sysctl_table\([^,]+,    
140     if (debug) print "Registering variable tab    
141     if (tables[1] == table && tables[2] in var    
142         for (entry in entries[vars[tables[2]]]    
143             printentry(entry)                     
144         }                                         
145     }                                             
146 }                                                 
147                                                   
148 END {                                             
149     for (entry in documented) {                   
150         if (!seen[entry]) {                       
151             print "No implementation for " ent    
152         }                                         
153     }                                             
154 }                                                 
                                                      

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php