pidgin/pidgin

4b8cc47d05da
jabber: Only attempt to calculate hash for supported hashes

The way I initially ported jabber_caps_client_iqcb() to GChecksum
used G_CHECKSUM_SHA1 as a default hash type. This was to prevent
hash_type from being used uninitialized. However, it was pointed
out that it would probably be better to specifically only hash
when the hash type has been recognized. This patch refactors it
to do so.
# This program takes a C source as the input and produces the list of
# all signals registered.
#
# Output is:
# <signal name="Changed">
# <arg name="new_value" type="b"/>
# </signal>
from __future__ import absolute_import, division, print_function
import argparse
import fileinput
import re
import sys
# List "excluded" contains signals that shouldn't be exported via
# DBus. If you remove a signal from this list, please make sure
# that it does not break "make" with the configure option
# "--enable-dbus" turned on.
excluded = [
# purple_dbus_signal_emit_purple prevents our "dbus-method-called"
# signal from being propagated to dbus.
"dbus-method-called",
]
registerregex = re.compile(
"purple_signal_register[^;]+\"([\w\-]+)\"[^;]+(purple_marshal_\w+)[^;]+;")
nameregex = re.compile('[-_][a-z]')
parser = argparse.ArgumentParser()
parser.add_argument('input', nargs='*',
help='Input files (or stdin if not specified)')
parser.add_argument('-o', '--output', type=argparse.FileType('w'),
help='Output to file instead of stdout')
cmd_args = parser.parse_args()
print("/* Generated by %s. Do not edit! */" % (sys.argv[0], ),
file=cmd_args.output)
print("const char *dbus_signals = ", file=cmd_args.output)
input = ''.join(list(fileinput.input(cmd_args.input)))
for match in registerregex.finditer(input):
signal = match.group(1)
marshal = match.group(2)
if signal in excluded:
continue
signal = nameregex.sub(lambda x: x.group()[1].upper(), '-' + signal)
print("\" <signal name='%s'>\\n\"" % (signal, ), file=cmd_args.output)
args = marshal.split('_')
# ['purple', 'marshal', <return type>, '', args...]
if len(args) > 4:
for arg in args[4:]:
if arg == "POINTER":
type = 'p'
elif arg == "ENUM":
type = 'i'
elif arg == "INT":
type = 'i'
elif arg == "UINT":
type = 'u'
elif arg == "INT64":
type = 'x'
elif arg == "UINT64":
type = 't'
elif arg == "BOOLEAN":
type = 'b'
print("\" <arg type='%s'/>\\n\"" % (type, ),
file=cmd_args.output)
print("\" </signal>\\n\"", file=cmd_args.output)
print(";", file=cmd_args.output)