diff options
Diffstat (limited to 'src/Directory.cxx')
-rw-r--r-- | src/Directory.cxx | 28 |
1 files changed, 12 insertions, 16 deletions
diff --git a/src/Directory.cxx b/src/Directory.cxx index b2942588e..750fee896 100644 --- a/src/Directory.cxx +++ b/src/Directory.cxx @@ -25,6 +25,7 @@ #include "SongSort.hxx" #include "Song.hxx" #include "fs/Traits.hxx" +#include "util/VarSize.hxx" #include "util/Error.hxx" extern "C" { @@ -42,14 +43,9 @@ Directory::Allocate(const char *path) { assert(path != nullptr); - const size_t path_size = strlen(path) + 1; - Directory *directory = - (Directory *)g_malloc0(sizeof(*directory) - - sizeof(directory->path) - + path_size); - new(directory) Directory(path); - - return directory; + return NewVarSize<Directory>(sizeof(Directory::path), + strlen(path) + 1, + path); } Directory::Directory() @@ -61,6 +57,7 @@ Directory::Directory() } Directory::Directory(const char *_path) + :mtime(0), have_stat(false) { INIT_LIST_HEAD(&children); INIT_LIST_HEAD(&songs); @@ -95,8 +92,7 @@ Directory::NewGeneric(const char *path, Directory *parent) void Directory::Free() { - this->Directory::~Directory(); - g_free(this); + DeleteVarSize(this); } void @@ -114,7 +110,7 @@ Directory::GetName() const { assert(!IsRoot()); - return PathTraits::GetBaseUTF8(path); + return PathTraitsUTF8::GetBase(path); } Directory * @@ -178,7 +174,7 @@ Directory::LookupDirectory(const char *uri) if (isRootDirectory(uri)) return this; - char *duplicated = g_strdup(uri), *name = duplicated; + char *duplicated = xstrdup(uri), *name = duplicated; Directory *d = this; while (1) { @@ -198,7 +194,7 @@ Directory::LookupDirectory(const char *uri) name = slash + 1; } - g_free(duplicated); + free(duplicated); return d; } @@ -248,7 +244,7 @@ Directory::LookupSong(const char *uri) assert(holding_db_lock()); assert(uri != nullptr); - duplicated = g_strdup(uri); + duplicated = xstrdup(uri); base = strrchr(duplicated, '/'); Directory *d = this; @@ -256,7 +252,7 @@ Directory::LookupSong(const char *uri) *base++ = 0; d = d->LookupDirectory(duplicated); if (d == nullptr) { - g_free(duplicated); + free(duplicated); return nullptr; } } else @@ -265,7 +261,7 @@ Directory::LookupSong(const char *uri) Song *song = d->FindSong(base); assert(song == nullptr || song->parent == d); - g_free(duplicated); + free(duplicated); return song; } |