view src/dbus-analyze-types.py @ 11157:f068eaabe332

[gaim-migrate @ 13242] Patch submitted to gaim-devel... "Marcin Owsiany sent you a draft advisory regarding multiple libgadu vulnerabilities. "Fortunately" gaim contains an extremely old version of libgadu and is affected only by memory alignment bug, which cannot be exploited on x86. No other critical vulnerabilities are known in gaim's version of libgadu. You'll find the patch in attachment. Regards, Wojtek Kaniewski ekg/libgadu maintainer" committer: Tailor Script <tailor@pidgin.im>
author Richard Laager <rlaager@wiktel.com>
date Mon, 25 Jul 2005 21:20:14 +0000
parents 1c5398ccbeb0
children ebb02ea3c789
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

myinput = iter(sys.stdin)

def outputenum(name):
    print "DBUS_POINTER_%s," % name

def outputdeclare(name):
    print "DECLARE_TYPE(%s, NONE);" % name

def outputtext(name):
    print name

myoutput = outputtext
keyword = "struct"

for arg in sys.argv[1:]:
    if arg[0:2] == "--":
        mylist = arg[2:].split("=")
        command = mylist[0]
        if len(mylist) > 1:
            value = mylist[1]
        else:
            value = None
            
    if command == "enum":
        myoutput = outputenum
    if command == "declare":
        myoutput = outputdeclare
    if command == "list":
        myoutput = outputtext
    if command == "keyword":
        keyword = value
        

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*;")

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

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