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 | |
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().
-rw-r--r-- | src/ls.c | 12 | ||||
-rw-r--r-- | src/ls.h | 3 | ||||
-rw-r--r-- | src/song.c | 13 |
3 files changed, 8 insertions, 20 deletions
@@ -255,15 +255,3 @@ struct decoder_plugin *hasMusicSuffix(const char *utf8file, unsigned int next) return ret; } - -struct decoder_plugin *isMusic(const char *utf8file, time_t * mtime, - unsigned int next) -{ - if (isFile(utf8file, mtime)) { - struct decoder_plugin *plugin = hasMusicSuffix(utf8file, next); - if (plugin != NULL) - return plugin; - } - DEBUG("isMusic: %s is not a valid file\n", utf8file); - return NULL; -} @@ -40,9 +40,6 @@ int isDir(const char *utf8name); struct decoder_plugin *hasMusicSuffix(const char *utf8file, unsigned int next); -struct decoder_plugin *isMusic(const char *utf8file, time_t * mtime, - unsigned int next); - int printRemoteUrlHandlers(struct client *client); int isFile(const char *utf8file, time_t * mtime); 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 * |