diff --git a/src/db/plugins/simple/DatabaseSave.cxx b/src/db/plugins/simple/DatabaseSave.cxx index 3955cc037..bec005828 100644 --- a/src/db/plugins/simple/DatabaseSave.cxx +++ b/src/db/plugins/simple/DatabaseSave.cxx @@ -86,8 +86,10 @@ db_load_internal(TextFile &file, Directory &music_root, Error &error) while ((line = file.ReadLine()) != nullptr && strcmp(line, DIRECTORY_INFO_END) != 0) { - if (StringStartsWith(line, DB_FORMAT_PREFIX)) { - format = atoi(line + sizeof(DB_FORMAT_PREFIX) - 1); + const char *p; + + if ((p = StringAfterPrefix(line, DB_FORMAT_PREFIX))) { + format = atoi(p); } else if (StringStartsWith(line, DIRECTORY_MPD_VERSION)) { if (found_version) { error.Set(db_domain, "Duplicate version line"); @@ -95,9 +97,7 @@ db_load_internal(TextFile &file, Directory &music_root, Error &error) } found_version = true; - } else if (StringStartsWith(line, DIRECTORY_FS_CHARSET)) { - const char *new_charset; - + } else if ((p = StringAfterPrefix(line, DIRECTORY_FS_CHARSET))) { if (found_charset) { error.Set(db_domain, "Duplicate charset line"); return false; @@ -105,7 +105,7 @@ db_load_internal(TextFile &file, Directory &music_root, Error &error) found_charset = true; - new_charset = line + sizeof(DIRECTORY_FS_CHARSET) - 1; + const char *new_charset = p; const char *const old_charset = GetFSCharset(); if (*old_charset != 0 && strcmp(new_charset, old_charset) != 0) { @@ -116,8 +116,8 @@ db_load_internal(TextFile &file, Directory &music_root, Error &error) new_charset, old_charset); return false; } - } else if (StringStartsWith(line, DB_TAG_PREFIX)) { - const char *name = line + sizeof(DB_TAG_PREFIX) - 1; + } else if ((p = StringAfterPrefix(line, DB_TAG_PREFIX))) { + const char *name = p; TagType tag = tag_name_parse(name); if (tag == TAG_NUM_OF_ITEM_TYPES) { error.Format(db_domain, diff --git a/src/db/plugins/simple/DirectorySave.cxx b/src/db/plugins/simple/DirectorySave.cxx index 923ee2b82..868507c67 100644 --- a/src/db/plugins/simple/DirectorySave.cxx +++ b/src/db/plugins/simple/DirectorySave.cxx @@ -107,12 +107,11 @@ directory_save(BufferedOutputStream &os, const Directory &directory) static bool ParseLine(Directory &directory, const char *line) { - if (StringStartsWith(line, DIRECTORY_MTIME)) { - directory.mtime = - ParseUint64(line + sizeof(DIRECTORY_MTIME) - 1); - } else if (StringStartsWith(line, DIRECTORY_TYPE)) { - directory.device = - ParseTypeString(line + sizeof(DIRECTORY_TYPE) - 1); + const char *p; + if ((p = StringAfterPrefix(line, DIRECTORY_MTIME))) { + directory.mtime = ParseUint64(p); + } else if ((p = StringAfterPrefix(line, DIRECTORY_TYPE))) { + directory.device = ParseTypeString(p); } else return false; @@ -168,15 +167,15 @@ directory_load(TextFile &file, Directory &directory, Error &error) while ((line = file.ReadLine()) != nullptr && !StringStartsWith(line, DIRECTORY_END)) { - if (StringStartsWith(line, DIRECTORY_DIR)) { + const char *p; + if ((p = StringAfterPrefix(line, DIRECTORY_DIR))) { Directory *subdir = directory_load_subdir(file, directory, - line + sizeof(DIRECTORY_DIR) - 1, - error); + p, error); if (subdir == nullptr) return false; - } else if (StringStartsWith(line, SONG_BEGIN)) { - const char *name = line + sizeof(SONG_BEGIN) - 1; + } else if ((p = StringAfterPrefix(line, SONG_BEGIN))) { + const char *name = p; if (directory.FindSong(name) != nullptr) { error.Format(directory_domain, @@ -191,8 +190,8 @@ directory_load(TextFile &file, Directory &directory, Error &error) directory.AddSong(Song::NewFrom(std::move(*song), directory)); delete song; - } else if (StringStartsWith(line, PLAYLIST_META_BEGIN)) { - const char *name = line + sizeof(PLAYLIST_META_BEGIN) - 1; + } else if ((p = StringAfterPrefix(line, PLAYLIST_META_BEGIN))) { + const char *name = p; if (!playlist_metadata_load(file, directory.playlists, name, error)) return false;