Thu, 07 Apr 2005 14:55:02 +0000
[gaim-migrate @ 12431]
" The following log snippets should explain it: " --rlaager
(20:24:00) rlaager: Regarding the signal handling
conversation the other day... I've written a patch to stop
calling signal handlers and return as soon as we find one
signal handler that returns TRUE to indicate that it's
handled the signal. Is this the right approach?
(20:24:22) Ethan Blanton (Paco-Paco): the trouble is that it's
documented to behave exactly the way it does
(20:24:31) Ethan Blanton (Paco-Paco): so changing it is
notbackwards compatible
(20:24:31) rlaager: I'm talking for HEAD.
(20:24:41) Ethan Blanton (Paco-Paco): oh, I think that's a
good approach, yes
(20:24:53) rlaager: The way I've described is how I
*expected* it to work, having not read the documentation.
(20:25:09) Ethan Blanton (Paco-Paco): I'm convinced
(20:27:04) Stu Tomlinson (nosnilmot): rlaager: this, I
assume, breaks the generic-ness of signals, by assuming
that any that return values return booleans?
(20:27:26) Ethan Blanton (Paco-Paco): please break it
(20:27:33) Ethan Blanton (Paco-Paco): we already have
out-parameters
(20:27:42) rlaager: nosnilmot: from what I can see, the
return type is handled as a (void *)... so I'm checking that
ret_value != NULL
(20:27:57) rlaager: nosnilmot: that's the correct way to do it,
right?
...
(20:29:01) Ethan Blanton (Paco-Paco): allowing a
meaningful return value is an over-engineering
(20:30:07) rlaager: even after this patch, you should be able
to return meaningful return values
(20:30:15) rlaager: it'll just short-circuit on the first handler
that does
committer: Luke Schierer <lschiere@pidgin.im>
| 6562 | 1 | /** |
| 2 | * @file value.c Value wrapper API | |
| 3 | * @ingroup core | |
| 4 | * | |
| 5 | * gaim | |
| 6 | * | |
| 8046 | 7 | * Gaim is the legal property of its developers, whose names are too numerous |
| 8 | * to list here. Please refer to the COPYRIGHT file distributed with this | |
| 9 | * source distribution. | |
| 6562 | 10 | * |
| 11 | * This program is free software; you can redistribute it and/or modify | |
| 12 | * it under the terms of the GNU General Public License as published by | |
| 13 | * the Free Software Foundation; either version 2 of the License, or | |
| 14 | * (at your option) any later version. | |
| 15 | * | |
| 16 | * This program is distributed in the hope that it will be useful, | |
| 17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 19 | * GNU General Public License for more details. | |
| 20 | * | |
| 21 | * You should have received a copy of the GNU General Public License | |
| 22 | * along with this program; if not, write to the Free Software | |
| 23 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
| 24 | */ | |
| 25 | #include "internal.h" | |
| 26 | ||
| 27 | #include "value.h" | |
| 28 | ||
| 29 | #define OUTGOING_FLAG 0x01 | |
| 30 | ||
| 31 | GaimValue * | |
| 32 | gaim_value_new(GaimType type, ...) | |
| 33 | { | |
| 34 | GaimValue *value; | |
| 35 | va_list args; | |
| 36 | ||
| 37 | g_return_val_if_fail(type != GAIM_TYPE_UNKNOWN, NULL); | |
| 38 | ||
| 39 | value = g_new0(GaimValue, 1); | |
| 40 | ||
| 41 | value->type = type; | |
| 42 | ||
| 43 | va_start(args, type); | |
| 44 | ||
| 45 | if (type == GAIM_TYPE_SUBTYPE) | |
| 46 | value->u.subtype = va_arg(args, int); | |
| 47 | else if (type == GAIM_TYPE_BOXED) | |
| 48 | value->u.specific_type = g_strdup(va_arg(args, char *)); | |
| 49 | ||
| 50 | va_end(args); | |
| 51 | ||
| 52 | return value; | |
| 53 | } | |
| 54 | ||
| 55 | GaimValue * | |
| 56 | gaim_value_new_outgoing(GaimType type, ...) | |
| 57 | { | |
| 58 | GaimValue *value; | |
| 59 | va_list args; | |
| 60 | ||
| 61 | g_return_val_if_fail(type != GAIM_TYPE_UNKNOWN, NULL); | |
| 62 | ||
| 63 | value = g_new0(GaimValue, 1); | |
| 64 | ||
| 65 | value->type = type; | |
| 66 | ||
| 67 | va_start(args, type); | |
| 68 | ||
| 69 | if (type == GAIM_TYPE_SUBTYPE) | |
| 70 | value->u.subtype = va_arg(args, int); | |
| 71 | else if (type == GAIM_TYPE_BOXED) | |
| 72 | value->u.specific_type = g_strdup(va_arg(args, char *)); | |
| 73 | ||
| 74 | va_end(args); | |
| 75 | ||
| 76 | value->flags |= OUTGOING_FLAG; | |
| 77 | ||
| 78 | return value; | |
| 79 | } | |
| 80 | ||
| 81 | void | |
| 82 | gaim_value_destroy(GaimValue *value) | |
| 83 | { | |
| 84 | g_return_if_fail(value != NULL); | |
| 85 | ||
| 86 | if (gaim_value_get_type(value) == GAIM_TYPE_BOXED) | |
| 87 | { | |
| 88 | if (value->u.specific_type != NULL) | |
| 89 | g_free(value->u.specific_type); | |
| 90 | } | |
| 91 | else if (gaim_value_get_type(value) == GAIM_TYPE_STRING) | |
| 92 | { | |
| 93 | if (value->data.string_data != NULL) | |
| 94 | g_free(value->data.string_data); | |
| 95 | } | |
| 96 | ||
| 97 | g_free(value); | |
| 98 | } | |
| 99 | ||
|
8809
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
100 | GaimValue * |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
101 | gaim_value_dup(const GaimValue *value) |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
102 | { |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
103 | GaimValue *new_value; |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
104 | GaimType type; |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
105 | |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
106 | g_return_val_if_fail(value != NULL, NULL); |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
107 | |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
108 | type = gaim_value_get_type(value); |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
109 | |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
110 | if (type == GAIM_TYPE_SUBTYPE) |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
111 | { |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
112 | new_value = gaim_value_new(GAIM_TYPE_SUBTYPE, |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
113 | gaim_value_get_subtype(value)); |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
114 | } |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
115 | else if (type == GAIM_TYPE_BOXED) |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
116 | { |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
117 | new_value = gaim_value_new(GAIM_TYPE_BOXED, |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
118 | gaim_value_get_specific_type(value)); |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
119 | } |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
120 | else |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
121 | new_value = gaim_value_new(type); |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
122 | |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
123 | new_value->flags = value->flags; |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
124 | |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
125 | switch (type) |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
126 | { |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
127 | case GAIM_TYPE_CHAR: |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
128 | gaim_value_set_char(new_value, gaim_value_get_char(value)); |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
129 | break; |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
130 | |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
131 | case GAIM_TYPE_UCHAR: |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
132 | gaim_value_set_uchar(new_value, gaim_value_get_uchar(value)); |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
133 | break; |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
134 | |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
135 | case GAIM_TYPE_BOOLEAN: |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
136 | gaim_value_set_boolean(new_value, gaim_value_get_boolean(value)); |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
137 | break; |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
138 | |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
139 | case GAIM_TYPE_SHORT: |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
140 | gaim_value_set_short(new_value, gaim_value_get_short(value)); |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
141 | break; |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
142 | |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
143 | case GAIM_TYPE_USHORT: |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
144 | gaim_value_set_ushort(new_value, gaim_value_get_ushort(value)); |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
145 | break; |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
146 | |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
147 | case GAIM_TYPE_INT: |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
148 | gaim_value_set_int(new_value, gaim_value_get_int(value)); |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
149 | break; |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
150 | |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
151 | case GAIM_TYPE_UINT: |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
152 | gaim_value_set_uint(new_value, gaim_value_get_uint(value)); |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
153 | break; |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
154 | |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
155 | case GAIM_TYPE_LONG: |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
156 | gaim_value_set_long(new_value, gaim_value_get_long(value)); |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
157 | break; |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
158 | |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
159 | case GAIM_TYPE_ULONG: |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
160 | gaim_value_set_ulong(new_value, gaim_value_get_ulong(value)); |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
161 | break; |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
162 | |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
163 | case GAIM_TYPE_INT64: |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
164 | gaim_value_set_int64(new_value, gaim_value_get_int64(value)); |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
165 | break; |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
166 | |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
167 | case GAIM_TYPE_UINT64: |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
168 | gaim_value_set_uint64(new_value, gaim_value_get_uint64(value)); |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
169 | break; |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
170 | |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
171 | case GAIM_TYPE_STRING: |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
172 | gaim_value_set_string(new_value, gaim_value_get_string(value)); |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
173 | break; |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
174 | |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
175 | case GAIM_TYPE_OBJECT: |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
176 | gaim_value_set_object(new_value, gaim_value_get_object(value)); |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
177 | break; |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
178 | |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
179 | case GAIM_TYPE_POINTER: |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
180 | gaim_value_set_pointer(new_value, gaim_value_get_pointer(value)); |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
181 | break; |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
182 | |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
183 | case GAIM_TYPE_ENUM: |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
184 | gaim_value_set_enum(new_value, gaim_value_get_enum(value)); |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
185 | break; |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
186 | |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
187 | case GAIM_TYPE_BOXED: |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
188 | gaim_value_set_boxed(new_value, gaim_value_get_boxed(value)); |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
189 | break; |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
190 | |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
191 | default: |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
192 | break; |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
193 | } |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
194 | |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
195 | return new_value; |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
196 | } |
|
4fc1959df5ce
[gaim-migrate @ 9571]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
197 | |
| 6562 | 198 | GaimType |
| 199 | gaim_value_get_type(const GaimValue *value) | |
| 200 | { | |
| 201 | g_return_val_if_fail(value != NULL, GAIM_TYPE_UNKNOWN); | |
| 202 | ||
| 203 | return value->type; | |
| 204 | } | |
| 205 | ||
| 206 | unsigned int | |
| 207 | gaim_value_get_subtype(const GaimValue *value) | |
| 208 | { | |
| 209 | g_return_val_if_fail(value != NULL, 0); | |
| 210 | g_return_val_if_fail(gaim_value_get_type(value) == GAIM_TYPE_SUBTYPE, 0); | |
| 211 | ||
| 212 | return value->u.subtype; | |
| 213 | } | |
| 214 | ||
| 215 | const char * | |
| 216 | gaim_value_get_specific_type(const GaimValue *value) | |
| 217 | { | |
| 218 | g_return_val_if_fail(value != NULL, NULL); | |
| 219 | g_return_val_if_fail(gaim_value_get_type(value) == GAIM_TYPE_BOXED, NULL); | |
| 220 | ||
| 221 | return value->u.specific_type; | |
| 222 | } | |
| 223 | ||
| 224 | gboolean | |
| 225 | gaim_value_is_outgoing(const GaimValue *value) | |
| 226 | { | |
| 227 | g_return_val_if_fail(value != NULL, FALSE); | |
| 228 | ||
| 229 | return (value->flags & OUTGOING_FLAG); | |
| 230 | } | |
| 231 | ||
| 232 | void | |
| 233 | gaim_value_set_char(GaimValue *value, char data) | |
| 234 | { | |
| 235 | g_return_if_fail(value != NULL); | |
| 236 | ||
| 237 | value->data.char_data = data; | |
| 238 | } | |
| 239 | ||
| 240 | void | |
| 241 | gaim_value_set_uchar(GaimValue *value, unsigned char data) | |
| 242 | { | |
| 243 | g_return_if_fail(value != NULL); | |
| 244 | ||
| 245 | value->data.uchar_data = data; | |
| 246 | } | |
| 247 | ||
| 248 | void | |
| 249 | gaim_value_set_boolean(GaimValue *value, gboolean data) | |
| 250 | { | |
| 251 | g_return_if_fail(value != NULL); | |
| 252 | ||
| 253 | value->data.boolean_data = data; | |
| 254 | } | |
| 255 | ||
| 256 | void | |
| 257 | gaim_value_set_short(GaimValue *value, short data) | |
| 258 | { | |
| 259 | g_return_if_fail(value != NULL); | |
| 260 | ||
| 261 | value->data.short_data = data; | |
| 262 | } | |
| 263 | ||
| 264 | void | |
| 265 | gaim_value_set_ushort(GaimValue *value, unsigned short data) | |
| 266 | { | |
| 267 | g_return_if_fail(value != NULL); | |
| 268 | ||
| 269 | value->data.ushort_data = data; | |
| 270 | } | |
| 271 | ||
| 272 | void | |
| 273 | gaim_value_set_int(GaimValue *value, int data) | |
| 274 | { | |
| 275 | g_return_if_fail(value != NULL); | |
| 276 | ||
| 277 | value->data.int_data = data; | |
| 278 | } | |
| 279 | ||
| 280 | void | |
| 281 | gaim_value_set_uint(GaimValue *value, unsigned int data) | |
| 282 | { | |
| 283 | g_return_if_fail(value != NULL); | |
| 284 | ||
| 285 | value->data.int_data = data; | |
| 286 | } | |
| 287 | ||
| 288 | void | |
| 289 | gaim_value_set_long(GaimValue *value, long data) | |
| 290 | { | |
| 291 | g_return_if_fail(value != NULL); | |
| 292 | ||
| 293 | value->data.long_data = data; | |
| 294 | } | |
| 295 | ||
| 296 | void | |
| 297 | gaim_value_set_ulong(GaimValue *value, unsigned long data) | |
| 298 | { | |
| 299 | g_return_if_fail(value != NULL); | |
| 300 | ||
| 301 | value->data.long_data = data; | |
| 302 | } | |
| 303 | ||
| 304 | void | |
| 305 | gaim_value_set_int64(GaimValue *value, gint64 data) | |
| 306 | { | |
| 307 | g_return_if_fail(value != NULL); | |
| 308 | ||
| 309 | value->data.int64_data = data; | |
| 310 | } | |
| 311 | ||
| 312 | void | |
| 313 | gaim_value_set_uint64(GaimValue *value, guint64 data) | |
| 314 | { | |
| 315 | g_return_if_fail(value != NULL); | |
| 316 | ||
| 317 | value->data.uint64_data = data; | |
| 318 | } | |
| 319 | ||
| 320 | void | |
| 321 | gaim_value_set_string(GaimValue *value, const char *data) | |
| 322 | { | |
| 323 | g_return_if_fail(value != NULL); | |
| 324 | ||
| 325 | if (value->data.string_data != NULL) | |
| 326 | g_free(value->data.string_data); | |
| 327 | ||
| 328 | value->data.string_data = (data == NULL ? NULL : g_strdup(data)); | |
| 329 | } | |
| 330 | ||
| 331 | void | |
| 332 | gaim_value_set_object(GaimValue *value, void *data) | |
| 333 | { | |
| 334 | g_return_if_fail(value != NULL); | |
| 335 | ||
| 336 | value->data.object_data = data; | |
| 337 | } | |
| 338 | ||
| 339 | void | |
| 340 | gaim_value_set_pointer(GaimValue *value, void *data) | |
| 341 | { | |
| 342 | g_return_if_fail(value != NULL); | |
| 343 | ||
| 344 | value->data.pointer_data = data; | |
| 345 | } | |
| 346 | ||
| 347 | void | |
| 348 | gaim_value_set_enum(GaimValue *value, int data) | |
| 349 | { | |
| 350 | g_return_if_fail(value != NULL); | |
| 351 | ||
| 352 | value->data.enum_data = data; | |
| 353 | } | |
| 354 | ||
| 355 | void | |
| 356 | gaim_value_set_boxed(GaimValue *value, void *data) | |
| 357 | { | |
| 358 | g_return_if_fail(value != NULL); | |
| 359 | ||
| 360 | value->data.boxed_data = data; | |
| 361 | } | |
| 362 | ||
| 363 | char | |
| 364 | gaim_value_get_char(const GaimValue *value) | |
| 365 | { | |
| 366 | g_return_val_if_fail(value != NULL, 0); | |
| 367 | ||
| 368 | return value->data.char_data; | |
| 369 | } | |
| 370 | ||
| 371 | unsigned char | |
| 372 | gaim_value_get_uchar(const GaimValue *value) | |
| 373 | { | |
| 374 | g_return_val_if_fail(value != NULL, 0); | |
| 375 | ||
| 376 | return value->data.uchar_data; | |
| 377 | } | |
| 378 | ||
| 379 | gboolean | |
| 380 | gaim_value_get_boolean(const GaimValue *value) | |
| 381 | { | |
| 382 | g_return_val_if_fail(value != NULL, FALSE); | |
| 383 | ||
| 384 | return value->data.boolean_data; | |
| 385 | } | |
| 386 | ||
| 387 | short | |
| 388 | gaim_value_get_short(const GaimValue *value) | |
| 389 | { | |
| 390 | g_return_val_if_fail(value != NULL, 0); | |
| 391 | ||
| 392 | return value->data.short_data; | |
| 393 | } | |
| 394 | ||
| 395 | unsigned short | |
| 396 | gaim_value_get_ushort(const GaimValue *value) | |
| 397 | { | |
| 398 | g_return_val_if_fail(value != NULL, 0); | |
| 399 | ||
| 400 | return value->data.ushort_data; | |
| 401 | } | |
| 402 | ||
| 403 | int | |
| 404 | gaim_value_get_int(const GaimValue *value) | |
| 405 | { | |
| 406 | g_return_val_if_fail(value != NULL, 0); | |
| 407 | ||
| 408 | return value->data.int_data; | |
| 409 | } | |
| 410 | ||
| 411 | unsigned int | |
| 412 | gaim_value_get_uint(const GaimValue *value) | |
| 413 | { | |
| 414 | g_return_val_if_fail(value != NULL, 0); | |
| 415 | ||
| 416 | return value->data.int_data; | |
| 417 | } | |
| 418 | ||
| 419 | long | |
| 420 | gaim_value_get_long(const GaimValue *value) | |
| 421 | { | |
| 422 | g_return_val_if_fail(value != NULL, 0); | |
| 423 | ||
| 424 | return value->data.long_data; | |
| 425 | } | |
| 426 | ||
| 427 | unsigned long | |
| 428 | gaim_value_get_ulong(const GaimValue *value) | |
| 429 | { | |
| 430 | g_return_val_if_fail(value != NULL, 0); | |
| 431 | ||
| 432 | return value->data.long_data; | |
| 433 | } | |
| 434 | ||
| 435 | gint64 | |
| 436 | gaim_value_get_int64(const GaimValue *value) | |
| 437 | { | |
| 438 | g_return_val_if_fail(value != NULL, 0); | |
| 439 | ||
| 440 | return value->data.int64_data; | |
| 441 | } | |
| 442 | ||
| 443 | guint64 | |
| 444 | gaim_value_get_uint64(const GaimValue *value) | |
| 445 | { | |
| 446 | g_return_val_if_fail(value != NULL, 0); | |
| 447 | ||
| 448 | return value->data.uint64_data; | |
| 449 | } | |
| 450 | ||
| 451 | const char * | |
| 452 | gaim_value_get_string(const GaimValue *value) | |
| 453 | { | |
| 454 | g_return_val_if_fail(value != NULL, NULL); | |
| 455 | ||
| 456 | return value->data.string_data; | |
| 457 | } | |
| 458 | ||
| 459 | void * | |
| 460 | gaim_value_get_object(const GaimValue *value) | |
| 461 | { | |
| 462 | g_return_val_if_fail(value != NULL, NULL); | |
| 463 | ||
| 464 | return value->data.object_data; | |
| 465 | } | |
| 466 | ||
| 467 | void * | |
| 468 | gaim_value_get_pointer(const GaimValue *value) | |
| 469 | { | |
| 470 | g_return_val_if_fail(value != NULL, NULL); | |
| 471 | ||
| 472 | return value->data.pointer_data; | |
| 473 | } | |
| 474 | ||
| 475 | int | |
| 476 | gaim_value_get_enum(const GaimValue *value) | |
| 477 | { | |
| 478 | g_return_val_if_fail(value != NULL, -1); | |
| 479 | ||
| 480 | return value->data.enum_data; | |
| 481 | } | |
| 482 | ||
| 483 | void * | |
| 484 | gaim_value_get_boxed(const GaimValue *value) | |
| 485 | { | |
| 486 | g_return_val_if_fail(value != NULL, NULL); | |
| 487 | ||
| 488 | return value->data.boxed_data; | |
| 489 | } | |
| 490 |