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