aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2008-10-13 16:56:00 +0200
committerMax Kellermann <max@duempel.org>2008-10-13 16:56:00 +0200
commitf71ac4d479502738682f2328a6523d18be705ac9 (patch)
tree74d37b138efcd8293f03acee582aec6a819dd457 /src
parent94a5a5a985ab0ce3d8ca72d4e5be28a71a1010e0 (diff)
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')
-rw-r--r--src/ls.c12
-rw-r--r--src/ls.h3
-rw-r--r--src/song.c13
3 files changed, 8 insertions, 20 deletions
diff --git a/src/ls.c b/src/ls.c
index 01614710..a27bc821 100644
--- a/src/ls.c
+++ b/src/ls.c
@@ -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;
-}
diff --git a/src/ls.h b/src/ls.h
index fdc61bd8..0eed1fe1 100644
--- a/src/ls.h
+++ b/src/ls.h
@@ -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 127d39eb..a32d3920 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 *