Mercurial > gftp.yaz
diff lib/charset-conv.c @ 988:63555c9744c2
remote charset should be specified by each bookmark entry.
author | Yoshiki Yazawa <yaz@honeyplanet.jp> |
---|---|
date | Fri, 14 Aug 2009 07:54:55 +0900 |
parents | c7d7a081cd9c |
children | c99b134c6185 |
line wrap: on
line diff
--- a/lib/charset-conv.c Wed Apr 08 11:07:35 2009 +0000 +++ b/lib/charset-conv.c Fri Aug 14 07:54:55 2009 +0900 @@ -74,12 +74,12 @@ str, fromset, toset, error->message); } - /*@null@*/ static char * _do_convert_string (gftp_request * request, int is_filename, int force_local, const char *str, size_t *dest_len, int from_utf8) { - char *remote_charsets, *ret, *fromset, *toset, *stpos, *cur_charset; + char *remote_charset = NULL, *default_charset = NULL, *ret, *fromset, + *toset, *stpos, *cur_charset; GError * error; gsize bread; @@ -90,8 +90,14 @@ return (NULL); error = NULL; - gftp_lookup_request_option (request, "remote_charsets", &remote_charsets); - if (*remote_charsets == '\0' || request->use_local_encoding || +// gftp_lookup_request_option (request, "remote_charset", &remote_charset); + remote_charset = request->remote_charset; + gftp_lookup_global_option ("default_charset", &default_charset); + if(!remote_charset) + remote_charset = (default_charset && *default_charset != '\0') + ? default_charset : "UTF8"; + + if (*remote_charset == '\0' || request->use_local_encoding || force_local == 1) { if (from_utf8) @@ -140,7 +146,7 @@ } } - stpos = remote_charsets; + stpos = remote_charset; while ((cur_charset = _gftp_get_next_charset (&stpos)) != NULL) { if (from_utf8) @@ -197,6 +203,7 @@ return (NULL); } + char * gftp_string_to_utf8 (gftp_request * request, const char *str, size_t *dest_len) { @@ -227,6 +234,57 @@ return (_do_convert_string (request, 1, 0, str, dest_len, 1)); } + +char * +gftp_remote_filename_to_utf8 (gftp_request * request, const char *str, + size_t *dest_len) +{ + char *remote_charset = NULL, *default_charset = NULL; + GError *error = NULL; + gchar *ret = NULL; + + if(request == NULL) + return (NULL); + + /* get remote_charset */ +// gftp_lookup_request_option (request, "remote_charset", &remote_charset); + remote_charset = request->remote_charset; + gftp_lookup_global_option ("default_charset", &default_charset); + if(!remote_charset) + remote_charset = (default_charset && *default_charset != '\0') + ? default_charset : "UTF8"; + + ret = g_convert(str, -1, "UTF8", remote_charset, NULL, dest_len, error); + return ret; +} + + +char * +gftp_remote_filename_from_utf8 (gftp_request *request, const char *str, + size_t *dest_len) +{ + char *remote_charset = NULL, *default_charset = NULL; + GError *error = NULL; + gchar *ret = NULL; + + if(request == NULL) + return (NULL); + + if(!g_utf8_validate (str, -1, NULL)) + return (NULL); + + /* get remote_charset */ +// gftp_lookup_request_option (request, "remote_charset", &remote_charset); + remote_charset = request->remote_charset; + gftp_lookup_global_option ("default_charset", &default_charset); + if(!remote_charset) + remote_charset = (default_charset && *default_charset != '\0') + ? default_charset : "UTF8"; + + ret = g_convert(str, -1, remote_charset, "UTF8", NULL, dest_len, error); + return ret; +} + #else char * @@ -258,6 +316,20 @@ return (NULL); } +char * +gftp_remote_filename_to_utf8 (gftp_request * request, const char *str, size_t dest_len) +{ + return (NULL); +} + + +char * +gftp_remote_filename_from_utf8 (gftp_request * request, int force_local, + const char *str, size_t dest_len) +{ + return (NULL); +} + #endif