diff options
author | Max Kellermann <max@duempel.org> | 2008-10-13 16:56:00 +0200 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2008-10-13 16:56:00 +0200 |
commit | f71ac4d479502738682f2328a6523d18be705ac9 (patch) | |
tree | 74d37b138efcd8293f03acee582aec6a819dd457 /src/song.c | |
parent | 94a5a5a985ab0ce3d8ca72d4e5be28a71a1010e0 (diff) | |
download | mpd-f71ac4d479502738682f2328a6523d18be705ac9.tar.gz mpd-f71ac4d479502738682f2328a6523d18be705ac9.tar.xz mpd-f71ac4d479502738682f2328a6523d18be705ac9.zip |
song: stat file in song_file_update(), don't use isMusic()
isMusic() used to be a very inefficient function: with every
invocation, it did another stat() on the specified file. There is
only one caller, do the stat() there manually and use hasMusicSuffix()
instead of isMusic().
Diffstat (limited to 'src/song.c')
-rw-r--r-- | src/song.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/src/song.c b/src/song.c index 127d39eb4..a32d3920f 100644 --- a/src/song.c +++ b/src/song.c @@ -97,6 +97,7 @@ song_file_update(struct song *song) unsigned int next = 0; char path_max_tmp[MPD_PATH_MAX]; char abs_path[MPD_PATH_MAX]; + struct stat st; assert(song_is_file(song)); @@ -108,14 +109,16 @@ song_file_update(struct song *song) song->tag = NULL; } + if (stat(abs_path, &st) < 0) + return false; + + song->mtime = st.st_mtime; + while (song->tag == NULL && - (plugin = isMusic(abs_path, &(song->mtime), next++))) + (plugin = hasMusicSuffix(abs_path, next++))) song->tag = plugin->tag_dup(abs_path); - if (song->tag == NULL || song->tag->time < 0) - return false; - - return true; + return song->tag != NULL; } char * |