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().
This commit is contained in:
parent
94a5a5a985
commit
f71ac4d479
12
src/ls.c
12
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;
|
||||
}
|
||||
|
3
src/ls.h
3
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);
|
||||
|
15
src/song.c
15
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;
|
||||
}
|
||||
|
||||
while (song->tag == NULL &&
|
||||
(plugin = isMusic(abs_path, &(song->mtime), next++)))
|
||||
song->tag = plugin->tag_dup(abs_path);
|
||||
|
||||
if (song->tag == NULL || song->tag->time < 0)
|
||||
if (stat(abs_path, &st) < 0)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
song->mtime = st.st_mtime;
|
||||
|
||||
while (song->tag == NULL &&
|
||||
(plugin = hasMusicSuffix(abs_path, next++)))
|
||||
song->tag = plugin->tag_dup(abs_path);
|
||||
|
||||
return song->tag != NULL;
|
||||
}
|
||||
|
||||
char *
|
||||
|
Loading…
Reference in New Issue
Block a user