diff options
author | teuf <teuf@f01d2545-417e-4e96-918e-98f8d0dbbcb6> | 2008-02-03 18:40:55 +0000 |
---|---|---|
committer | teuf <teuf@f01d2545-417e-4e96-918e-98f8d0dbbcb6> | 2008-02-03 18:40:55 +0000 |
commit | 1cb24d2920330218609c86332fa96bc66b726879 (patch) | |
tree | e8db3e7ca8006126e2fd81b4b7cc36b3f9811f1b | |
parent | 840430bb63535035e6aaaa3313596044a58951a0 (diff) | |
download | libgpod-1cb24d2920330218609c86332fa96bc66b726879.tar.gz libgpod-1cb24d2920330218609c86332fa96bc66b726879.tar.xz libgpod-1cb24d2920330218609c86332fa96bc66b726879.zip |
Merge ArtworkDB_MhodHeaderArtworkType3 and MhodHeaderArtworkType1 into ArtworkDB_MhodHeaderString
git-svn-id: https://gtkpod.svn.sf.net/svnroot/gtkpod/libgpod/trunk@1945 f01d2545-417e-4e96-918e-98f8d0dbbcb6
-rw-r--r-- | ChangeLog | 12 | ||||
-rw-r--r-- | src/db-artwork-parser.c | 21 | ||||
-rw-r--r-- | src/db-artwork-writer.c | 29 | ||||
-rw-r--r-- | src/db-itunes-parser.h | 44 |
4 files changed, 39 insertions, 67 deletions
@@ -1,9 +1,17 @@ -2008-02-30 Christophe Fergeau <teuf@gnome.org> +2008-02-03 Christophe Fergeau <teuf@gnome.org> + + * src/db-itunes-parser.h: merge ArtworkDB_MhodHeaderArtworkType3 + and MhodHeaderArtworkType1 into a single struct called + ArtworkDB_MhodHeaderString + * src/db-artwork-parser.c: + * src/db-artwork-writer.c: adjust to the above change + +2008-02-03 Christophe Fergeau <teuf@gnome.org> * src/db-artwork-parser.c: add missing g_free that could cause memory leaks -2008-30-01 Christophe Fergeau <teuf@gnome.org> +2008-01-30 Christophe Fergeau <teuf@gnome.org> Patch by Martin Aumueller diff --git a/src/db-artwork-parser.c b/src/db-artwork-parser.c index e56ac9f..94fc874 100644 --- a/src/db-artwork-parser.c +++ b/src/db-artwork-parser.c @@ -114,23 +114,24 @@ get_utf16_string (void* buffer, gint length, guint byte_order) } static char * -mhod3_get_ithmb_filename (DBParseContext *ctx, ArtworkDB_MhodHeaderArtworkType3 *mhod3) +mhod3_get_ithmb_filename (DBParseContext *ctx, + ArtworkDB_MhodHeaderString *mhod3) { char *filename=NULL; g_assert (mhod3 != NULL); - if (mhod3->mhod_version == 2) + if (mhod3->encoding == 2) filename = get_utf16_string ((gunichar2 *)mhod3->string, get_gint32 (mhod3->string_len, ctx->byte_order), ctx->byte_order); - else if ((mhod3->mhod_version == 0) || - (mhod3->mhod_version == 1)) + else if ((mhod3->encoding == 0) || + (mhod3->encoding == 1)) filename = g_strndup (mhod3->string, get_gint32 (mhod3->string_len, ctx->byte_order)); else g_warning (_("Unexpected mhod3 string type: %d\n"), - mhod3->mhod_version); + mhod3->encoding); return filename; } @@ -140,7 +141,7 @@ parse_mhod_3 (DBParseContext *ctx, Itdb_Thumb *thumb, GError *error) { ArtworkDB_MhodHeader *mhod; - ArtworkDB_MhodHeaderArtworkType3 *mhod3; + ArtworkDB_MhodHeaderString *mhod3; gint32 mhod3_type; mhod = db_parse_context_get_m_header (ctx, ArtworkDB_MhodHeader, "mhod"); @@ -149,10 +150,10 @@ parse_mhod_3 (DBParseContext *ctx, } db_parse_context_set_total_len (ctx, get_gint32 (mhod->total_len, ctx->byte_order)); - if (get_gint32 (mhod->total_len, ctx->byte_order) < sizeof (ArtworkDB_MhodHeaderArtworkType3)){ + if (get_gint32 (mhod->total_len, ctx->byte_order) < sizeof (ArtworkDB_MhodHeaderString)){ return -1; } - mhod3 = (ArtworkDB_MhodHeaderArtworkType3*)mhod; + mhod3 = (ArtworkDB_MhodHeaderString*)mhod; mhod3_type = get_gint16 (mhod3->type, ctx->byte_order); if (mhod3_type != MHOD_ARTWORK_TYPE_FILE_NAME) { return -1; @@ -355,7 +356,7 @@ parse_mhba (DBParseContext *ctx, GError *error) num_children = get_gint32 (mhba->num_mhods, ctx->byte_order); while (num_children > 0) { - MhodHeaderArtworkType1 *mhod1; + ArtworkDB_MhodHeaderString *mhod1; ArtworkDB_MhodHeader *mhod; DBParseContext *mhod_ctx; @@ -369,7 +370,7 @@ parse_mhba (DBParseContext *ctx, GError *error) } db_parse_context_set_total_len (mhod_ctx, get_gint32(mhod->total_len, ctx->byte_order)); - mhod1 = (MhodHeaderArtworkType1*)mhod; + mhod1 = (ArtworkDB_MhodHeaderString*)mhod; switch (mhod1->type) { /* FIXME: type==1 is album name. type==2 seems to be * the transtition type between photos, diff --git a/src/db-artwork-writer.c b/src/db-artwork-writer.c index fd19d8a..827bcdf 100644 --- a/src/db-artwork-writer.c +++ b/src/db-artwork-writer.c @@ -223,32 +223,32 @@ init_header (iPodBuffer *buffer, gchar _header_id[4], guint header_len) static int write_mhod_type_1 (gchar *string, iPodBuffer *buffer) { - MhodHeaderArtworkType1 *mhod; + ArtworkDB_MhodHeaderString *mhod; unsigned int total_bytes; int len; int padding; g_assert (string != NULL); - mhod = (MhodHeaderArtworkType1 *)init_header (buffer, "mhod", - sizeof (MhodHeaderArtworkType1)); + total_bytes = sizeof (ArtworkDB_MhodHeaderString); + mhod = (ArtworkDB_MhodHeaderString *)init_header (buffer, "mhod", + total_bytes); if (mhod == NULL) { return -1; } - total_bytes = sizeof (MhodHeaderArtworkType1); mhod->total_len = get_gint32 (total_bytes, buffer->byte_order); /* Modify header length, since iTunes only puts the length of * MhodHeader in header_len */ mhod->header_len = get_gint32 (sizeof (ArtworkDB_MhodHeader), buffer->byte_order); - mhod->unknown3 = get_gint32 (0x01, buffer->byte_order); + mhod->encoding = get_gint32 (0x01, buffer->byte_order); len = strlen (string); mhod->string_len = get_gint32 (len, buffer->byte_order); padding = 4 - ( (total_bytes + len) % 4 ); if (padding == 4) padding = 0; - mhod->padding = padding; + mhod->padding_len = padding; mhod->type = get_gint16 (0x01, buffer->byte_order); /* Make sure we have enough free space to write the string */ @@ -269,7 +269,7 @@ write_mhod_type_1 (gchar *string, iPodBuffer *buffer) static int write_mhod_type_3 (gchar *string, iPodBuffer *buffer) { - ArtworkDB_MhodHeaderArtworkType3 *mhod; + ArtworkDB_MhodHeaderString *mhod; unsigned int total_bytes; glong len; const gint g2l = sizeof (gunichar2); @@ -278,13 +278,12 @@ write_mhod_type_3 (gchar *string, iPodBuffer *buffer) g_assert (string != NULL); - mhod = (ArtworkDB_MhodHeaderArtworkType3 *) - init_header (buffer, "mhod", - sizeof (ArtworkDB_MhodHeaderArtworkType3)); + total_bytes = sizeof (ArtworkDB_MhodHeaderString); + mhod = (ArtworkDB_MhodHeaderString *) init_header (buffer, "mhod", + total_bytes); if (mhod == NULL) { return -1; } - total_bytes = sizeof (ArtworkDB_MhodHeaderArtworkType3); mhod->total_len = get_gint32 (total_bytes, buffer->byte_order); /* Modify header length, since iTunes only puts the length of * MhodHeader in header_len @@ -305,13 +304,13 @@ write_mhod_type_3 (gchar *string, iPodBuffer *buffer) return -1; } - mhod->mhod_version = 2; + mhod->encoding = 2; /* number of bytes of the string encoded in UTF-16 */ mhod->string_len = get_gint32 (g2l * len, buffer->byte_order); padding = 4 - ( (total_bytes + g2l*len) % 4 ); if (padding == 4) padding = 0; - mhod->padding = padding; + mhod->padding_len = padding; total_bytes += g2l*len + padding; /* Make sure we have enough free space to write the string */ @@ -328,7 +327,7 @@ write_mhod_type_3 (gchar *string, iPodBuffer *buffer) g_free (utf16); break; case G_BIG_ENDIAN: - mhod->mhod_version = 1; + mhod->encoding = 1; /* FIXME: len isn't initialized */ mhod->string_len = get_gint32 (len, buffer->byte_order); /* pad string if necessary */ @@ -337,7 +336,7 @@ write_mhod_type_3 (gchar *string, iPodBuffer *buffer) padding = 4 - ( (total_bytes + len) % 4 ); if (padding == 4) padding = 0; - mhod->padding = padding; + mhod->padding_len = padding; /* Make sure we have enough free space to write the string */ ipod_buffer_maybe_grow (buffer, len+padding); mhod = ipod_buffer_get_pointer (buffer); diff --git a/src/db-itunes-parser.h b/src/db-itunes-parser.h index f6366b0..728ce2b 100644 --- a/src/db-itunes-parser.h +++ b/src/db-itunes-parser.h @@ -71,10 +71,8 @@ typedef struct _MhiaHeader MhiaHeader; typedef struct _MhitHeader471 MhitHeader471; /* MHOD typedef mess */ -typedef struct _ArtworkDB_MhodHeaderArtworkType3 ArtworkDB_MhodHeaderArtworkType3; +typedef struct _ArtworkDB_MhodHeaderString ArtworkDB_MhodHeaderString; typedef struct _MhodHeaderString MhodHeaderString; -typedef struct _MhodHeaderArtworkType1 MhodHeaderArtworkType1; -/* typedef struct _MhodHeaderArtworkType3 MhodHeaderArtworkType3; */ typedef struct _MhodHeaderSmartPlaylistData MhodHeaderSmartPlaylistData; typedef struct _MhodHeaderSmartPlaylistRuleString MhodHeaderSmartPlaylistRuleString; typedef struct _MhodHeaderSmartPlaylistRuleNonString MhodHeaderSmartPlaylistRuleNonString; @@ -362,57 +360,23 @@ enum MhodArtworkType { MHOD_ARTWORK_TYPE_IMAGE = 5 /* container: full resolution image (in the Photo Database) */ }; -struct _MhodHeaderArtworkType1 { - unsigned char header_id[4]; - gint32 header_len; - gint32 total_len; - gint16 type; - gint8 unknown; - gint8 padding; - gint32 unknown1; - gint32 unknown2; - gint32 string_len; - gint32 unknown3; /* might be the string encoding */ - gint32 unknown4; /* always zero? */ - unsigned char string[]; -}; - -#if 0 -/* not used at all */ -struct _MhodHeaderArtworkType3 { - unsigned char header_id[4]; - gint32 header_len; - gint32 total_len; - gint16 type; /* 3 */ - gint16 padding; /* high byte is padding length (0-3) */ - gint32 unknown1; - gint32 unknown2; - gint32 string_len; - gint32 mhod_version; - gint32 unknown4; - gunichar2 string[]; -}; -#endif - -struct _ArtworkDB_MhodHeaderArtworkType3 { +struct _ArtworkDB_MhodHeaderString { unsigned char header_id[4]; gint32 header_len; gint32 total_len; gint16 type; /* 3 */ gint8 unknown13; - gint8 padding; + gint8 padding_len; gint32 unknown1; gint32 unknown2; gint32 string_len; - gint8 mhod_version; /* 0,1: string is UTF8, 2: string is - UTF16-LE */ + gint8 encoding; /* 0,1: string is UTF8, 2: string is UTF16-LE */ gint8 unknown5; gint16 unknown6; gint32 unknown4; gchar string[]; }; - enum MhodLimitType { MHOD_LIMIT_MINUTES = 1, MHOD_LIMIT_MEGABYTES = 2, |