diff options
author | Max Kellermann <max@duempel.org> | 2009-01-08 21:20:46 +0100 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2009-01-08 21:20:46 +0100 |
commit | 5ed5aa99acb6b8360df75bb1ce13d4b97ea50538 (patch) | |
tree | 518a01dabc3c9652fdbb090eb4e8fd97ed725729 /src/mapper.c | |
parent | f0980283bcce8ad7819f71bc49b973e28e54b22d (diff) | |
download | mpd-5ed5aa99acb6b8360df75bb1ce13d4b97ea50538.tar.gz mpd-5ed5aa99acb6b8360df75bb1ce13d4b97ea50538.tar.xz mpd-5ed5aa99acb6b8360df75bb1ce13d4b97ea50538.zip |
path: allocate buffer in fs_charset conversion functions
Don't use fixed static buffers. GLib allocates a new string for us
anyway, let's just return this one instead of copying it.
Diffstat (limited to '')
-rw-r--r-- | src/mapper.c | 33 |
1 files changed, 19 insertions, 14 deletions
diff --git a/src/mapper.c b/src/mapper.c index bbcc220e3..6583e1c54 100644 --- a/src/mapper.c +++ b/src/mapper.c @@ -91,16 +91,19 @@ void mapper_finish(void) char * map_uri_fs(const char *uri) { - char buffer[MPD_PATH_MAX]; + char *uri_fs, *path_fs; assert(uri != NULL); assert(*uri != '/'); - uri = utf8_to_fs_charset(buffer, uri); - if (uri == NULL) + uri_fs = utf8_to_fs_charset(uri); + if (uri_fs == NULL) return NULL; - return g_build_filename(music_dir, uri, NULL); + path_fs = g_build_filename(music_dir, uri_fs, NULL); + g_free(uri_fs); + + return path_fs; } char * @@ -116,8 +119,7 @@ map_directory_fs(const struct directory *directory) char * map_directory_child_fs(const struct directory *directory, const char *name) { - char buffer[MPD_PATH_MAX]; - char *parent_fs, *path; + char *name_fs, *parent_fs, *path; /* check for invalid or unauthorized base names */ if (*name == 0 || strchr(name, '/') != NULL || @@ -128,30 +130,33 @@ map_directory_child_fs(const struct directory *directory, const char *name) if (parent_fs == NULL) return NULL; - name = utf8_to_fs_charset(buffer, name); - path = g_build_filename(parent_fs, name, NULL); + name_fs = utf8_to_fs_charset(name); + if (name_fs == NULL) { + g_free(parent_fs); + return NULL; + } + + path = g_build_filename(parent_fs, name_fs, NULL); g_free(parent_fs); + g_free(name_fs); + return path; } char * map_song_fs(const struct song *song) { - char buffer[MPD_PATH_MAX]; - assert(song_is_file(song)); if (song_in_database(song)) return map_directory_child_fs(song->parent, song->url); else - return g_strdup(utf8_to_fs_charset(buffer, song->url)); + return utf8_to_fs_charset(song->url); } char * map_fs_to_utf8(const char *path_fs) { - char buffer[MPD_PATH_MAX]; - if (strncmp(path_fs, music_dir, music_dir_length) == 0 && path_fs[music_dir_length] == '/') /* remove musicDir prefix */ @@ -160,7 +165,7 @@ map_fs_to_utf8(const char *path_fs) /* not within musicDir */ return NULL; - return g_strdup(fs_charset_to_utf8(buffer, path_fs)); + return fs_charset_to_utf8(path_fs); } const char * |