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