annotate lib/charset-conv.c @ 992:9c583f570950 default tip

more character set conversion on remote file names.
author Yoshiki Yazawa <yaz@honeyplanet.jp>
date Wed, 15 Sep 2010 11:42:57 +0900
parents c99b134c6185
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
950
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
1 /*****************************************************************************/
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
2 /* charset-conv.c - contains functions for performing conversions between */
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
3 /* character sets. */
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
4 /* Copyright (C) 1998-2008 Brian Masney <masneyb@gftp.org> */
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
5 /* */
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
6 /* This program is free software; you can redistribute it and/or modify */
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
7 /* it under the terms of the GNU General Public License as published by */
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
8 /* the Free Software Foundation; either version 2 of the License, or */
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
9 /* (at your option) any later version. */
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
10 /* */
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
11 /* This program is distributed in the hope that it will be useful, */
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
12 /* but WITHOUT ANY WARRANTY; without even the implied warranty of */
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
13 /* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
14 /* GNU General Public License for more details. */
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
15 /* */
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
16 /* You should have received a copy of the GNU General Public License */
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
17 /* along with this program; if not, write to the Free Software */
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
18 /* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA */
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
19 /*****************************************************************************/
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
20
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
21 #include "gftp.h"
989
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
22 #include <langinfo.h>
950
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
23 static const char cvsid[] = "$Id: protocols.c 952 2008-01-24 23:31:26Z masneyb $";
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
24
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
25 static /*@null@*/ char *
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
26 _gftp_get_next_charset (char **curpos)
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
27 {
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
28 char *ret, *endpos;
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
29 size_t len, retlen;
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
30
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
31 if (**curpos == '\0')
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
32 return (NULL);
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
33
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
34 for (; **curpos == ' ' || **curpos == '\t'; (*curpos)++);
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
35
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
36 if ((endpos = strchr (*curpos, ',')) == NULL)
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
37 len = strlen (*curpos) - 1; /* the trailing ',' should be omitted */
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
38 else
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
39 len = endpos - *curpos;
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
40
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
41 for (retlen = len - 1;
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
42 (*curpos)[retlen - 1] == ' ' || (*curpos)[retlen - 1] == '\t';
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
43 retlen--);
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
44
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
45 retlen++; /* Needed due to the len - 1 above... */
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
46 ret = g_malloc0 (retlen + 1);
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
47 memcpy (ret, *curpos, retlen);
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
48
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
49 for (*curpos += len; **curpos == ','; (*curpos)++);
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
50
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
51 return (ret);
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
52 }
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
53
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
54
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
55 static void
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
56 _do_show_iconv_error (const char *str, char *charset, int from_utf8,
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
57 GError * error)
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
58 {
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
59 const char *fromset, *toset;
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
60
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
61 if (from_utf8)
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
62 {
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
63 fromset = "UTF-8";
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
64 toset = charset;
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
65 }
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
66 else
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
67 {
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
68 fromset = charset;
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
69 toset = "UTF-8";
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
70 }
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
71
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
72 printf (_("Error converting string '%s' from character set %s to character set %s: %s\n"),
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
73 str, fromset, toset, error->message);
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
74 }
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
75
989
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
76
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
77 char *
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
78 gftp_string_to_utf8 (gftp_request *request, const char *str, size_t *dest_len)
950
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
79 {
989
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
80 gchar *remote_charset = NULL, *default_charset = NULL, *ret;
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
81 GError *error = NULL;
988
63555c9744c2 remote charset should be specified by each bookmark entry.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 950
diff changeset
82
989
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
83 gftp_lookup_global_option ("default_charset", &default_charset);
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
84 if(!default_charset)
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
85 default_charset = "UTF-8";
950
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
86
989
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
87 if(request)
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
88 remote_charset = request->remote_charset;
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
89 if(!remote_charset)
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
90 remote_charset = default_charset;
950
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
91
989
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
92 ret = g_convert_with_fallback(str, -1, "UTF-8", remote_charset, "?", NULL, dest_len, &error);
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
93
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
94 return ret;
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
95 }
950
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
96
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
97
989
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
98 char *
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
99 gftp_string_from_utf8 (gftp_request *request, int force_local, const char *str,
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
100 size_t *dest_len)
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
101 {
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
102 gchar *remote_charset = NULL, *default_charset = NULL, *ret;
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
103 GError *error = NULL;
950
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
104
989
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
105 gftp_lookup_global_option ("default_charset", &default_charset);
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
106 if(!default_charset)
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
107 default_charset = "UTF-8";
950
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
108
989
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
109 if(request)
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
110 remote_charset = request->remote_charset;
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
111 if(!remote_charset)
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
112 remote_charset = default_charset;
950
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
113
989
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
114 ret = g_convert_with_fallback(str, -1, remote_charset, "UTF-8", "?", NULL, dest_len, &error);
950
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
115
989
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
116 return ret;
950
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
117 }
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
118
988
63555c9744c2 remote charset should be specified by each bookmark entry.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 950
diff changeset
119
950
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
120 char *
989
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
121 gftp_filename_to_utf8 (gftp_request *request, const char *str,
950
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
122 size_t *dest_len)
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
123 {
989
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
124 char *codeset = nl_langinfo(CODESET);
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
125 gchar *ret;
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
126 GError *error = NULL;
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
127
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
128 ret = g_filename_to_utf8 (str, -1, NULL, dest_len, &error);
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
129 if(!ret) {
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
130 error = NULL;
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
131 ret = g_convert_with_fallback(str, -1, "UTF-8", codeset, "?", NULL, dest_len, &error);
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
132 }
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
133
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
134 if(!ret) {
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
135 error = NULL;
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
136 ret = g_strdup(str);
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
137 }
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
138
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
139 return ret;
950
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
140 }
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
141
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
142
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
143 char *
989
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
144 gftp_filename_from_utf8 (gftp_request *request, const char *str,
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
145 size_t *dest_len)
950
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
146 {
989
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
147 char *codeset = nl_langinfo(CODESET);
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
148 gchar *ret;
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
149 GError *error = NULL;
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
150
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
151 ret = g_filename_from_utf8 (str, -1, NULL, dest_len, &error);
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
152 if(!ret) {
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
153 error = NULL;
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
154 ret = g_convert_with_fallback(str, -1, codeset, "UTF-8", "?", NULL, dest_len, &error);
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
155 }
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
156
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
157 return ret;
950
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
158 }
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
159
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
160
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
161 char *
989
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
162 gftp_remote_filename_to_utf8 (gftp_request *request, const char *str,
988
63555c9744c2 remote charset should be specified by each bookmark entry.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 950
diff changeset
163 size_t *dest_len)
63555c9744c2 remote charset should be specified by each bookmark entry.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 950
diff changeset
164 {
63555c9744c2 remote charset should be specified by each bookmark entry.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 950
diff changeset
165 char *remote_charset = NULL, *default_charset = NULL;
989
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
166 gchar *ret;
988
63555c9744c2 remote charset should be specified by each bookmark entry.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 950
diff changeset
167 GError *error = NULL;
63555c9744c2 remote charset should be specified by each bookmark entry.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 950
diff changeset
168
63555c9744c2 remote charset should be specified by each bookmark entry.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 950
diff changeset
169 if(request == NULL)
63555c9744c2 remote charset should be specified by each bookmark entry.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 950
diff changeset
170 return (NULL);
63555c9744c2 remote charset should be specified by each bookmark entry.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 950
diff changeset
171
63555c9744c2 remote charset should be specified by each bookmark entry.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 950
diff changeset
172 /* get remote_charset */
63555c9744c2 remote charset should be specified by each bookmark entry.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 950
diff changeset
173 remote_charset = request->remote_charset;
63555c9744c2 remote charset should be specified by each bookmark entry.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 950
diff changeset
174 gftp_lookup_global_option ("default_charset", &default_charset);
63555c9744c2 remote charset should be specified by each bookmark entry.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 950
diff changeset
175 if(!remote_charset)
63555c9744c2 remote charset should be specified by each bookmark entry.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 950
diff changeset
176 remote_charset = (default_charset && *default_charset != '\0')
63555c9744c2 remote charset should be specified by each bookmark entry.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 950
diff changeset
177 ? default_charset : "UTF8";
63555c9744c2 remote charset should be specified by each bookmark entry.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 950
diff changeset
178
989
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
179 ret = g_convert(str, -1, "UTF8", remote_charset, NULL, dest_len, &error);
988
63555c9744c2 remote charset should be specified by each bookmark entry.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 950
diff changeset
180 return ret;
63555c9744c2 remote charset should be specified by each bookmark entry.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 950
diff changeset
181 }
63555c9744c2 remote charset should be specified by each bookmark entry.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 950
diff changeset
182
63555c9744c2 remote charset should be specified by each bookmark entry.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 950
diff changeset
183
63555c9744c2 remote charset should be specified by each bookmark entry.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 950
diff changeset
184 char *
63555c9744c2 remote charset should be specified by each bookmark entry.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 950
diff changeset
185 gftp_remote_filename_from_utf8 (gftp_request *request, const char *str,
63555c9744c2 remote charset should be specified by each bookmark entry.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 950
diff changeset
186 size_t *dest_len)
63555c9744c2 remote charset should be specified by each bookmark entry.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 950
diff changeset
187 {
63555c9744c2 remote charset should be specified by each bookmark entry.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 950
diff changeset
188 char *remote_charset = NULL, *default_charset = NULL;
989
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
189 gchar *ret;
988
63555c9744c2 remote charset should be specified by each bookmark entry.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 950
diff changeset
190 GError *error = NULL;
63555c9744c2 remote charset should be specified by each bookmark entry.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 950
diff changeset
191
63555c9744c2 remote charset should be specified by each bookmark entry.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 950
diff changeset
192 if(request == NULL)
63555c9744c2 remote charset should be specified by each bookmark entry.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 950
diff changeset
193 return (NULL);
63555c9744c2 remote charset should be specified by each bookmark entry.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 950
diff changeset
194
63555c9744c2 remote charset should be specified by each bookmark entry.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 950
diff changeset
195 if(!g_utf8_validate (str, -1, NULL))
63555c9744c2 remote charset should be specified by each bookmark entry.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 950
diff changeset
196 return (NULL);
63555c9744c2 remote charset should be specified by each bookmark entry.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 950
diff changeset
197
63555c9744c2 remote charset should be specified by each bookmark entry.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 950
diff changeset
198 /* get remote_charset */
63555c9744c2 remote charset should be specified by each bookmark entry.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 950
diff changeset
199 remote_charset = request->remote_charset;
63555c9744c2 remote charset should be specified by each bookmark entry.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 950
diff changeset
200 gftp_lookup_global_option ("default_charset", &default_charset);
63555c9744c2 remote charset should be specified by each bookmark entry.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 950
diff changeset
201 if(!remote_charset)
63555c9744c2 remote charset should be specified by each bookmark entry.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 950
diff changeset
202 remote_charset = (default_charset && *default_charset != '\0')
63555c9744c2 remote charset should be specified by each bookmark entry.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 950
diff changeset
203 ? default_charset : "UTF8";
63555c9744c2 remote charset should be specified by each bookmark entry.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 950
diff changeset
204
989
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
205 ret = g_convert(str, -1, remote_charset, "UTF8", NULL, dest_len, &error);
988
63555c9744c2 remote charset should be specified by each bookmark entry.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 950
diff changeset
206 return ret;
63555c9744c2 remote charset should be specified by each bookmark entry.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 950
diff changeset
207 }