libpurple/plugins/tcl/tcl_ref.c

Wed, 13 May 2009 20:29:03 +0000

author
Marcus Lundblad <malu@pidgin.im>
date
Wed, 13 May 2009 20:29:03 +0000
changeset 27110
05ca719b901b
parent 19859
71d37b57eff2
child 31294
73607ab89c6f
permissions
-rw-r--r--

Support custom smileys in MUCs (when all participants support BoB and a maximum
of 10 participants are in the chat).
Always announce support for BoB, since disable custom smileys will still turn
off fetching them, and BoB can be used for other purposes further on.

13814
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1 /**
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
2 * @file tcl_ref.c Purple Tcl typed references API
13814
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
3 *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
4 * purple
13814
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
5 *
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
6 * Copyright (C) 2006 Ethan Blanton <eblanton@cs.purdue.edu>
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
7 *
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
8 * This program is free software; you can redistribute it and/or modify
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
9 * it under the terms of the GNU General Public License as published by
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
10 * the Free Software Foundation; either version 2 of the License, or
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
11 * (at your option) any later version.
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
12 *
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
13 * This program is distributed in the hope that it will be useful,
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
16 * GNU General Public License for more details.
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
17 *
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
18 * You should have received a copy of the GNU General Public License
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
19 * along with this program; if not, write to the Free Software
19859
71d37b57eff2 The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 16877
diff changeset
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
13814
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
21 */
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
22
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
23 #include <tcl.h>
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
24 #include <glib.h>
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
25
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
26 #include "tcl_purple.h"
13814
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
27 #include "stringref.h"
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
28
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
29 /* Instead of all that internal representation mumbo jumbo, use these
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
30 * macros to access the internal representation of a PurpleTclRef */
13814
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
31 #define OBJ_REF_TYPE(obj) (obj->internalRep.twoPtrValue.ptr1)
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
32 #define OBJ_REF_VALUE(obj) (obj->internalRep.twoPtrValue.ptr2)
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
33
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
34 static Tcl_FreeInternalRepProc purple_tcl_ref_free;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
35 static Tcl_DupInternalRepProc purple_tcl_ref_dup;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
36 static Tcl_UpdateStringProc purple_tcl_ref_update;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
37 static Tcl_SetFromAnyProc purple_tcl_ref_set;
13814
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
38
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
39 static Tcl_ObjType purple_tcl_ref = {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
40 "PurpleTclRef",
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
41 purple_tcl_ref_free,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
42 purple_tcl_ref_dup,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
43 purple_tcl_ref_update,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
44 purple_tcl_ref_set
13814
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
45 };
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
46
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
47 void purple_tcl_ref_init()
13814
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
48 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
49 Tcl_RegisterObjType(&purple_tcl_ref);
13814
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
50 }
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
51
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
52 void *purple_tcl_ref_get(Tcl_Interp *interp, Tcl_Obj *obj, PurpleStringref *type)
13814
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
53 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
54 if (obj->typePtr != &purple_tcl_ref) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
55 if (Tcl_ConvertToType(interp, obj, &purple_tcl_ref) != TCL_OK)
13814
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
56 return NULL;
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
57 }
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
58 if (strcmp(purple_stringref_value(OBJ_REF_TYPE(obj)),
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
59 purple_stringref_value(type))) {
13814
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
60 if (interp) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
61 Tcl_Obj *error = Tcl_NewStringObj("Bad Purple reference type: expected ", -1);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
62 Tcl_AppendToObj(error, purple_stringref_value(type), -1);
13827
6a6c8e70411c [gaim-migrate @ 16269]
Ethan Blanton <elb@pidgin.im>
parents: 13814
diff changeset
63 Tcl_AppendToObj(error, " but got ", -1);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
64 Tcl_AppendToObj(error, purple_stringref_value(OBJ_REF_TYPE(obj)), -1);
13814
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
65 Tcl_SetObjResult(interp, error);
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
66 }
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
67 return NULL;
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
68 }
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
69 return OBJ_REF_VALUE(obj);
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
70 }
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
71
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
72 Tcl_Obj *purple_tcl_ref_new(PurpleStringref *type, void *value)
13814
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
73 {
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
74 Tcl_Obj *obj = Tcl_NewObj();
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
75 obj->typePtr = &purple_tcl_ref;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
76 OBJ_REF_TYPE(obj) = purple_stringref_ref(type);
13814
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
77 OBJ_REF_VALUE(obj) = value;
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
78 Tcl_InvalidateStringRep(obj);
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
79 return obj;
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
80 }
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
81
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
82 static void purple_tcl_ref_free(Tcl_Obj *obj)
13814
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
83 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
84 purple_stringref_unref(OBJ_REF_TYPE(obj));
13814
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
85 }
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
86
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
87 static void purple_tcl_ref_dup(Tcl_Obj *obj1, Tcl_Obj *obj2)
13814
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
88 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
89 OBJ_REF_TYPE(obj2) = purple_stringref_ref(OBJ_REF_TYPE(obj1));
13814
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
90 OBJ_REF_VALUE(obj2) = OBJ_REF_VALUE(obj1);
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
91 }
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
92
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
93 static void purple_tcl_ref_update(Tcl_Obj *obj)
13814
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
94 {
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
95 /* This is ugly on memory, but we pretty much have to either
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
96 * do this or guesstimate lengths or introduce a varargs
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
97 * function in here ... ugh. */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
98 char *bytes = g_strdup_printf("purple-%s:%p",
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
99 purple_stringref_value(OBJ_REF_TYPE(obj)),
13814
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
100 OBJ_REF_VALUE(obj));
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
101
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
102 obj->length = strlen(bytes);
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
103 obj->bytes = ckalloc(obj->length + 1);
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
104 strcpy(obj->bytes, bytes);
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
105 g_free(bytes);
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
106 }
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
107
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
108 /* This isn't as memory-efficient as setting could be, because we
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
109 * essentially have to synthesize the Stringref here, where we would
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
110 * really rather dup it. Oh, well. */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
111 static int purple_tcl_ref_set(Tcl_Interp *interp, Tcl_Obj *obj)
13814
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
112 {
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
113 char *bytes = Tcl_GetStringFromObj(obj, NULL);
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
114 char *ptr;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
115 PurpleStringref *type;
13814
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
116 void *value;
16877
b2a8fef0a200 Stu pointed out that I made an error, and Josh made it clear that the
Ethan Blanton <elb@pidgin.im>
parents: 16477
diff changeset
117 static const char prefix[] = "purple-";
16477
2fe930b4dcb6 The compiler is really smart enough to catch this, but let's make it explicit.
Ethan Blanton <elb@pidgin.im>
parents: 16433
diff changeset
118 static const int prefixlen = sizeof(prefix) - 1;
13814
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
119
16477
2fe930b4dcb6 The compiler is really smart enough to catch this, but let's make it explicit.
Ethan Blanton <elb@pidgin.im>
parents: 16433
diff changeset
120 if (strlen(bytes) < prefixlen
2fe930b4dcb6 The compiler is really smart enough to catch this, but let's make it explicit.
Ethan Blanton <elb@pidgin.im>
parents: 16433
diff changeset
121 || strncmp(bytes, prefix, prefixlen)
13814
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
122 || (ptr = strchr(bytes, ':')) == NULL
16477
2fe930b4dcb6 The compiler is really smart enough to catch this, but let's make it explicit.
Ethan Blanton <elb@pidgin.im>
parents: 16433
diff changeset
123 || (ptr - bytes) == prefixlen)
13814
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
124 goto badobject;
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
125
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
126 /* Bad Ethan */
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
127 *ptr = '\0';
16477
2fe930b4dcb6 The compiler is really smart enough to catch this, but let's make it explicit.
Ethan Blanton <elb@pidgin.im>
parents: 16433
diff changeset
128 type = purple_stringref_new(bytes + prefixlen);
13814
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
129 *ptr = ':';
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
130 ptr++;
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
131
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
132 if (sscanf(ptr, "%p", &value) == 0) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
133 purple_stringref_unref(type);
13814
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
134 goto badobject;
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
135 }
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
136
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
137 /* At this point we know we have a good object; free the old and
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
138 * install our internal representation. */
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
139 if (obj->typePtr != NULL && obj->typePtr->freeIntRepProc != NULL)
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
140 obj->typePtr->freeIntRepProc(obj);
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
141
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
142 obj->typePtr = &purple_tcl_ref;
13814
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
143 OBJ_REF_TYPE(obj) = type;
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
144 OBJ_REF_VALUE(obj) = value;
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
145
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
146 return TCL_OK;
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
147
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
148 badobject:
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
149 if (interp) {
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
150 Tcl_SetObjResult(interp,
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
151 Tcl_NewStringObj("invalid PurpleTclRef representation", -1));
13814
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
152 }
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
153 return TCL_ERROR;
67fa8b2fec4c [gaim-migrate @ 16243]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
154 }

mercurial