# HG changeset patch # User Sascha Hlusiak # Date 1188638332 -7200 # Node ID 96f83b3872ea8433462977cf1b94733256d8d94f # Parent a9af4f1aede9fc432e551e0e959012dc57fc9c1b# Parent a9d7b36cc6af3a6e9b8fa9de4a6e53b73186aa77 Automated merge with ssh://hg.atheme.org//hg/audacious-plugins diff -r a9af4f1aede9 -r 96f83b3872ea src/modplug/modplugbmp.cxx --- a/src/modplug/modplugbmp.cxx Fri Aug 31 23:21:30 2007 +0200 +++ b/src/modplug/modplugbmp.cxx Sat Sep 01 11:18:52 2007 +0200 @@ -21,6 +21,16 @@ #include "audacious/vfs.h" } +static char* format_and_free_ti( Tuple* ti, int* length ) +{ + char* result = tuple_formatter_make_title_string(ti, get_gentitle_format()); + if ( result ) + *length = tuple_get_int(ti, "length"); + tuple_free((void *) ti); + + return result; +} + // ModplugXMMS member functions =============================== // operations ---------------------------------------- @@ -317,6 +327,8 @@ void ModplugXMMS::PlayFile(const string& aFilename, InputPlayback *ipb) { + int32 aLength; + char *aModName; mStopped = true; mPaused = false; @@ -401,34 +413,15 @@ mArchive->Size() ); mPlayed = 0; - - bool useFilename = mModProps.mUseFilename; - - if(!useFilename) - { - strncpy(mModName, mSoundFile->GetTitle(), 100); - - for(int i = 0; mModName[i] == ' ' || mModName[i] == 0; i++) - { - if(mModName[i] == 0) - { - useFilename = true; //mod name is blank -- use filename - break; - } - } - } - - if(useFilename) - { - strncpy(mModName, strrchr(aFilename.c_str(), '/') + 1, 100); - char* ext = strrchr(mModName, '.'); - if(ext) *ext = '\0'; - } - + + Tuple* ti = GetSongTuple( aFilename ); + if ( ti ) + aModName = format_and_free_ti( ti, &aLength ); + mInPlug->set_info ( - mModName, - mSoundFile->GetSongTime() * 1000, + aModName, + aLength, mSoundFile->GetNumChannels() * 1000, mModProps.mFrequency, mModProps.mChannels @@ -501,143 +494,11 @@ void ModplugXMMS::GetSongInfo(const string& aFilename, char*& aTitle, int32& aLength) { aLength = -1; - fstream lTestFile; - string lError; - bool lDone; - - lTestFile.open(aFilename.c_str(), ios::in); - if(!lTestFile) - { - lError = "**no such file: "; - lError += strrchr(aFilename.c_str(), '/') + 1; - aTitle = new char[lError.length() + 1]; - strcpy(aTitle, lError.c_str()); - return; - } - - lTestFile.close(); - - if(mModProps.mFastinfo) - { - if(mModProps.mUseFilename) - { - //Use filename as name - aTitle = new char[aFilename.length() + 1]; - strcpy(aTitle, strrchr(aFilename.c_str(), '/') + 1); - *strrchr(aTitle, '.') = '\0'; - return; - } - - fstream lModFile; - string lExt; - uint32 lPos; - - lDone = true; - - // previously ios::nocreate was used (X Standard C++ Library) - lModFile.open(aFilename.c_str(), ios::in); - - lPos = aFilename.find_last_of('.'); - if((int)lPos == 0) - return; - lExt = aFilename.substr(lPos); - for(uint32 i = 0; i < lExt.length(); i++) - lExt[i] = tolower(lExt[i]); - - if (lExt == ".mod") - { - lModFile.read(mModName, 20); - mModName[20] = 0; - } - else if (lExt == ".s3m") - { - lModFile.read(mModName, 28); - mModName[28] = 0; - } - else if (lExt == ".xm") - { - lModFile.seekg(17); - lModFile.read(mModName, 20); - mModName[20] = 0; - } - else if (lExt == ".it") - { - lModFile.seekg(4); - lModFile.read(mModName, 28); - mModName[28] = 0; - } - else - lDone = false; //fall back to slow info + *aTitle = NULL; - lModFile.close(); - - if(lDone) - { - for(int i = 0; mModName[i] != 0; i++) - { - if(mModName[i] != ' ') - { - aTitle = new char[strlen(mModName) + 1]; - strcpy(aTitle, mModName); - - return; - } - } - - //mod name is blank. Use filename instead. - aTitle = new char[aFilename.length() + 1]; - strcpy(aTitle, strrchr(aFilename.c_str(), '/') + 1); - *strrchr(aTitle, '.') = '\0'; - return; - } - } - - Archive* lArchive; - CSoundFile* lSoundFile; - const char* lTitle; - - //open and mmap the file - lArchive = OpenArchive(aFilename); - if(lArchive->Size() == 0) - { - lError = "**bad mod file: "; - lError += strrchr(aFilename.c_str(), '/') + 1; - aTitle = new char[lError.length() + 1]; - strcpy(aTitle, lError.c_str()); - delete lArchive; - return; - } - - lSoundFile = new CSoundFile; - lSoundFile->Create((uchar*)lArchive->Map(), lArchive->Size()); - - if(!mModProps.mUseFilename) - { - lTitle = lSoundFile->GetTitle(); - - for(int i = 0; lTitle[i] != 0; i++) - { - if(lTitle[i] != ' ') - { - aTitle = new char[strlen(lTitle) + 1]; - strcpy(aTitle, lTitle); - goto therest; //sorry - } - } - } - - //mod name is blank, or user wants the filename to be used as the title. - aTitle = new char[aFilename.length() + 1]; - strcpy(aTitle, strrchr(aFilename.c_str(), '/') + 1); - *strrchr(aTitle, '.') = '\0'; - -therest: - aLength = lSoundFile->GetSongTime() * 1000; //It wants milliseconds!?! - - //unload the file - lSoundFile->Destroy(); - delete lSoundFile; - delete lArchive; + Tuple* ti = GetSongTuple( aFilename ); + if ( ti ) + aTitle = format_and_free_ti( ti, &aLength ); } Tuple* ModplugXMMS::GetSongTuple(const string& aFilename) diff -r a9af4f1aede9 -r 96f83b3872ea src/sid/xs_config.c --- a/src/sid/xs_config.c Fri Aug 31 23:21:30 2007 +0200 +++ b/src/sid/xs_config.c Sat Sep 01 11:18:52 2007 +0200 @@ -299,7 +299,7 @@ if (!XS_CFG_GET_STRING(cfg, XS_CONFIG_IDENT, tmpKey, &tmpStr)) return FALSE; - pResult->name = strdup(tmpStr); + pResult->name = g_strdup(tmpStr); if (pResult->name == NULL) { g_free(pResult); return FALSE; diff -r a9af4f1aede9 -r 96f83b3872ea src/sid/xs_support.h --- a/src/sid/xs_support.h Fri Aug 31 23:21:30 2007 +0200 +++ b/src/sid/xs_support.h Sat Sep 01 11:18:52 2007 +0200 @@ -17,6 +17,7 @@ #include #include #include +#define HAVE_MEMSET #else #include #include diff -r a9af4f1aede9 -r 96f83b3872ea src/sid/xs_title.c --- a/src/sid/xs_title.c Fri Aug 31 23:21:30 2007 +0200 +++ b/src/sid/xs_title.c Sat Sep 01 11:18:52 2007 +0200 @@ -54,7 +54,8 @@ static t_xs_tuple * xs_get_titletuple(gchar *tmpFilename, gchar *tmpFilePath, gchar *tmpFileExt, t_xs_tuneinfo *p, gint subTune) { - t_xs_tuple *pResult; + t_xs_tuple *pResult; + #ifdef AUDACIOUS_PLUGIN pResult = tuple_new(); tuple_associate_string(pResult, "title", p->sidName); @@ -138,14 +139,14 @@ /* Check if the titles are overridden or not */ #if defined(AUDACIOUS_PLUGIN) - if (!xs_cfg.titleOverride) { + if (!xs_cfg.titleOverride) { t_xs_tuple *pTuple = xs_get_titletuple( tmpFilename, tmpFilePath, tmpFileExt, p, subTune); pcResult = tuple_formatter_make_title_string(pTuple, get_gentitle_format()); tuple_free(pTuple); } else #elif defined(HAVE_XMMSEXTRA) - if (!xs_cfg.titleOverride) { + if (!xs_cfg.titleOverride) { t_xs_tuple *pTuple = xs_get_titletuple( tmpFilename, tmpFilePath, tmpFileExt, p, subTune); diff -r a9af4f1aede9 -r 96f83b3872ea src/xspf/xspf.c --- a/src/xspf/xspf.c Fri Aug 31 23:21:30 2007 +0200 +++ b/src/xspf/xspf.c Sat Sep 01 11:18:52 2007 +0200 @@ -138,7 +138,7 @@ else if(nptr->type == XML_ELEMENT_NODE && !xmlStrcmp(nptr->name, (xmlChar *)"annotation")) { xmlChar *str = xmlNodeGetContent(nptr); - tuple_associate_string(tuple, "comment", (gchar *) str); + tuple_associate_string(tuple, "comment", (gchar *) str); xmlFree(str); } else if(nptr->type == XML_ELEMENT_NODE @@ -328,7 +328,7 @@ if (title && *title) { gchar *old = plist->title; plist->title = g_strdup((gchar*)title); - if(old) g_free(old); + g_free(old); } xmlFree(title); } @@ -476,6 +476,9 @@ PlaylistEntry *entry = PLAYLIST_ENTRY(node->data); xmlNodePtr track, location; gchar *filename = NULL; + const gchar *scratch; + gchar tmps[64]; + gint tmpi; track = xmlNewNode(NULL, (xmlChar *)"track"); location = xmlNewNode(NULL, (xmlChar *)"location"); @@ -487,12 +490,10 @@ filename = g_strdup(entry->filename + baselen); // entry->filename is always uri now. } else { /* local file (obsolete) */ - gchar *tmp = - (gchar *)audPathToURI((const xmlChar *)entry->filename + baselen); + gchar *tmp = (gchar *)audPathToURI((const xmlChar *)entry->filename + baselen); if(base) { /* relative */ filename = g_strdup_printf("%s", tmp); - } - else { + } else { #ifdef DEBUG printf("absolute and local (obsolete)\n"); #endif @@ -510,55 +511,46 @@ /* do we have a tuple? */ if(entry->tuple != NULL) { - const gchar *scratch; if((scratch = tuple_get_string(entry->tuple, "title")) != NULL && - g_utf8_validate(scratch, -1, NULL)) { + g_utf8_validate(scratch, -1, NULL)) { tmp = xmlNewNode(NULL, (xmlChar *)"title"); xmlAddChild(tmp, xmlNewText((xmlChar *) scratch)); xmlAddChild(track, tmp); } if((scratch = tuple_get_string(entry->tuple, "artist")) != NULL && - g_utf8_validate(scratch, -1, NULL)) { + g_utf8_validate(scratch, -1, NULL)) { tmp = xmlNewNode(NULL, (xmlChar *)"creator"); xmlAddChild(tmp, xmlNewText((xmlChar *) scratch)); xmlAddChild(track, tmp); } if((scratch = tuple_get_string(entry->tuple, "comment")) != NULL && - g_utf8_validate(scratch, -1, NULL)) { + g_utf8_validate(scratch, -1, NULL)) { tmp = xmlNewNode(NULL, (xmlChar *)"annotation"); xmlAddChild(tmp, xmlNewText((xmlChar *) scratch)); xmlAddChild(track, tmp); } if((scratch = tuple_get_string(entry->tuple, "album")) != NULL && - g_utf8_validate(scratch, -1, NULL)) { + g_utf8_validate(scratch, -1, NULL)) { tmp = xmlNewNode(NULL, (xmlChar *)"album"); xmlAddChild(tmp, xmlNewText((xmlChar *) scratch)); xmlAddChild(track, tmp); } - if(tuple_get_int(entry->tuple, "track-number") != 0) { - gchar *str; - str = g_malloc(TMP_BUF_LEN); + if((tmpi = tuple_get_int(entry->tuple, "track-number")) != 0) { tmp = xmlNewNode(NULL, (xmlChar *)"trackNum"); - sprintf(str, "%d", tuple_get_int(entry->tuple, "track-number")); - xmlAddChild(tmp, xmlNewText((xmlChar *)str)); - g_free(str); - str = NULL; + g_snprintf(tmps, sizeof(tmps), "%d", tmpi); + xmlAddChild(tmp, xmlNewText((xmlChar *) tmps)); xmlAddChild(track, tmp); } - if(tuple_get_int(entry->tuple, "length") > 0) { - gchar *str; - str = g_malloc(TMP_BUF_LEN); + if((tmpi = tuple_get_int(entry->tuple, "length")) > 0) { tmp = xmlNewNode(NULL, (xmlChar *)"duration"); - sprintf(str, "%d", tuple_get_int(entry->tuple, "length")); - xmlAddChild(tmp, xmlNewText((xmlChar *) str)); - g_free(str); - str = NULL; + g_snprintf(tmps, sizeof(tmps), "%d", tmpi); + xmlAddChild(tmp, xmlNewText((xmlChar *) tmps)); xmlAddChild(track, tmp); } @@ -568,20 +560,16 @@ // year, date, genre, formatter, mtime // - if(tuple_get_int(entry->tuple, "year") != 0) { - gchar *str; - str = g_malloc(TMP_BUF_LEN); + if((tmpi = tuple_get_int(entry->tuple, "year")) != 0) { tmp = xmlNewNode(NULL, (xmlChar *)"meta"); xmlSetProp(tmp, (xmlChar *)"rel", (xmlChar *)"year"); - sprintf(str, "%d", tuple_get_int(entry->tuple, "year")); - xmlAddChild(tmp, xmlNewText((xmlChar *)str)); + g_snprintf(tmps, sizeof(tmps), "%d", tmpi); + xmlAddChild(tmp, xmlNewText((xmlChar *) tmps)); xmlAddChild(track, tmp); - g_free(str); - str = NULL; } if((scratch = tuple_get_string(entry->tuple, "date")) != NULL && - g_utf8_validate(scratch, -1, NULL)) { + g_utf8_validate(scratch, -1, NULL)) { tmp = xmlNewNode(NULL, (xmlChar *)"meta"); xmlSetProp(tmp, (xmlChar *)"rel", (xmlChar *)"date"); xmlAddChild(tmp, xmlNewText((xmlChar *) scratch)); @@ -589,7 +577,7 @@ } if((scratch = tuple_get_string(entry->tuple, "genre")) != NULL && - g_utf8_validate(scratch, -1, NULL)) { + g_utf8_validate(scratch, -1, NULL)) { tmp = xmlNewNode(NULL, (xmlChar *)"meta"); xmlSetProp(tmp, (xmlChar *)"rel", (xmlChar *)"genre"); xmlAddChild(tmp, xmlNewText((xmlChar *) scratch)); @@ -597,7 +585,7 @@ } if((scratch = tuple_get_string(entry->tuple, "formatter")) != NULL && - g_utf8_validate(scratch, -1, NULL)) { + g_utf8_validate(scratch, -1, NULL)) { tmp = xmlNewNode(NULL, (xmlChar *)"meta"); xmlSetProp(tmp, (xmlChar *)"rel", (xmlChar *)"formatter"); xmlAddChild(tmp, xmlNewText((xmlChar *) scratch)); @@ -605,18 +593,11 @@ } // mtime: write mtime unconditionally to support staticlist. - { - gchar *str = g_malloc(TMP_BUF_LEN); - tmp = xmlNewNode(NULL, (xmlChar *)"meta"); - xmlSetProp(tmp, (xmlChar *)"rel", (xmlChar *)"mtime"); - sprintf(str, "%ld", (long) tuple_get_int(entry->tuple, "mtime")); - - xmlAddChild(tmp, xmlNewText((xmlChar *)str)); - xmlAddChild(track, tmp); - g_free(str); - str = NULL; - } - + tmp = xmlNewNode(NULL, (xmlChar *)"meta"); + xmlSetProp(tmp, (xmlChar *)"rel", (xmlChar *)"mtime"); + g_snprintf(tmps, sizeof(tmps), "%ld", (long) tuple_get_int(entry->tuple, "mtime")); + xmlAddChild(tmp, xmlNewText((xmlChar *) tmps)); + xmlAddChild(track, tmp); } /* tuple */ else { @@ -627,29 +608,18 @@ } if(entry->length > 0) { - gchar *str; - str = g_malloc(TMP_BUF_LEN); tmp = xmlNewNode(NULL, (xmlChar *)"duration"); - sprintf(str, "%d", entry->length); - xmlAddChild(tmp, xmlNewText((xmlChar *)str)); - g_free(str); - str = NULL; + g_snprintf(tmps, sizeof(tmps), "%d", entry->length); + xmlAddChild(tmp, xmlNewText((xmlChar *) tmps)); xmlAddChild(track, tmp); } /* add mtime of -1 */ - { - gchar *str = g_malloc(TMP_BUF_LEN); - tmp = xmlNewNode(NULL, (xmlChar *)"meta"); - xmlSetProp(tmp, (xmlChar *)"rel", (xmlChar *)"mtime"); - sprintf(str, "%ld", -1L); - - xmlAddChild(tmp, xmlNewText((xmlChar *)str)); - xmlAddChild(track, tmp); - g_free(str); - str = NULL; - } - + tmp = xmlNewNode(NULL, (xmlChar *)"meta"); + xmlSetProp(tmp, (xmlChar *)"rel", (xmlChar *)"mtime"); + g_snprintf(tmps, sizeof(tmps), "%ld", -1L); + xmlAddChild(tmp, xmlNewText((xmlChar *) tmps)); + xmlAddChild(track, tmp); } /* no tuple */ g_free(filename);