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.
|