annotate lib/charset-conv.c @ 950:c7d7a081cd9c

2008-03-04 Brian Masney <masneyb@gftp.org> * lib/gftp.h lib/socket-connect.c lib/sockutils.c lib/protocols.c lib/Makefile.am lib/charset-conv.c lib/parse-dir-listing.c - split protocols.c into smaller files. No changes were made to the moved functions.
author masneyb
date Tue, 04 Mar 2008 12:28:40 +0000
parents
children 63555c9744c2
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"
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
22 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
23
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
24 #if GLIB_MAJOR_VERSION > 1
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
25
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
26 static /*@null@*/ char *
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
27 _gftp_get_next_charset (char **curpos)
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
28 {
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
29 char *ret, *endpos;
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
30 size_t len, retlen;
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
31
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
32 if (**curpos == '\0')
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
33 return (NULL);
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
34
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
35 for (; **curpos == ' ' || **curpos == '\t'; (*curpos)++);
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
36
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
37 if ((endpos = strchr (*curpos, ',')) == NULL)
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
38 len = strlen (*curpos) - 1; /* the trailing ',' should be omitted */
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
39 else
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
40 len = endpos - *curpos;
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
41
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
42 for (retlen = len - 1;
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
43 (*curpos)[retlen - 1] == ' ' || (*curpos)[retlen - 1] == '\t';
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
44 retlen--);
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
45
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
46 retlen++; /* Needed due to the len - 1 above... */
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
47 ret = g_malloc0 (retlen + 1);
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
48 memcpy (ret, *curpos, retlen);
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
49
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
50 for (*curpos += len; **curpos == ','; (*curpos)++);
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
51
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
52 return (ret);
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
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
56 static void
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
57 _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
58 GError * error)
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
59 {
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
60 const char *fromset, *toset;
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
61
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
62 if (from_utf8)
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
63 {
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
64 fromset = "UTF-8";
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
65 toset = charset;
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
66 }
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
67 else
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
68 {
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
69 fromset = charset;
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
70 toset = "UTF-8";
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
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
73 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
74 str, fromset, toset, error->message);
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
75 }
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
76
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
77
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
78 /*@null@*/ static char *
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
79 _do_convert_string (gftp_request * request, int is_filename, int force_local,
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
80 const char *str, size_t *dest_len, int from_utf8)
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
81 {
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
82 char *remote_charsets, *ret, *fromset, *toset, *stpos, *cur_charset;
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
83 GError * error;
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
84 gsize bread;
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
85
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
86 if (request == NULL)
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
87 return (NULL);
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
88
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
89 if (g_utf8_validate (str, -1, NULL) != from_utf8)
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
90 return (NULL);
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
91
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
92 error = NULL;
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
93 gftp_lookup_request_option (request, "remote_charsets", &remote_charsets);
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
94 if (*remote_charsets == '\0' || request->use_local_encoding ||
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
95 force_local == 1)
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 if (from_utf8)
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
98 {
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
99 if (is_filename)
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
100 ret = g_filename_from_utf8 (str, -1, &bread, dest_len, &error);
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
101 else
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
102 ret = g_locale_from_utf8 (str, -1, &bread, dest_len, &error);
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
103 }
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
104 else
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
105 {
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
106 if (is_filename)
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
107 ret = g_filename_to_utf8 (str, -1, &bread, dest_len, &error);
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
108 else
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
109 ret = g_locale_to_utf8 (str, -1, &bread, dest_len, &error);
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
110 }
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
111
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
112 if (ret == NULL)
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
113 _do_show_iconv_error (str, request->iconv_charset, from_utf8, error);
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
114
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
115 return (ret);
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
116 }
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 if (from_utf8)
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
119 {
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
120 if (request->iconv_from_initialized)
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
121 {
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
122 ret = g_convert_with_iconv (str, -1, request->iconv_from, &bread, dest_len,
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
123 &error);
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
124 if (ret == NULL)
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
125 _do_show_iconv_error (str, request->iconv_charset, from_utf8, error);
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
126
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
127 return (ret);
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
128 }
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
129 }
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
130 else
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
131 {
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
132 if (request->iconv_to_initialized)
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
133 {
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
134 ret = g_convert_with_iconv (str, -1, request->iconv_to, &bread, dest_len,
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
135 &error);
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
136 if (ret == NULL)
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
137 _do_show_iconv_error (str, request->iconv_charset, from_utf8, error);
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
138
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
139 return (ret);
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 stpos = remote_charsets;
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
144 while ((cur_charset = _gftp_get_next_charset (&stpos)) != NULL)
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
145 {
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
146 if (from_utf8)
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
147 {
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
148 fromset = "UTF-8";
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
149 toset = cur_charset;
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
150 if ((request->iconv_from = g_iconv_open (toset, fromset)) == (GIConv) -1)
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
151 {
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
152 g_free (cur_charset);
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
153 continue;
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
154 }
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
155
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
156 error = NULL;
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
157 if ((ret = g_convert_with_iconv (str, -1, request->iconv_from, &bread,
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
158 dest_len, &error)) == NULL)
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 g_iconv_close (request->iconv_from);
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
161 request->iconv_from = NULL;
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
162 _do_show_iconv_error (str, cur_charset, from_utf8, error);
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
163 g_free (cur_charset);
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
164 continue;
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
165 }
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
166
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
167 request->iconv_from_initialized = 1;
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
168 }
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
169 else
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
170 {
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
171 fromset = cur_charset;
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
172 toset = "UTF-8";
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
173 if ((request->iconv_to = g_iconv_open (toset, fromset)) == (GIConv) -1)
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
174 {
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
175 g_free (cur_charset);
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
176 continue;
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
177 }
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
178
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
179 error = NULL;
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
180 if ((ret = g_convert_with_iconv (str, -1, request->iconv_to, &bread,
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
181 dest_len, &error)) == NULL)
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
182 {
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
183 g_iconv_close (request->iconv_to);
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
184 request->iconv_to = NULL;
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
185 _do_show_iconv_error (str, cur_charset, from_utf8, error);
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
186 g_free (cur_charset);
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
187 continue;
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
188 }
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
189
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
190 request->iconv_to_initialized = 1;
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
191 }
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
192
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
193 request->iconv_charset = cur_charset;
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
194 return (ret);
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
195 }
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
196
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
197 return (NULL);
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
198 }
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
199
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
200 char *
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
201 gftp_string_to_utf8 (gftp_request * request, const char *str, size_t *dest_len)
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
202 {
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
203 return (_do_convert_string (request, 0, 0, str, dest_len, 0));
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
204 }
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
205
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
206
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
207 char *
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
208 gftp_string_from_utf8 (gftp_request * request, int force_local, const char *str,
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
209 size_t *dest_len)
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
210 {
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
211 return (_do_convert_string (request, 0, force_local, str, dest_len, 1));
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
212 }
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
213
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
214
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
215 char *
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
216 gftp_filename_to_utf8 (gftp_request * request, const char *str,
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
217 size_t *dest_len)
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
218 {
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
219 return (_do_convert_string (request, 1, 0, str, dest_len, 0));
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
220 }
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
221
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
222
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
223 char *
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
224 gftp_filename_from_utf8 (gftp_request * request, const char *str,
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
225 size_t *dest_len)
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
226 {
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
227 return (_do_convert_string (request, 1, 0, str, dest_len, 1));
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
228 }
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
229
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
230 #else
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
231
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
232 char *
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
233 gftp_string_to_utf8 (gftp_request * request, const char *str, size_t dest_len)
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
234 {
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
235 return (NULL);
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
236 }
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
237
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
238
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
239 char *
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
240 gftp_string_from_utf8 (gftp_request * request, int force_local, const char *str,
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
241 size_t dest_len)
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
242 {
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
243 return (NULL);
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
244 }
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
245
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
246
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
247 char *
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
248 gftp_filename_to_utf8 (gftp_request * request, const char *str, size_t dest_len)
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
249 {
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
250 return (NULL);
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
251 }
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
252
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
253
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
254 char *
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
255 gftp_filename_from_utf8 (gftp_request * request, int force_local,
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
256 const char *str, size_t dest_len)
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
257 {
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
258 return (NULL);
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
259 }
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
260
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
261 #endif
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
262
c7d7a081cd9c 2008-03-04 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
263