Mercurial > pidgin
comparison libpurple/dbus-server.c @ 18059:3f3125b91728
Lots of DBus list handling changes. The objective here was to eliminate a
handful of warnings about constness with GLists. Fixing this correctly
involved a lot more work than I expected. The DBus code now properly frees
non-const lists (it was leaking them before). Also, the stringlist code is
much improved. Finally, it compiles without warnings.
author | Richard Laager <rlaager@wiktel.com> |
---|---|
date | Thu, 07 Jun 2007 04:25:54 +0000 |
parents | fbebe15c91a7 |
children | bb2e5f6ff2b4 |
comparison
equal
deleted
inserted
replaced
18058:4ca97b26a8fb | 18059:3f3125b91728 |
---|---|
288 else | 288 else |
289 return ""; | 289 return ""; |
290 } | 290 } |
291 | 291 |
292 dbus_int32_t * | 292 dbus_int32_t * |
293 purple_dbusify_GList(GList *list, gboolean free_memory, dbus_int32_t *len) | 293 purple_dbusify_const_GList(const GList *list, dbus_int32_t *len) |
294 { | 294 { |
295 dbus_int32_t *array; | 295 dbus_int32_t *array; |
296 int i; | 296 int i; |
297 GList *elem; | 297 const GList *elem; |
298 | 298 |
299 *len = g_list_length(list); | 299 /* g_list_length() should really take a const GList */ |
300 array = g_new0(dbus_int32_t, g_list_length(list)); | 300 *len = g_list_length((GList *)list); |
301 array = g_new0(dbus_int32_t, *len); | |
301 for (i = 0, elem = list; elem != NULL; elem = elem->next, i++) | 302 for (i = 0, elem = list; elem != NULL; elem = elem->next, i++) |
302 array[i] = purple_dbus_pointer_to_id(elem->data); | 303 array[i] = purple_dbus_pointer_to_id(elem->data); |
303 | 304 |
304 if (free_memory) | 305 return array; |
305 g_list_free(list); | 306 } |
307 | |
308 dbus_int32_t * | |
309 purple_dbusify_GList(GList *list, gboolean free_memory, dbus_int32_t *len) | |
310 { | |
311 dbus_int32_t *array = purple_dbusify_const_GList(list, len); | |
312 | |
313 if (!free_memory) | |
314 return array; | |
315 | |
316 g_list_free(list); | |
317 return array; | |
318 } | |
319 | |
320 dbus_int32_t * | |
321 purple_dbusify_const_GSList(const GSList *list, dbus_int32_t *len) | |
322 { | |
323 dbus_int32_t *array; | |
324 int i; | |
325 const GSList *elem; | |
326 | |
327 /* g_slist_length should really take a const GSList */ | |
328 *len = g_slist_length((GSList *)list); | |
329 array = g_new0(dbus_int32_t, *len); | |
330 for (i = 0, elem = list; elem != NULL; elem = elem->next, i++) | |
331 array[i] = purple_dbus_pointer_to_id(elem->data); | |
306 | 332 |
307 return array; | 333 return array; |
308 } | 334 } |
309 | 335 |
310 dbus_int32_t * | 336 dbus_int32_t * |
311 purple_dbusify_GSList(GSList *list, gboolean free_memory, dbus_int32_t *len) | 337 purple_dbusify_GSList(GSList *list, gboolean free_memory, dbus_int32_t *len) |
312 { | 338 { |
313 dbus_int32_t *array; | 339 dbus_int32_t *array = purple_dbusify_const_GSList(list, len); |
340 | |
341 if (!free_memory) | |
342 return array; | |
343 | |
344 g_slist_free(list); | |
345 return array; | |
346 } | |
347 | |
348 gpointer * | |
349 purple_const_GList_to_array(const GList *list, dbus_int32_t *len) | |
350 { | |
351 gpointer *array; | |
314 int i; | 352 int i; |
315 GSList *elem; | 353 const GList *elem; |
316 | 354 |
317 *len = g_slist_length(list); | 355 *len = g_list_length((GList *)list); |
318 array = g_new0(dbus_int32_t, g_slist_length(list)); | 356 array = g_new0(gpointer, *len); |
319 for (i = 0, elem = list; elem != NULL; elem = elem->next, i++) | 357 for (i = 0, elem = list; elem != NULL; elem = elem->next, i++) |
320 array[i] = purple_dbus_pointer_to_id(elem->data); | 358 array[i] = elem->data; |
321 | |
322 if (free_memory) | |
323 g_slist_free(list); | |
324 | 359 |
325 return array; | 360 return array; |
326 } | 361 } |
327 | 362 |
328 gpointer * | 363 gpointer * |
329 purple_GList_to_array(GList *list, gboolean free_memory, dbus_int32_t *len) | 364 purple_GList_to_array(GList *list, gboolean free_memory, dbus_int32_t *len) |
330 { | 365 { |
366 gpointer *array = purple_const_GList_to_array(list, len); | |
367 | |
368 if (!free_memory) | |
369 return array; | |
370 | |
371 g_list_free(list); | |
372 return array; | |
373 } | |
374 | |
375 gpointer * | |
376 purple_const_GSList_to_array(const GSList *list, dbus_int32_t *len) | |
377 { | |
331 gpointer *array; | 378 gpointer *array; |
332 int i; | 379 int i; |
333 GList *elem; | 380 const GSList *elem; |
334 | 381 |
335 *len = g_list_length(list); | 382 *len = g_slist_length((GSList *)list); |
336 array = g_new0(gpointer, g_list_length(list)); | 383 array = g_new0(gpointer, *len); |
337 for (i = 0, elem = list; elem != NULL; elem = elem->next, i++) | 384 for (i = 0, elem = list; elem != NULL; elem = elem->next, i++) |
338 array[i] = elem->data; | 385 array[i] = elem->data; |
339 | 386 |
340 if (free_memory) | |
341 g_list_free(list); | |
342 | |
343 return array; | 387 return array; |
344 } | 388 } |
345 | 389 |
346 gpointer * | 390 gpointer * |
347 purple_GSList_to_array(GSList *list, gboolean free_memory, dbus_int32_t *len) | 391 purple_GSList_to_array(GSList *list, gboolean free_memory, dbus_int32_t *len) |
348 { | 392 { |
349 gpointer *array; | 393 gpointer *array = purple_const_GSList_to_array(list, len); |
350 int i; | 394 |
351 GSList *elem; | 395 if (!free_memory) |
352 | 396 return array; |
353 *len = g_slist_length(list); | 397 |
354 array = g_new0(gpointer, g_slist_length(list)); | 398 g_slist_free(list); |
355 for (i = 0, elem = list; elem != NULL; elem = elem->next, i++) | |
356 array[i] = elem->data; | |
357 | |
358 if (free_memory) | |
359 g_slist_free(list); | |
360 | |
361 return array; | 399 return array; |
362 } | 400 } |
363 | 401 |
364 GHashTable * | 402 GHashTable * |
365 purple_dbus_iter_hash_table(DBusMessageIter *iter, DBusError *error) | 403 purple_dbus_iter_hash_table(DBusMessageIter *iter, DBusError *error) |