aboutsummaryrefslogtreecommitdiffstats
path: root/src/DirectorySave.cxx
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/DirectorySave.cxx (renamed from src/directory_save.c)77
1 files changed, 36 insertions, 41 deletions
diff --git a/src/directory_save.c b/src/DirectorySave.cxx
index de1df050a..6a5efb058 100644
--- a/src/directory_save.c
+++ b/src/DirectorySave.cxx
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2003-2011 The Music Player Daemon Project
+ * Copyright (C) 2003-2013 The Music Player Daemon Project
* http://www.musicpd.org
*
* This program is free software; you can redistribute it and/or modify
@@ -18,12 +18,12 @@
*/
#include "config.h"
-#include "directory_save.h"
-#include "directory.h"
+#include "DirectorySave.hxx"
+#include "Directory.hxx"
#include "song.h"
-#include "text_file.h"
-#include "song_save.h"
-#include "playlist_database.h"
+#include "SongSave.hxx"
+#include "PlaylistDatabase.hxx"
+#include "TextFile.hxx"
#include <assert.h>
#include <string.h>
@@ -43,17 +43,16 @@ directory_quark(void)
}
void
-directory_save(FILE *fp, const struct directory *directory)
+directory_save(FILE *fp, const Directory *directory)
{
- if (!directory_is_root(directory)) {
+ if (!directory->IsRoot()) {
fprintf(fp, DIRECTORY_MTIME "%lu\n",
(unsigned long)directory->mtime);
- fprintf(fp, "%s%s\n", DIRECTORY_BEGIN,
- directory_get_path(directory));
+ fprintf(fp, "%s%s\n", DIRECTORY_BEGIN, directory->GetPath());
}
- struct directory *cur;
+ Directory *cur;
directory_for_each_child(cur, directory) {
char *base = g_path_get_basename(cur->path);
@@ -70,33 +69,31 @@ directory_save(FILE *fp, const struct directory *directory)
directory_for_each_song(song, directory)
song_save(fp, song);
- playlist_vector_save(fp, &directory->playlists);
+ playlist_vector_save(fp, directory->playlists);
- if (!directory_is_root(directory))
- fprintf(fp, DIRECTORY_END "%s\n",
- directory_get_path(directory));
+ if (!directory->IsRoot())
+ fprintf(fp, DIRECTORY_END "%s\n", directory->GetPath());
}
-static struct directory *
-directory_load_subdir(FILE *fp, struct directory *parent, const char *name,
- GString *buffer, GError **error_r)
+static Directory *
+directory_load_subdir(TextFile &file, Directory *parent, const char *name,
+ GError **error_r)
{
- const char *line;
bool success;
- if (directory_get_child(parent, name) != NULL) {
+ if (parent->FindChild(name) != nullptr) {
g_set_error(error_r, directory_quark(), 0,
"Duplicate subdirectory '%s'", name);
return NULL;
}
- struct directory *directory = directory_new_child(parent, name);
+ Directory *directory = parent->CreateChild(name);
- line = read_text_line(fp, buffer);
+ const char *line = file.ReadLine();
if (line == NULL) {
g_set_error(error_r, directory_quark(), 0,
"Unexpected end of file");
- directory_delete(directory);
+ directory->Delete();
return NULL;
}
@@ -105,11 +102,11 @@ directory_load_subdir(FILE *fp, struct directory *parent, const char *name,
g_ascii_strtoull(line + sizeof(DIRECTORY_MTIME) - 1,
NULL, 10);
- line = read_text_line(fp, buffer);
+ line = file.ReadLine();
if (line == NULL) {
g_set_error(error_r, directory_quark(), 0,
"Unexpected end of file");
- directory_delete(directory);
+ directory->Delete();
return NULL;
}
}
@@ -117,13 +114,13 @@ directory_load_subdir(FILE *fp, struct directory *parent, const char *name,
if (!g_str_has_prefix(line, DIRECTORY_BEGIN)) {
g_set_error(error_r, directory_quark(), 0,
"Malformed line: %s", line);
- directory_delete(directory);
+ directory->Delete();
return NULL;
}
- success = directory_load(fp, directory, buffer, error_r);
+ success = directory_load(file, directory, error_r);
if (!success) {
- directory_delete(directory);
+ directory->Delete();
return NULL;
}
@@ -131,44 +128,42 @@ directory_load_subdir(FILE *fp, struct directory *parent, const char *name,
}
bool
-directory_load(FILE *fp, struct directory *directory,
- GString *buffer, GError **error)
+directory_load(TextFile &file, Directory *directory, GError **error)
{
const char *line;
- while ((line = read_text_line(fp, buffer)) != NULL &&
+ while ((line = file.ReadLine()) != NULL &&
!g_str_has_prefix(line, DIRECTORY_END)) {
if (g_str_has_prefix(line, DIRECTORY_DIR)) {
- struct directory *subdir =
- directory_load_subdir(fp, directory,
+ Directory *subdir =
+ directory_load_subdir(file, directory,
line + sizeof(DIRECTORY_DIR) - 1,
- buffer, error);
+ error);
if (subdir == NULL)
return false;
} else if (g_str_has_prefix(line, SONG_BEGIN)) {
const char *name = line + sizeof(SONG_BEGIN) - 1;
struct song *song;
- if (directory_get_song(directory, name) != NULL) {
+ if (directory->FindSong(name) != nullptr) {
g_set_error(error, directory_quark(), 0,
"Duplicate song '%s'", name);
- return NULL;
+ return false;
}
- song = song_load(fp, directory, name,
- buffer, error);
+ song = song_load(file, directory, name, error);
if (song == NULL)
return false;
- directory_add_song(directory, song);
+ directory->AddSong(song);
} else if (g_str_has_prefix(line, PLAYLIST_META_BEGIN)) {
/* duplicate the name, because
playlist_metadata_load() will overwrite the
buffer */
char *name = g_strdup(line + sizeof(PLAYLIST_META_BEGIN) - 1);
- if (!playlist_metadata_load(fp, &directory->playlists,
- name, buffer, error)) {
+ if (!playlist_metadata_load(file, directory->playlists,
+ name, error)) {
g_free(name);
return false;
}