view libpurple/dbus-analyze-types.py @ 31521:01a8f82edc45

oscar: Plug two leaks in peer_proxy code ==32109== 41 bytes in 1 blocks are definitely lost in loss record 9,232 of 18,342 ==32109== at 0x4C244E8: malloc (vg_replace_malloc.c:236) ==32109== by 0x90D8534: g_malloc (gmem.c:132) ==32109== by 0x1613A4F0: byte_stream_new (bstream.c:32) ==32109== by 0x1615D3F5: peer_proxy_connection_established_cb (peer_proxy.c:76) ==32109== by 0x93F754B: purple_proxy_connect_data_connected (proxy.c:617) ==32109== by 0x93F7637: socket_ready_cb (proxy.c:676) ==32109== 44 bytes in 1 blocks are definitely lost in loss record 9,263 of 18,342 ==32109== at 0x4C244E8: malloc (vg_replace_malloc.c:236) ==32109== by 0x90D8534: g_malloc (gmem.c:132) ==32109== by 0x1613A4F0: byte_stream_new (bstream.c:32) ==32109== by 0x1615D2E1: peer_proxy_connection_established_cb (peer_proxy.c:112) ==32109== by 0x93F754B: purple_proxy_connect_data_connected (proxy.c:617) ==32109== by 0x93F7637: socket_ready_cb (proxy.c:676)
author Paul Aurich <paul@darkrain42.org>
date Tue, 28 Dec 2010 06:01:41 +0000
parents 5fe8042783c1
children
line wrap: on
line source

# This program takes a C header/source as the input and produces
#
# with --keyword=enum: the list of all enums
# with --keyword=struct: the list of all structs
#
# the output styles:
#
# --enum    DBUS_POINTER_NAME1,
#           DBUS_POINTER_NAME2,
#           DBUS_POINTER_NAME3, 
# 
# --list    NAME1
#           NAME2
#           NAME3
# 


import re
import sys

options = {}

def toprint(match, line):
    if verbatim:
        return line
    else:
        return pattern % match

for arg in sys.argv[1:]:
    if arg[0:2] == "--":
        mylist = arg[2:].split("=",1)
        command = mylist[0]
        if len(mylist) > 1:
            options[command] = mylist[1]
        else:
            options[command] = None

keyword = options.get("keyword", "struct")
pattern = options.get("pattern", "%s")
verbatim = options.has_key("verbatim")

structregexp1 = re.compile(r"^(typedef\s+)?%s\s+\w+\s+(\w+)\s*;" % keyword)
structregexp2 = re.compile(r"^(typedef\s+)?%s" % keyword)
structregexp3 = re.compile(r"^}\s+(\w+)\s*;")

print "/* Generated by %s.  Do not edit! */" % sys.argv[0]

myinput = iter(sys.stdin)

for line in myinput:
    match = structregexp1.match(line)
    if match is not None:
        print toprint(match.group(2), line)
        continue

    match = structregexp2.match(line)
    if match is not None:
        while True:
            if verbatim:
                print line.rstrip()
            line = myinput.next()
            match = structregexp3.match(line)
            if match is not None:
                print toprint(match.group(1), line)
                break
            if line[0] not in [" ", "\t", "{", "\n"]:
                if verbatim:
                    print line
                break