diff options
Diffstat (limited to 'common/fmplayer_file_gio.c')
-rw-r--r-- | common/fmplayer_file_gio.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/common/fmplayer_file_gio.c b/common/fmplayer_file_gio.c index a2b52d2..c690b15 100644 --- a/common/fmplayer_file_gio.c +++ b/common/fmplayer_file_gio.c @@ -1,5 +1,6 @@ #include "common/fmplayer_file.h" #include <gio/gio.h> +#include <glib.h> #include <stdlib.h> #include <string.h> @@ -119,3 +120,34 @@ err: void *fmplayer_path_dup(const void *path) { return strdup(path); } + +char *fmplayer_path_filename_sjis(const void *pathptr) { + const char *uri = pathptr; + GFile *file = 0; + GFileInfo *finfo = 0; + const char *filename = 0; + char *filenamesjis = 0, *filenamebuf = 0; + file = g_file_new_for_uri(uri); + if (!file) goto err; + finfo = g_file_query_info( + file, + G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME, + G_FILE_QUERY_INFO_NONE, + 0, + 0); + if (!finfo) goto err; + filename = g_file_info_get_attribute_string( + finfo, G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME); + filenamesjis = g_convert_with_fallback( + filename, -1, + "cp932", "utf-8", "?", + 0, 0, 0); + if (!filenamesjis) goto err; + filenamebuf = strdup(filenamesjis); +err: + if (filenamesjis) g_free(filenamesjis); + if (finfo) g_object_unref(G_OBJECT(finfo)); + if (file) g_object_unref(G_OBJECT(file)); + return filenamebuf; +} + |