forked from len0rd/rockbox
playlist: Add helpers for opening/closing .m3u playlist
This helps maintainability and ensures the opening is done consistently. Change-Id: I7805716182dfa93f917d54d40f8e420e87da16b0
This commit is contained in:
parent
5eb24a9582
commit
e6534b051e
1 changed files with 39 additions and 23 deletions
|
@ -252,6 +252,40 @@ static void dc_thread_stop(struct playlist_info *playlist)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Open playlist file and return file descriptor or -1 on error.
|
||||||
|
* The fd should not be closed manually. Not thread-safe.
|
||||||
|
*/
|
||||||
|
static int pl_open_playlist(struct playlist_info *playlist)
|
||||||
|
{
|
||||||
|
if (playlist->fd >= 0)
|
||||||
|
return playlist->fd;
|
||||||
|
|
||||||
|
int fd = open_utf8(playlist->filename, O_RDONLY);
|
||||||
|
if (fd < 0)
|
||||||
|
return fd;
|
||||||
|
|
||||||
|
/* Presence of UTF-8 BOM forces UTF-8 encoding. */
|
||||||
|
if (lseek(fd, 0, SEEK_CUR) > 0)
|
||||||
|
playlist->utf8 = true;
|
||||||
|
|
||||||
|
playlist->fd = fd;
|
||||||
|
return fd;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Close any open file descriptor for the playlist file.
|
||||||
|
* Not thread-safe.
|
||||||
|
*/
|
||||||
|
static void pl_close_playlist(struct playlist_info *playlist)
|
||||||
|
{
|
||||||
|
if (playlist->fd >= 0)
|
||||||
|
{
|
||||||
|
close(playlist->fd);
|
||||||
|
playlist->fd = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void close_playlist_control_file(struct playlist_info *playlist)
|
static void close_playlist_control_file(struct playlist_info *playlist)
|
||||||
{
|
{
|
||||||
playlist_write_lock(playlist);
|
playlist_write_lock(playlist);
|
||||||
|
@ -556,10 +590,7 @@ static void update_playlist_filename_unlocked(struct playlist_info* playlist,
|
||||||
*/
|
*/
|
||||||
static void empty_playlist_unlocked(struct playlist_info* playlist, bool resume)
|
static void empty_playlist_unlocked(struct playlist_info* playlist, bool resume)
|
||||||
{
|
{
|
||||||
if(playlist->fd >= 0) /* If there is an already open playlist, close it. */
|
pl_close_playlist(playlist);
|
||||||
{
|
|
||||||
close(playlist->fd);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(playlist->control_fd >= 0)
|
if(playlist->control_fd >= 0)
|
||||||
{
|
{
|
||||||
|
@ -578,7 +609,6 @@ static void empty_playlist_unlocked(struct playlist_info* playlist, bool resume)
|
||||||
playlist->in_ram = false;
|
playlist->in_ram = false;
|
||||||
playlist->modified = false;
|
playlist->modified = false;
|
||||||
|
|
||||||
playlist->fd = -1;
|
|
||||||
playlist->control_fd = -1;
|
playlist->control_fd = -1;
|
||||||
|
|
||||||
playlist->index = 0;
|
playlist->index = 0;
|
||||||
|
@ -868,14 +898,8 @@ static int add_indices_to_playlist(struct playlist_info* playlist,
|
||||||
|
|
||||||
playlist_write_lock(playlist);
|
playlist_write_lock(playlist);
|
||||||
|
|
||||||
if(-1 == playlist->fd)
|
/* Open playlist file for reading */
|
||||||
{
|
if (pl_open_playlist(playlist) < 0)
|
||||||
playlist->fd = open_utf8(playlist->filename, O_RDONLY);
|
|
||||||
if(playlist->fd >= 0 && lseek(playlist->fd, 0, SEEK_CUR) > 0)
|
|
||||||
playlist->utf8 = true; /* Override any earlier indication. */
|
|
||||||
}
|
|
||||||
|
|
||||||
if(playlist->fd < 0)
|
|
||||||
{
|
{
|
||||||
result = -1;
|
result = -1;
|
||||||
goto exit;
|
goto exit;
|
||||||
|
@ -1244,10 +1268,7 @@ static int get_track_filename(struct playlist_info* playlist, int index, int see
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if(-1 == playlist->fd)
|
fd = pl_open_playlist(playlist);
|
||||||
playlist->fd = open(playlist->filename, O_RDONLY);
|
|
||||||
|
|
||||||
fd = playlist->fd;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(-1 != fd)
|
if(-1 != fd)
|
||||||
|
@ -2340,12 +2361,7 @@ void playlist_close(struct playlist_info* playlist)
|
||||||
if (!playlist)
|
if (!playlist)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (playlist->fd >= 0)
|
pl_close_playlist(playlist);
|
||||||
{
|
|
||||||
close(playlist->fd);
|
|
||||||
playlist->fd = -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
close_playlist_control_file(playlist);
|
close_playlist_control_file(playlist);
|
||||||
|
|
||||||
if (playlist->control_created)
|
if (playlist->control_created)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue