diff options
author | Eric Wong <normalperson@yhbt.net> | 2008-10-06 18:37:13 +0200 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2008-10-06 18:37:13 +0200 |
commit | 836dcc28c5efaadab108ba20cad24829601a1ce1 (patch) | |
tree | 5b7ec1f7f3297fcfd119613c9764a276257eb048 | |
parent | fb4d55c5b37cd2f70b4cc3b3aed5d851fe67a7e6 (diff) | |
download | mpd-836dcc28c5efaadab108ba20cad24829601a1ce1.tar.gz mpd-836dcc28c5efaadab108ba20cad24829601a1ce1.tar.xz mpd-836dcc28c5efaadab108ba20cad24829601a1ce1.zip |
directory: reuse existing directory if found on update
Instead of allocating a new one, just reuse an existing
one if one is found when rereading the DB. This is a small
makes the previous commit work on subdirectories
of the root music directory.
[1] "song: better handling of existing songs when rereading DB"
-rw-r--r-- | src/directory.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/src/directory.c b/src/directory.c index cc0027d96..cb3eb451a 100644 --- a/src/directory.c +++ b/src/directory.c @@ -740,12 +740,13 @@ static void readDirectoryInfo(FILE * fp, Directory * directory) char buffer[MPD_PATH_MAX * 2]; int bufferSize = MPD_PATH_MAX * 2; char key[MPD_PATH_MAX * 2]; - Directory *subDirectory; char *name; while (myFgets(buffer, bufferSize, fp) && prefixcmp(buffer, DIRECTORY_END)) { if (!prefixcmp(buffer, DIRECTORY_DIR)) { + Directory *subdir; + strcpy(key, &(buffer[strlen(DIRECTORY_DIR)])); if (!myFgets(buffer, bufferSize, fp)) FATAL("Error reading db, fgets\n"); @@ -757,9 +758,13 @@ static void readDirectoryInfo(FILE * fp, Directory * directory) if (prefixcmp(buffer, DIRECTORY_BEGIN)) FATAL("Error reading db at line: %s\n", buffer); name = &(buffer[strlen(DIRECTORY_BEGIN)]); - subDirectory = newDirectory(name, directory); - dirvec_add(&directory->children, subDirectory); - readDirectoryInfo(fp, subDirectory); + if ((subdir = getDirectory(name))) { + assert(subdir->parent == directory); + } else { + subdir = newDirectory(name, directory); + dirvec_add(&directory->children, subdir); + } + readDirectoryInfo(fp, subdir); } else if (!prefixcmp(buffer, SONG_BEGIN)) { readSongInfoIntoList(fp, &directory->songs, directory); } else { |