decoder/Plugin: container_scan() returns AllocatedString
This commit is contained in:
parent
8ba3378096
commit
cd041f8574
@ -31,6 +31,7 @@
|
||||
#include "tag/TagHandler.hxx"
|
||||
#include "tag/TagBuilder.hxx"
|
||||
#include "Log.hxx"
|
||||
#include "util/AllocatedString.hxx"
|
||||
|
||||
Directory *
|
||||
UpdateWalk::MakeDirectoryIfModified(Directory &parent, const char *name,
|
||||
@ -95,16 +96,16 @@ UpdateWalk::UpdateContainerFile(Directory &directory,
|
||||
return false;
|
||||
}
|
||||
|
||||
char *vtrack;
|
||||
AllocatedString<> vtrack = nullptr;
|
||||
unsigned int tnum = 0;
|
||||
TagBuilder tag_builder;
|
||||
while ((vtrack = plugin.container_scan(pathname, ++tnum)) != nullptr) {
|
||||
Song *song = Song::NewFile(vtrack, *contdir);
|
||||
Song *song = Song::NewFile(vtrack.c_str(), *contdir);
|
||||
|
||||
// shouldn't be necessary but it's there..
|
||||
song->mtime = info.mtime;
|
||||
|
||||
const auto vtrack_fs = AllocatedPath::FromUTF8(vtrack);
|
||||
const auto vtrack_fs = AllocatedPath::FromUTF8(vtrack.c_str());
|
||||
// TODO: check vtrack_fs.IsNull()
|
||||
|
||||
const auto child_path_fs = AllocatedPath::Build(pathname,
|
||||
@ -122,8 +123,7 @@ UpdateWalk::UpdateContainerFile(Directory &directory,
|
||||
modified = true;
|
||||
|
||||
FormatDefault(update_domain, "added %s/%s",
|
||||
directory.GetPath(), vtrack);
|
||||
delete[] vtrack;
|
||||
directory.GetPath(), vtrack.c_str());
|
||||
}
|
||||
|
||||
if (tnum == 1) {
|
||||
|
@ -26,6 +26,7 @@ struct ConfigBlock;
|
||||
class InputStream;
|
||||
struct TagHandler;
|
||||
class Path;
|
||||
template<typename T> class AllocatedString;
|
||||
|
||||
/**
|
||||
* Opaque handle which the decoder plugin passes to the functions in
|
||||
@ -95,10 +96,8 @@ struct DecoderPlugin {
|
||||
* @return nullptr if there are no multiple files
|
||||
* a filename for every single track according to tnum (param 2)
|
||||
* do not include full pathname here, just the "virtual" file
|
||||
*
|
||||
* Free the return value with delete[].
|
||||
*/
|
||||
char* (*container_scan)(Path path_fs, const unsigned int tnum);
|
||||
AllocatedString<char> (*container_scan)(Path path_fs, unsigned tnum);
|
||||
|
||||
/* last element in these arrays must always be a nullptr: */
|
||||
const char *const*suffixes;
|
||||
|
@ -103,7 +103,7 @@ ParseContainerPath(Path path_fs)
|
||||
return { path_fs.GetDirectoryName(), track - 1 };
|
||||
}
|
||||
|
||||
static char *
|
||||
static AllocatedString<>
|
||||
gme_container_scan(Path path_fs, const unsigned int tnum)
|
||||
{
|
||||
Music_Emu *emu;
|
||||
@ -123,7 +123,7 @@ gme_container_scan(Path path_fs, const unsigned int tnum)
|
||||
const char *subtune_suffix = uri_get_suffix(path_fs.c_str());
|
||||
if (tnum <= num_songs){
|
||||
return FormatString(SUBTUNE_PREFIX "%03u.%s",
|
||||
tnum, subtune_suffix).Steal();
|
||||
tnum, subtune_suffix);
|
||||
} else
|
||||
return nullptr;
|
||||
}
|
||||
|
@ -336,7 +336,7 @@ sidplay_scan_file(Path path_fs,
|
||||
return true;
|
||||
}
|
||||
|
||||
static char *
|
||||
static AllocatedString<>
|
||||
sidplay_container_scan(Path path_fs, const unsigned int tnum)
|
||||
{
|
||||
SidTune tune(path_fs.c_str(), nullptr, true);
|
||||
@ -353,7 +353,7 @@ sidplay_container_scan(Path path_fs, const unsigned int tnum)
|
||||
/* Construct container/tune path names, eg.
|
||||
Delta.sid/tune_001.sid */
|
||||
if(tnum<=info.songs) {
|
||||
return FormatString(SUBTUNE_PREFIX "%03u.sid", tnum).Steal();
|
||||
return FormatString(SUBTUNE_PREFIX "%03u.sid", tnum);
|
||||
} else
|
||||
return nullptr;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user