mapper: allocate the result of map_directory_child_fs(), map_song_fs()

Don't use fixed stack buffers.
This commit is contained in:
Max Kellermann
2009-01-02 10:48:55 +01:00
parent 72255d580e
commit daf7c3db5a
6 changed files with 72 additions and 53 deletions

View File

@@ -74,27 +74,14 @@ decoder_file_decode(const struct decoder_plugin *plugin,
return dc.state != DECODE_STATE_START;
}
static void decoder_run(void)
static void decoder_run_song(const struct song *song, const char *uri)
{
struct song *song = dc.next_song;
char buffer[MPD_PATH_MAX];
const char *uri;
struct decoder decoder;
int ret;
bool close_instream = true;
struct input_stream input_stream;
const struct decoder_plugin *plugin;
if (song_is_file(song))
uri = map_song_fs(song, buffer);
else
uri = song_get_url(song, buffer);
if (uri == NULL) {
dc.state = DECODE_STATE_ERROR;
return;
}
dc.current_song = dc.next_song; /* NEED LOCK */
if (!input_stream_open(&input_stream, uri)) {
dc.state = DECODE_STATE_ERROR;
return;
@@ -202,6 +189,30 @@ static void decoder_run(void)
dc.state = ret ? DECODE_STATE_STOP : DECODE_STATE_ERROR;
}
static void decoder_run(void)
{
struct song *song = dc.next_song;
char *uri;
if (song_is_file(song))
uri = map_song_fs(song);
else {
char buffer[MPD_PATH_MAX];
uri = g_strdup(song_get_url(song, buffer));
}
if (uri == NULL) {
dc.state = DECODE_STATE_ERROR;
return;
}
dc.current_song = dc.next_song; /* NEED LOCK */
decoder_run_song(song, uri);
g_free(uri);
}
static gpointer decoder_task(G_GNUC_UNUSED gpointer arg)
{
do {