Compare commits
9 Commits
v0.16_alph
...
v0.16_alph
Author | SHA1 | Date | |
---|---|---|---|
![]() |
c7265f9689 | ||
![]() |
46ab8d18e2 | ||
![]() |
f384f8da93 | ||
![]() |
23cd8a74be | ||
![]() |
cc1debc948 | ||
![]() |
5a3aa1262a | ||
![]() |
ad52eb236d | ||
![]() |
d2c2cbd0ae | ||
![]() |
462bba8e2f |
7
NEWS
7
NEWS
@@ -109,6 +109,13 @@ ver 0.16 (20??/??/??)
|
||||
* make single mode 'sticky'
|
||||
|
||||
|
||||
ver 0.15.15 (2010/11/08)
|
||||
* input:
|
||||
- rewind: fix assertion failure
|
||||
* output:
|
||||
- shout: artist comes first in stream title
|
||||
|
||||
|
||||
ver 0.15.14 (2010/11/06)
|
||||
* player_thread: fix assertion failure due to wrong music pipe on seek
|
||||
* output_thread: fix assertion failure due to race condition in OPEN
|
||||
|
@@ -1,5 +1,5 @@
|
||||
AC_PREREQ(2.60)
|
||||
AC_INIT(mpd, 0.16~alpha3, musicpd-dev-team@lists.sourceforge.net)
|
||||
AC_INIT(mpd, 0.16~alpha4, musicpd-dev-team@lists.sourceforge.net)
|
||||
AC_CONFIG_SRCDIR([src/main.c])
|
||||
AM_INIT_AUTOMAKE([foreign 1.10 dist-bzip2 subdir-objects])
|
||||
AM_CONFIG_HEADER(config.h)
|
||||
|
@@ -81,7 +81,7 @@ copy_attributes(struct input_rewind *r)
|
||||
const struct input_stream *src = r->input;
|
||||
|
||||
assert(dest != src);
|
||||
assert(dest->mime != src->mime);
|
||||
assert(src->mime == NULL || dest->mime != src->mime);
|
||||
|
||||
dest->ready = src->ready;
|
||||
dest->seekable = src->seekable;
|
||||
|
@@ -494,7 +494,7 @@ shout_tag_to_metadata(const struct tag *tag, char *dest, size_t size)
|
||||
}
|
||||
}
|
||||
|
||||
snprintf(dest, size, "%s - %s", title, artist);
|
||||
snprintf(dest, size, "%s - %s", artist, title);
|
||||
}
|
||||
|
||||
static void my_shout_set_tag(void *data,
|
||||
|
@@ -72,6 +72,14 @@ apply_song_metadata(struct song *dest, const struct song *src)
|
||||
song_free(dest);
|
||||
}
|
||||
|
||||
if (dest->tag != NULL && dest->tag->time > 0 &&
|
||||
src->start_ms > 0 && src->end_ms == 0 &&
|
||||
src->start_ms / 1000 < (unsigned)dest->tag->time)
|
||||
/* the range is open-ended, and the playlist plugin
|
||||
did not know the total length of the song file
|
||||
(e.g. last track on a CUE file); fix it up here */
|
||||
tmp->tag->time = dest->tag->time - src->start_ms / 1000;
|
||||
|
||||
return tmp;
|
||||
}
|
||||
|
||||
|
@@ -546,6 +546,31 @@ update_container_file( struct directory* directory,
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the given permissions on the mapped file are given.
|
||||
*/
|
||||
static bool
|
||||
directory_child_access(const struct directory *directory,
|
||||
const char *name, int mode)
|
||||
{
|
||||
#ifdef WIN32
|
||||
/* access() is useless on WIN32 */
|
||||
(void)directory;
|
||||
(void)name;
|
||||
return true;
|
||||
#else
|
||||
char *path = map_directory_child_fs(directory, name);
|
||||
if (path == NULL)
|
||||
/* something went wrong, but that isn't a permission
|
||||
problem */
|
||||
return true;
|
||||
|
||||
bool success = access(path, mode) == 0 || errno != EACCES;
|
||||
g_free(path);
|
||||
return success;
|
||||
#endif
|
||||
}
|
||||
|
||||
static void
|
||||
update_regular_file(struct directory *directory,
|
||||
const char *name, const struct stat *st)
|
||||
@@ -562,6 +587,14 @@ update_regular_file(struct directory *directory,
|
||||
{
|
||||
struct song* song = songvec_find(&directory->songs, name);
|
||||
|
||||
if (!directory_child_access(directory, name, R_OK)) {
|
||||
g_warning("no read permissions on %s/%s",
|
||||
directory_get_path(directory), name);
|
||||
if (song != NULL)
|
||||
delete_song(directory, song);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(song != NULL && st->st_mtime == song->mtime &&
|
||||
!walk_discard) &&
|
||||
plugin->container_scan != NULL)
|
||||
|
Reference in New Issue
Block a user