From aba89dbedec42b5a808fbd3c78f91296cf2f7415 Mon Sep 17 00:00:00 2001 From: Christophe Fergeau Date: Mon, 29 Oct 2007 21:21:11 +0000 Subject: * 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 --- src/db-artwork-writer.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) (limited to 'src') 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); } -- cgit