aboutsummaryrefslogtreecommitdiff
path: root/src/mapper.c
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2009-01-08 21:20:46 +0100
committerMax Kellermann <max@duempel.org>2009-01-08 21:20:46 +0100
commit5ed5aa99acb6b8360df75bb1ce13d4b97ea50538 (patch)
tree518a01dabc3c9652fdbb090eb4e8fd97ed725729 /src/mapper.c
parentf0980283bcce8ad7819f71bc49b973e28e54b22d (diff)
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 'src/mapper.c')
-rw-r--r--src/mapper.c33
1 files changed, 19 insertions, 14 deletions
diff --git a/src/mapper.c b/src/mapper.c
index bbcc220e..6583e1c5 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 *