80 lines
2.7 KiB
Diff
80 lines
2.7 KiB
Diff
|
Index: ChangeLog
|
||
|
===================================================================
|
||
|
--- ChangeLog (revision 1778)
|
||
|
+++ ChangeLog (revision 1785)
|
||
|
@@ -1,5 +1,21 @@
|
||
|
-====== libgpod 0.6.0 ======
|
||
|
+2007-11-14 Christophe <teuf@gnome.org>
|
||
|
|
||
|
+ * src/itdb_photoalbum.c: use g_list_remove all instead of an
|
||
|
+ inefficient combination of g_list_find + g_list_remove
|
||
|
+
|
||
|
+2007-11-14 Jorg Schuler <jcsjcs at users.sourceforge.net>
|
||
|
+
|
||
|
+ * src/itdb_photoalbum.c (itdb_photodb_photoalbum_remove): make
|
||
|
+ sure same photo isn't freed multiple times if it was added in an
|
||
|
+ album multiple times.
|
||
|
+
|
||
|
+2007-11-13 Christophe Fergeau <teuf@gnome.org>
|
||
|
+
|
||
|
+ * src/itdb_photoalbum.c: fix bug in itdb_photodb_photoalbum_remove,
|
||
|
+ when removing all the photos from the photodatabase, we were
|
||
|
+ erasing elements and iterating over the list at the same time,
|
||
|
+ which resulted in the function not working properly
|
||
|
+
|
||
|
2007-11-10 Christophe Fergeau <teuf@gnome.org>
|
||
|
|
||
|
* Makefile.am: add README.SysInfo to EXTRADIST
|
||
|
Index: src/itdb_photoalbum.c
|
||
|
===================================================================
|
||
|
--- src/itdb_photoalbum.c (revision 1778)
|
||
|
+++ src/itdb_photoalbum.c (revision 1785)
|
||
|
@@ -1,4 +1,4 @@
|
||
|
-/* Time-stamp: <2007-11-03 20:27:36 jcs>
|
||
|
+/*
|
||
|
|
|
||
|
| Copyright (C) 2002-2006 Jorg Schuler <jcsjcs at users sourceforge net>
|
||
|
| Part of the gtkpod project.
|
||
|
@@ -615,10 +615,7 @@
|
||
|
for (it = db->photoalbums; it != NULL; it = it->next)
|
||
|
{
|
||
|
Itdb_PhotoAlbum *_album = it->data;
|
||
|
- while (g_list_find (_album->members, photo))
|
||
|
- {
|
||
|
- _album->members = g_list_remove (_album->members, photo);
|
||
|
- }
|
||
|
+ _album->members = g_list_remove_all (_album->members, photo);
|
||
|
}
|
||
|
/* Remove the photo from the image list */
|
||
|
db->photos = g_list_remove (db->photos, photo);
|
||
|
@@ -678,8 +675,6 @@
|
||
|
Itdb_PhotoAlbum *album,
|
||
|
gboolean remove_pics)
|
||
|
{
|
||
|
- GList *it;
|
||
|
-
|
||
|
g_return_if_fail (db);
|
||
|
g_return_if_fail (album);
|
||
|
|
||
|
@@ -687,11 +682,16 @@
|
||
|
* and remove them from the database */
|
||
|
if (remove_pics)
|
||
|
{
|
||
|
- for (it = album->members; it != NULL; it = it->next )
|
||
|
+ /* we can't iterate over album->members because
|
||
|
+ itdb_photodb_remove_photo() modifies album->members in
|
||
|
+ a not easily predicable way (e.g. @photo may exist in the
|
||
|
+ album several times). Therefore we remove photos until
|
||
|
+ album->members is empty. */
|
||
|
+ while (album->members)
|
||
|
{
|
||
|
- Itdb_Artwork *photo = it->data;
|
||
|
- itdb_photodb_remove_photo (db, NULL, photo);
|
||
|
- }
|
||
|
+ Itdb_Artwork *photo = album->members->data;
|
||
|
+ itdb_photodb_remove_photo (db, NULL, photo);
|
||
|
+ }
|
||
|
}
|
||
|
db->photoalbums = g_list_remove (db->photoalbums, album);
|
||
|
itdb_photodb_photoalbum_free (album);
|