From: <ny...@us...> - 2007-02-18 07:53:05
|
Revision: 375 http://svn.sourceforge.net/pmplib/?rev=375&view=rev Author: nyaochi Date: 2007-02-17 23:53:06 -0800 (Sat, 17 Feb 2007) Log Message: ----------- Fixed the bug of database dump for pmp_iriverplus3. Modified Paths: -------------- trunk/pmplib/lib/pmp_iriverplus3/pmp_iriverplus3.c Modified: trunk/pmplib/lib/pmp_iriverplus3/pmp_iriverplus3.c =================================================================== --- trunk/pmplib/lib/pmp_iriverplus3/pmp_iriverplus3.c 2007-02-18 07:34:57 UTC (rev 374) +++ trunk/pmplib/lib/pmp_iriverplus3/pmp_iriverplus3.c 2007-02-18 07:53:06 UTC (rev 375) @@ -90,7 +90,6 @@ } pmp_internal_t; typedef struct { - ip3db_t ip3db; pmp_music_record_t* records; int num_records; ip3db_playlist_t* playlists; @@ -475,12 +474,13 @@ static uint32_t pmpmusic_open(pmp_music_t* music) { + ip3db_t ip3db; result_t ret = 0; pmp_t* pmp = music->pmp; pmp_music_internal_t* pmpmi = (pmp_music_internal_t*)music->instance; // Initialize IP3DB. - ip3db_init(&pmpmi->ip3db); + ip3db_init(&ip3db); // Free the existing records. pmplib_records_finish(pmpmi->records, pmpmi->num_records); @@ -495,20 +495,20 @@ // Read the music database. set_filenames(dat, dic, idx, pmp); - ret = ip3db_read(&pmpmi->ip3db, dat, dic, idx); + ret = ip3db_read(&ip3db, dat, dic, idx); if (ret) { goto exit_this; } // The number of music records. - pmpmi->num_records = ip3db_num_records(&pmpmi->ip3db); + pmpmi->num_records = ip3db_num_records(&ip3db); // Allocate an array of the records. pmpmi->records = (pmp_music_record_t*)malloc(sizeof(pmp_music_record_t) * pmpmi->num_records); // Convert IP3DB records to a pmp_music_record_t array. for (i = 0;i < pmpmi->num_records;++i) { - const ip3db_variant_t* src = (const ip3db_variant_t*)ip3db_get_record(&pmpmi->ip3db, i); + const ip3db_variant_t* src = (const ip3db_variant_t*)ip3db_get_record(&ip3db, i); pmp_music_record_t* dst = &pmpmi->records[i]; size_t length = 0; @@ -548,18 +548,19 @@ } exit_this: - ip3db_finish(&pmpmi->ip3db); + ip3db_finish(&ip3db); return ret; } static uint32_t pmpmusic_close(pmp_music_t* music) { + ip3db_t ip3db; result_t ret = 0; pmp_t* pmp = music->pmp; pmp_music_internal_t* pmpmi = (pmp_music_internal_t*)music->instance; // Initialize IP3DB. - ip3db_init(&pmpmi->ip3db); + ip3db_init(&ip3db); if (pmp->flag & PMPOF_MUSIC_DB_WRITE) { int i; @@ -574,7 +575,7 @@ const pmp_music_record_t* src = &pmpmi->records[i]; ip3db_variant_t* dst = records[i]; - ip3db_record_init(&pmpmi->ip3db, &records[i]); + ip3db_record_init(&ip3db, &records[i]); ip3db_variant_set_str(&dst[IP3DBF_MUSIC_FILEPATH], filepath_changeroot(src->filename, pmp->info.path_to_root)); filepath_remove_filespec(dst[IP3DBF_MUSIC_FILEPATH].value.str); filepath_addslash(dst[IP3DBF_MUSIC_FILEPATH].value.str); @@ -606,7 +607,7 @@ // Register records (and playlists) to the database. if (pmp->flag & PMPOF_MUSIC_PL_WRITE) { ip3db_set( - &pmpmi->ip3db, + &ip3db, (const ip3db_music_record_t*)records, pmpmi->num_records, pmpmi->playlists, @@ -614,7 +615,7 @@ ); } else { ip3db_set( - &pmpmi->ip3db, + &ip3db, (const ip3db_music_record_t*)records, pmpmi->num_records, NULL, @@ -624,16 +625,16 @@ // Write out the music database. set_filenames(dat, dic, idx, pmp); - ret = ip3db_write(&pmpmi->ip3db, dat, dic, idx); + ret = ip3db_write(&ip3db, dat, dic, idx); // Free IP3DB records. for (i = 0;i < pmpmi->num_records;++i) { - ip3db_record_finish(&pmpmi->ip3db, &records[i]); + ip3db_record_finish(&ip3db, &records[i]); } free(records); } - ip3db_finish(&pmpmi->ip3db); + ip3db_finish(&ip3db); return ret; } @@ -681,13 +682,28 @@ static result_t pmpmusic_dump(pmp_music_t* music, FILE *fp, int level) { - pmp_music_internal_t* pmpmi = (pmp_music_internal_t*)music->instance; - if (level > 0) { - return PMPERR_NOTIMPLIMENTED; - //return ip2db_repr(&pmpdbi->ip2db, fp); - } else { - return ip3db_dump(&pmpmi->ip3db, fp); + ip3db_t ip3db; + result_t ret = 0; + ucs2char_t dat[MAX_PATH], dic[MAX_PATH], idx[MAX_PATH]; + + // Initialize IP3DB. + ip3db_init(&ip3db); + + // Read the music database. + set_filenames(dat, dic, idx, music->pmp); + ret = ip3db_read(&ip3db, dat, dic, idx); + if (ret) { + goto exit_this; } + + ret = ip3db_dump(&ip3db, fp); + if (ret) { + goto exit_this; + } + +exit_this: + ip3db_finish(&ip3db); + return ret; } static result_t pmpmusic_set_playlists(pmp_music_t* music, const pmp_playlist_t* playlists, uint32_t num_playlists) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |