Commit 6c7e548e authored by Wander Lairson Costa's avatar Wander Lairson Costa Committed by Gabriele Monaco
Browse files

rv/rvgen: use context managers for file operations



Replace manual file open and close operations with context managers
throughout the rvgen codebase. The previous implementation used
explicit open() and close() calls, which could lead to resource leaks
if exceptions occurred between opening and closing the file handles.

This change affects three file operations: reading DOT specification
files in the automata parser, reading template files in the generator
base class, and writing generated monitor files. All now use the with
statement to ensure proper resource cleanup even in error conditions.

Context managers provide automatic cleanup through the with statement,
which guarantees that file handles are closed when the with block
exits regardless of whether an exception occurred. This follows PEP
343 recommendations and is the standard Python idiom for resource
management. The change also reduces code verbosity while improving
safety and maintainability.

Signed-off-by: default avatarWander Lairson Costa <wander@redhat.com>
Reviewed-by: default avatarNam Cao <namcao@linutronix.de>
Reviewed-by: default avatarGabriele Monaco <gmonaco@redhat.com>
Link: https://lore.kernel.org/r/20260223162407.147003-7-wander@redhat.com


Signed-off-by: default avatarGabriele Monaco <gmonaco@redhat.com>
parent c4258d81
Loading
Loading
Loading
Loading
+2 −4
Original line number Diff line number Diff line
@@ -91,13 +91,11 @@ class Automata:
        cursor = 0
        dot_lines = []
        try:
            dot_file = open(self.__dot_path)
            with open(self.__dot_path) as dot_file:
                dot_lines = dot_file.read().splitlines()
        except OSError as exc:
            raise AutomataError(exc.strerror) from exc

        dot_lines = dot_file.read().splitlines()
        dot_file.close()

        # checking the first line:
        line = dot_lines[cursor].split()

+4 −8
Original line number Diff line number Diff line
@@ -51,11 +51,8 @@ class RVGenerator:
        raise FileNotFoundError("Could not find the rv directory, do you have the kernel source installed?")

    def _read_file(self, path):
        fd = open(path, 'r')

        with open(path, 'r') as fd:
            content = fd.read()

        fd.close()
        return content

    def _read_template_file(self, file):
@@ -199,9 +196,8 @@ obj-$(CONFIG_RV_MON_{name_up}) += monitors/{name}/{name}.o
            return

    def __write_file(self, file_name, content):
        file = open(file_name, 'w')
        with open(file_name, 'w') as file:
            file.write(content)
        file.close()

    def _create_file(self, file_name, content):
        path = f"{self.name}/{file_name}"