diff options
Diffstat (limited to '')
-rw-r--r-- | src/Directory.cxx | 45 | ||||
-rw-r--r-- | src/Directory.hxx | 13 |
2 files changed, 40 insertions, 18 deletions
diff --git a/src/Directory.cxx b/src/Directory.cxx index c2c5d2816..b67ad3de8 100644 --- a/src/Directory.cxx +++ b/src/Directory.cxx @@ -36,8 +36,8 @@ extern "C" { #include <string.h> #include <stdlib.h> -static Directory * -directory_allocate(const char *path) +inline Directory * +Directory::Allocate(const char *path) { assert(path != NULL); @@ -46,30 +46,21 @@ directory_allocate(const char *path) (Directory *)g_malloc0(sizeof(*directory) - sizeof(directory->path) + path_size); - INIT_LIST_HEAD(&directory->children); - INIT_LIST_HEAD(&directory->songs); - INIT_LIST_HEAD(&directory->playlists); - - memcpy(directory->path, path, path_size); + new(directory) Directory(path); return directory; } -Directory * -Directory::NewGeneric(const char *path, Directory *parent) +Directory::Directory(const char *_path) { - assert(path != NULL); - assert((*path == 0) == (parent == NULL)); - - Directory *directory = directory_allocate(path); - - directory->parent = parent; + INIT_LIST_HEAD(&children); + INIT_LIST_HEAD(&songs); + INIT_LIST_HEAD(&playlists); - return directory; + strcpy(path, _path); } -void -Directory::Free() +Directory::~Directory() { playlist_vector_deinit(&playlists); @@ -80,7 +71,25 @@ Directory::Free() Directory *child, *n; directory_for_each_child_safe(child, n, this) child->Free(); +} +Directory * +Directory::NewGeneric(const char *path, Directory *parent) +{ + assert(path != NULL); + assert((*path == 0) == (parent == NULL)); + + Directory *directory = Allocate(path); + + directory->parent = parent; + + return directory; +} + +void +Directory::Free() +{ + this->Directory::~Directory(); g_free(this); } diff --git a/src/Directory.hxx b/src/Directory.hxx index 29c69d6d6..3b2c6b1a3 100644 --- a/src/Directory.hxx +++ b/src/Directory.hxx @@ -90,6 +90,19 @@ struct Directory { bool have_stat; /* not needed if ino_t == dev_t == 0 is impossible */ char path[sizeof(long)]; +protected: + Directory(const char *path); + + gcc_malloc gcc_nonnull_all + static Directory *Allocate(const char *path); + +public: + /** + * Default constructor, needed for #detached_root. + */ + Directory() = default; + ~Directory(); + /** * Generic constructor for #Directory object. */ |