threadsafety.py: cleanup (#5132)

This commit is contained in:
Daniel Marjamäki 2023-06-08 19:58:11 +02:00 committed by GitHub
parent 0727528876
commit d4902109cd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 11 additions and 51 deletions

View File

@ -9,9 +9,6 @@ cppcheck addon for threadsafety detection.
"""
from __future__ import print_function
import os
import re
import sys
@ -315,44 +312,24 @@ def checkstatic(data): # noqa: D103
'threadsafety')
def check_MTunsafe(data, srcfile, quiet=False):
def check_MTunsafe(cfg):
"""
Look for functions marked MT-unsafe in their man pages.
The MT-unsafe functions are listed in id_MTunsafe (and id_MTunsafe_full).
That section of code can be regenerated by the external script MT-Unsafe.py
"""
# Assume that the code is Multi-thread safe until proven otherwise
MTsafe = True
# go through each configuration
for cfg in data.iterconfigurations():
if not quiet:
print('Checking %s, config %s...' % (srcfile, cfg.name))
# go through all tokens
for token in cfg.tokenlist:
if token.str in id_MTunsafe:
cppcheckdata.reportError(token, 'warning',
token.str + ' is MT-unsafe',
'threadsafety',
'unsafe-call')
MTsafe = False
return MTsafe
def get_args_parser(): # noqa: D103
parser = cppcheckdata.ArgumentParser()
return parser
for token in cfg.tokenlist:
if token.str in id_MTunsafe:
reportError(token, 'warning', token.str + ' is MT-unsafe',
'unsafe-call')
if __name__ == '__main__':
parser = get_args_parser()
parser = cppcheckdata.ArgumentParser()
args = parser.parse_args()
exit_code = 0
quiet = not any((args.quiet, args.cli))
quiet = args.quiet or args.cli
if not args.dumpfile:
if not args.quiet:
@ -360,31 +337,14 @@ if __name__ == '__main__':
sys.exit(0)
for dumpfile in args.dumpfile:
# for arg in sys.argv[1:]:
# if arg.startswith('-'):
# continue
if not args.quiet:
print('Checking ' + dumpfile + '...')
# load XML from .dump file
data = cppcheckdata.CppcheckData(dumpfile)
# data = cppcheckdata.CppcheckData(args)
# Convert dump file path to source file in format generated by
# cppcheck. For example after the following call:
# cppcheck ./src/my-src.c --dump
# We got 'src/my-src.c' value for 'file' field in cppcheckdata.
srcfile = dumpfile.rstrip('.dump')
srcfile = os.path.expanduser(srcfile)
srcfile = os.path.normpath(srcfile)
check_MTunsafe(data, srcfile, quiet)
print('Checking %s...' % args)
for cfg in data.iterconfigurations():
print('Checking %s, config %s...' % (args, cfg.name))
if not args.quiet:
srcfile = data.files[0]
print('Checking %s, config %s...' % (srcfile, cfg.name))
check_MTunsafe(cfg)
checkstatic(cfg)
sys.exit(cppcheckdata.EXIT_CODE)