aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2008-10-13 09:55:00 +0200
committerMax Kellermann <max@duempel.org>2008-10-13 09:55:00 +0200
commit8d907fb9fafaeddeb237e494ff461d2df6c03af4 (patch)
treeaa28b4fa8cdb1de45662b9cc4b12710b7797f7cd
parent8867bd554c6acd508d41f80457bac242a36e61fc (diff)
downloadmpd-8d907fb9fafaeddeb237e494ff461d2df6c03af4.tar.gz
mpd-8d907fb9fafaeddeb237e494ff461d2df6c03af4.tar.xz
mpd-8d907fb9fafaeddeb237e494ff461d2df6c03af4.zip
directory: use mpd_sizeof_str_flex_array for path, too
This way we avoid unnecessary heap allocations.
-rw-r--r--src/directory.c13
-rw-r--r--src/directory.h2
2 files changed, 8 insertions, 7 deletions
diff --git a/src/directory.c b/src/directory.c
index e63310026..002cb65e3 100644
--- a/src/directory.c
+++ b/src/directory.c
@@ -23,16 +23,18 @@
#include <string.h>
struct directory *
-directory_new(const char *dirname, struct directory *parent)
+directory_new(const char *path, struct directory *parent)
{
struct directory *directory;
+ size_t pathlen = strlen(path);
- assert(dirname != NULL);
- assert((*dirname == 0) == (parent == NULL));
+ assert(path != NULL);
+ assert((*path == 0) == (parent == NULL));
- directory = xcalloc(1, sizeof(*directory));
- directory->path = xstrdup(dirname);
+ directory = xcalloc(1, sizeof(*directory) -
+ sizeof(directory->path) + pathlen + 1);
directory->parent = parent;
+ memcpy(directory->path, path, pathlen + 1);
return directory;
}
@@ -42,7 +44,6 @@ directory_free(struct directory *directory)
{
dirvec_destroy(&directory->children);
songvec_destroy(&directory->songs);
- free(directory->path);
free(directory);
/* this resets last dir returned */
/*directory_get_path(NULL); */
diff --git a/src/directory.h b/src/directory.h
index 9dd064ef7..4e50cf1e8 100644
--- a/src/directory.h
+++ b/src/directory.h
@@ -35,13 +35,13 @@
#define DIRECTORY_FS_CHARSET "fs_charset: "
struct directory {
- char *path;
struct dirvec children;
struct songvec songs;
struct directory *parent;
ino_t inode;
dev_t device;
unsigned stat; /* not needed if ino_t == dev_t == 0 is impossible */
+ char path[sizeof(long)];
};
static inline bool