mirror of
https://git.proxmox.com/git/fwupd
synced 2025-06-14 13:43:53 +00:00
64 lines
1.7 KiB
Python
Executable File
64 lines
1.7 KiB
Python
Executable File
#!/usr/bin/python3
|
|
# pylint: disable=invalid-name,missing-docstring,consider-using-f-string
|
|
# pylint: disable=too-few-public-methods
|
|
#
|
|
# Copyright (C) 2022 Richard Hughes <richard@hughsie.com>
|
|
#
|
|
# SPDX-License-Identifier: LGPL-2.1+
|
|
|
|
import glob
|
|
import sys
|
|
from typing import List
|
|
|
|
|
|
class ReturnValidator:
|
|
def __init__(self):
|
|
self.warnings: List[str] = []
|
|
|
|
def parse(self, fn: str) -> None:
|
|
|
|
with open(fn, "rb") as f:
|
|
infunc = False
|
|
has_parent_finalize = False
|
|
for line in f.read().decode().split("\n"):
|
|
|
|
# found the function, but ignore the prototype
|
|
if line.find("_finalize(") != -1:
|
|
if line.endswith(";"):
|
|
continue
|
|
infunc = True
|
|
continue
|
|
|
|
# got it
|
|
if line.find("->finalize(") != -1:
|
|
has_parent_finalize = True
|
|
continue
|
|
|
|
# finalize is done
|
|
if infunc and line.startswith("}"):
|
|
if not has_parent_finalize:
|
|
self.warnings.append(
|
|
"{} did not have parent ->finalize()".format(fn)
|
|
)
|
|
break
|
|
|
|
|
|
def test_files():
|
|
|
|
# test all C source files
|
|
validator = ReturnValidator()
|
|
for fn in glob.glob("**/*.c", recursive=True):
|
|
if fn.startswith("dist/") or fn.startswith("subprojects/"):
|
|
continue
|
|
validator.parse(fn)
|
|
for warning in validator.warnings:
|
|
print(warning)
|
|
|
|
return 1 if validator.warnings else 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
# all done!
|
|
sys.exit(test_files())
|