summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorteuf <teuf@f01d2545-417e-4e96-918e-98f8d0dbbcb6>2008-02-03 18:40:55 +0000
committerteuf <teuf@f01d2545-417e-4e96-918e-98f8d0dbbcb6>2008-02-03 18:40:55 +0000
commit1cb24d2920330218609c86332fa96bc66b726879 (patch)
treee8db3e7ca8006126e2fd81b4b7cc36b3f9811f1b
parent840430bb63535035e6aaaa3313596044a58951a0 (diff)
downloadlibgpod-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--ChangeLog12
-rw-r--r--src/db-artwork-parser.c21
-rw-r--r--src/db-artwork-writer.c29
-rw-r--r--src/db-itunes-parser.h44
4 files changed, 39 insertions, 67 deletions
diff --git a/ChangeLog b/ChangeLog
index 269d7ce..d1d197c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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,