summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristophe Fergeau <teuf@gnome.org>2007-10-29 21:21:11 +0000
committerChristophe Fergeau <teuf@gnome.org>2007-10-29 21:21:11 +0000
commitaba89dbedec42b5a808fbd3c78f91296cf2f7415 (patch)
tree8a1460cbda90680c7625f462093c8db9a7261509
parent46b4a757c9349b6727b9f25aee4456a2007d6f9c (diff)
downloadlibgpod-aba89dbedec42b5a808fbd3c78f91296cf2f7415.tar.gz
libgpod-aba89dbedec42b5a808fbd3c78f91296cf2f7415.tar.xz
libgpod-aba89dbedec42b5a808fbd3c78f91296cf2f7415.zip
* src/db-artwork-writer.c: reread the pointer for memory mapped
buffers when it may have changed Artwork writing works by mapping structs to memory and by directly accessing/modifying it. This works until we need to move the mmap base address. This patch makes sure we reset the struct mapping every time the mmap base pointer may have changed git-svn-id: https://gtkpod.svn.sf.net/svnroot/gtkpod/libgpod/trunk@1742 f01d2545-417e-4e96-918e-98f8d0dbbcb6
-rw-r--r--ChangeLog10
-rw-r--r--src/db-artwork-writer.c18
2 files changed, 26 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index f7d79f1..f991933 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2007-10-29 Christophe Fergeau <teuf@gnome.org>
+
+ * src/db-artwork-writer.c: reread the pointer for memory mapped
+ buffers when it may have changed
+
+ Artwork writing works by mapping structs to memory and by directly
+ accessing/modifying it. This works until we need to move the
+ mmap base address. This patch makes sure we reset the struct
+ mapping every time the mmap base pointer may have changed
+
2007-10-27 Jorg Schuler <jcsjcs at users.sourceforge.net>
* src/itdb_device.c (ipod_classic_1_artwork_info)
diff --git a/src/db-artwork-writer.c b/src/db-artwork-writer.c
index a6b3029..45f2625 100644
--- a/src/db-artwork-writer.c
+++ b/src/db-artwork-writer.c
@@ -330,6 +330,7 @@ write_mhod_type_1 (gchar *string, iPodBuffer *buffer)
if (ipod_buffer_maybe_grow (buffer, total_bytes + len + padding ) != 0) {
return -1;
}
+ mhod = ipod_buffer_get_pointer (buffer);
memcpy (mhod->string, string, len);
total_bytes += len + padding;
mhod->total_len = get_gint32 (total_bytes, buffer->byte_order);
@@ -385,14 +386,14 @@ write_mhod_type_3 (gchar *string, iPodBuffer *buffer)
if (padding == 4)
padding = 0;
mhod->padding = padding;
- total_bytes += g2l*len + padding;
+ total_bytes += g2l*len + padding;
/* Make sure we have enough free space to write the string */
if (ipod_buffer_maybe_grow (buffer, total_bytes) != 0) {
g_free (utf16);
return -1;
}
-
+ mhod = ipod_buffer_get_pointer (buffer);
strp = (gunichar2 *)mhod->string;
for (i = 0; i < len; i++) {
strp[i] = get_gint16 (utf16[i], buffer->byte_order);
@@ -413,6 +414,7 @@ write_mhod_type_3 (gchar *string, iPodBuffer *buffer)
if (ipod_buffer_maybe_grow (buffer, total_bytes + 2*len+padding) != 0) {
return -1;
}
+ mhod = ipod_buffer_get_pointer (buffer);
memcpy (mhod->string, string, len);
total_bytes += (len+padding);
}
@@ -470,6 +472,7 @@ write_mhni (Itdb_DB *db, Itdb_Thumb *thumb, int correlation_id, iPodBuffer *buff
return -1;
}
total_bytes += bytes_written;
+ mhni = ipod_buffer_get_pointer (buffer);
mhni->total_len = get_gint32 (total_bytes, buffer->byte_order);
/* Only update number of children when all went well to try to get
* something somewhat consistent when there are errors
@@ -512,6 +515,7 @@ write_mhod (Itdb_DB *db, Itdb_Thumb *thumb, int correlation_id, iPodBuffer *buff
return -1;
}
total_bytes += bytes_written;
+ mhod = ipod_buffer_get_pointer (buffer);
mhod->total_len = get_gint32 (total_bytes, buffer->byte_order);
dump_mhod (mhod);
@@ -590,6 +594,7 @@ write_mhii (Itdb_DB *db, void *data, iPodBuffer *buffer)
return -1;
}
total_bytes += bytes_written;
+ mhii = ipod_buffer_get_pointer (buffer);
num_children++;
it = it->next;
}
@@ -651,6 +656,7 @@ write_mhli (Itdb_DB *db, iPodBuffer *buffer )
}
it = it->next;
}
+ mhli = ipod_buffer_get_pointer (buffer);
mhli->num_children = get_gint32 (num_thumbs, buffer->byte_order);
dump_mhl ((MhlHeader *)mhli, "mhli");
@@ -725,6 +731,7 @@ write_mhba (Itdb_PhotoAlbum *album, iPodBuffer *buffer)
return -1;
}
total_bytes += bytes_written;
+ mhba = ipod_buffer_get_pointer (buffer);
for (it = album->members; it != NULL; it = it->next) {
Itdb_Artwork *photo = it->data;
@@ -741,6 +748,7 @@ write_mhba (Itdb_PhotoAlbum *album, iPodBuffer *buffer)
}
total_bytes += bytes_written;
}
+ mhba = ipod_buffer_get_pointer (buffer);
mhba->total_len = get_gint32( total_bytes, buffer->byte_order );
dump_mhba ( mhba );
return total_bytes;
@@ -775,6 +783,7 @@ write_mhla (Itdb_DB *db, iPodBuffer *buffer)
return -1;
}
total_bytes += bytes_written;
+ mhla = ipod_buffer_get_pointer (buffer);
num_children++;
mhla->num_children = get_gint32 (num_children,
buffer->byte_order);
@@ -872,6 +881,8 @@ write_mhlf (Itdb_DB *db, iPodBuffer *buffer)
return -1;
}
total_bytes += bytes_written;
+ mhlf = ipod_buffer_get_pointer (buffer);
+
num_children++;
/* Only update number of children when all went well to try
* to get something somewhat consistent when there are errors
@@ -924,6 +935,7 @@ write_mhsd (Itdb_DB *db, iPodBuffer *buffer, enum MhsdType type)
return -1;
} else {
total_bytes += bytes_written;
+ mhsd = ipod_buffer_get_pointer (buffer);
mhsd->total_len = get_gint32 (total_bytes, buffer->byte_order);
}
@@ -940,6 +952,7 @@ write_mhfd (Itdb_DB *db, iPodBuffer *buffer, int id_max)
int bytes_written;
int i;
+
mhfd = (MhfdHeader *)init_header (buffer, "mhfd", sizeof (MhfdHeader));
if (mhfd == NULL) {
return -1;
@@ -969,6 +982,7 @@ write_mhfd (Itdb_DB *db, iPodBuffer *buffer, int id_max)
return -1;
}
total_bytes += bytes_written;
+ mhfd = ipod_buffer_get_pointer (buffer);
mhfd->total_len = get_gint32 (total_bytes, buffer->byte_order);
mhfd->num_children = get_gint32 (i, buffer->byte_order);
}