diff options
author | Max Kellermann <max@duempel.org> | 2009-11-01 15:34:13 +0100 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2009-11-01 15:34:13 +0100 |
commit | 2cd8a9fecf197a795ae5941badd1ce854d53ab98 (patch) | |
tree | aaa436d5c789bec49ef051f5cd8e7ab73278e938 | |
parent | 22279127f9bdb85a3738a7b55fdadf607be08a00 (diff) | |
download | mpd-2cd8a9fecf197a795ae5941badd1ce854d53ab98.tar.gz mpd-2cd8a9fecf197a795ae5941badd1ce854d53ab98.tar.xz mpd-2cd8a9fecf197a795ae5941badd1ce854d53ab98.zip |
directory_save: abort on duplicate subdirectory
The old code tried to recover, but what's the point of that? If a
directory is duplicate, something is wrong with the database file.
-rw-r--r-- | src/directory_save.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/src/directory_save.c b/src/directory_save.c index 892896920..9d6933d63 100644 --- a/src/directory_save.c +++ b/src/directory_save.c @@ -86,6 +86,12 @@ directory_load_subdir(FILE *fp, struct directory *parent, const char *name, struct directory *directory; bool success; + if (directory_get_child(parent, name) != NULL) { + g_set_error(error_r, directory_quark(), 0, + "Duplicate subdirectory '%s'", name); + return NULL; + } + if (!fgets(buffer, sizeof(buffer), fp)) { g_set_error(error_r, directory_quark(), 0, "Unexpected end of file"); @@ -119,13 +125,7 @@ directory_load_subdir(FILE *fp, struct directory *parent, const char *name, return NULL; } - directory = directory_get_child(parent, name); - if (directory != NULL) { - assert(directory->parent == parent); - } else { - directory = directory_new(name, parent); - dirvec_add(&parent->children, directory); - } + directory = directory_new(name, parent); success = directory_load(fp, directory, error_r); if (!success) @@ -151,6 +151,8 @@ directory_load(FILE *fp, struct directory *directory, GError **error) error); if (subdir == NULL) return false; + + dirvec_add(&directory->children, subdir); } else if (g_str_has_prefix(buffer, SONG_BEGIN)) { success = songvec_load(fp, &directory->songs, directory, error); |