File: valgrind_check.py

package info (click to toggle)
python-pyahocorasick 1.4.1-2
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 748 kB
  • sloc: ansic: 4,554; python: 2,823; sh: 312; makefile: 242
file content (72 lines) | stat: -rw-r--r-- 1,801 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
import os
import sys

def main():
    app = Application(sys.argv[1], sys.argv[2])
    if app.run():
        sys.exit(0)
    else:
        sys.exit(1)


class Application(object):
    def __init__(self, srcdir, path):
        self.srcdir  = srcdir
        self.path    = path
        self.sources = set()
        self.dump    = 0

    
    def run(self):
        self.gather_sources()

        with open(self.path, 'rt') as f:
            leaks = self.analyze(f)

        if not leaks:
            return True
        else:
            print("Following references found in %s (file -> line no)" % self.path)
            for name in sorted(leaks):
                lines = ', '.join(map(str, leaks[name]))
                print("- %s: %s" % (name, lines))


    def gather_sources(self):
        for path in os.listdir(self.srcdir):
            if path.endswith('.c'):
                self.sources.add(path)


    def analyze(self, file):
        result = {}
        for k, line in enumerate(file):
            if 'by 0x' in line or 'at 0x' in line:
                try:
                    # by 0xfffff: function (file.c:1234)
                    #                       ^^^^^^
                    index = line.rindex('(') + 1
                    name  = line[index:]
                    if name.startswith('in '):
                        continue

                    index = name.index(':')
                    name = name[:index]

                    if self.dump:
                        print(name)
                except ValueError:
                    continue

                if name in self.sources:
                    if name not in result:
                        result[name] = []

                    result[name].append(k)

        return result


if __name__ == '__main__':
    main()