Mercurial > pidgin
view libpurple/dbus-analyze-types.py @ 31588:06ed9020b784
jabber: Treat empty <group/> elements as "Buddies", not ""
This ultimately led to duplicates in the list, because
we had one entry in the GSList as "", and one as NULL, both of which are
invalid group names, which resulted in the core blithely replacing
them with "Buddies" and generating duplicates.
I've tested with and without, and can reproduce the issues without the change.
Log:
<item subscription='both' name='person' jid='person@example.com'><group></group><group></group></item>
(19:32:23) jabber: jabber_roster_parse(): Removing person@example.com from group 'Buddies' on the local list
(19:32:23) GLib: g_string_append: assertion `val != NULL' failed
(19:32:23) jabber: jabber_roster_parse(): Adding person@example.com to groups: ,
(19:32:23) g_log: purple_find_group: assertion `(name != NULL) && (*name != '\0')' failed
(19:32:23) g_log: purple_group_new: assertion `name != NULL' failed
(19:32:23) g_log: purple_blist_add_group: assertion `group != NULL' failed
(19:32:23) g_log: purple_find_group: assertion `(name != NULL) && (*name != '\0')' failed
(19:32:23) g_log: purple_group_new: assertion `*name != '\0'' failed
(19:32:23) g_log: purple_blist_add_group: assertion `group != NULL' failed
Since I had to look it up, purple_blist_add_buddy replaces (group == NULL) with "Buddies".
author | Paul Aurich <paul@darkrain42.org> |
---|---|
date | Wed, 11 May 2011 01:58:03 +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