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)