Hi all. I have write a patch for gFTP 2.0.14, which make gFTP process filenames in native encoding correctly, and I have tested it on my system with LC_CTYPE set to zh_CN.GBK. Ling Li 2003.07.16
*** /home/liling/src/gftp/gftp-2.0.14/lib/gftp.h Wed Dec 4 10:35:44 2002
--- /home/liling/src/gftp/gftp-2.0.14.patched/lib/gftp.h Tue Jul 15 21:15:01 2003
***************
*** 844,848 ****
--- 844,853 ----
void gftp_swap_socks ( gftp_request * dest,
gftp_request * source );
+ #if GLIB_MAJOR_VERSION > 1
+ char* gftp_locale_to_utf8 ( const char *from );
+ char* gftp_locale_from_utf8 ( const char *from );
+ #endif
+
#endif
*** /home/liling/src/gftp/gftp-2.0.14/lib/protocols.c Thu Dec 5 08:43:06 2002
--- /home/liling/src/gftp/gftp-2.0.14.patched/lib/protocols.c Wed Jul 16 00:52:02 2003
***************
*** 152,163 ****
gftp_get_file (gftp_request * request, const char *filename, int fd,
size_t startsize)
{
g_return_val_if_fail (request != NULL, -2);
request->cached = 0;
if (request->get_file == NULL)
return (-2);
! return (request->get_file (request, filename, fd, startsize));
}
--- 152,176 ----
gftp_get_file (gftp_request * request, const char *filename, int fd,
size_t startsize)
{
+ int ret;
+ #if GLIB_MAJOR_VERSION > 1
+ char *tempstr;
+ #endif
+
g_return_val_if_fail (request != NULL, -2);
request->cached = 0;
if (request->get_file == NULL)
return (-2);
! #if GLIB_MAJOR_VERSION > 1
! tempstr = gftp_locale_from_utf8(filename);
! ret = request->get_file (request, tempstr, fd, startsize);
! g_free(tempstr);
! #else
! ret = request->get_file (request, filename, fd, startsize);
! #endif
!
! return (ret);
}
***************
*** 165,176 ****
gftp_put_file (gftp_request * request, const char *filename, int fd,
size_t startsize, size_t totalsize)
{
g_return_val_if_fail (request != NULL, -2);
request->cached = 0;
if (request->put_file == NULL)
return (-2);
! return (request->put_file (request, filename, fd, startsize, totalsize));
}
--- 178,202 ----
gftp_put_file (gftp_request * request, const char *filename, int fd,
size_t startsize, size_t totalsize)
{
+ int ret;
+ #if GLIB_MAJOR_VERSION > 1
+ char *tempstr;
+ #endif
+
g_return_val_if_fail (request != NULL, -2);
request->cached = 0;
if (request->put_file == NULL)
return (-2);
! #if GLIB_MAJOR_VERSION > 1
! tempstr = gftp_locale_from_utf8(filename);
! ret = request->put_file (request, tempstr, fd, startsize, totalsize);
! g_free(tempstr);
! #else
! ret = request->put_file (request, filename, fd, startsize, totalsize);
! #endif
!
! return (ret);
}
***************
*** 181,186 ****
--- 207,218 ----
int tofd, size_t tosize)
{
long size;
+ long ret;
+ #if GLIB_MAJOR_VERSION > 1
+ char *lfromfile, *ltofile;
+ gsize bread, bwrite;
+ GError * error;
+ #endif
g_return_val_if_fail (fromreq != NULL, -2);
g_return_val_if_fail (fromfile != NULL, -2);
***************
*** 191,210 ****
{
if (fromreq->transfer_file == NULL)
return (-2);
! return (fromreq->transfer_file (fromreq, fromfile, fromsize, toreq,
! tofile, tosize));
}
fromreq->cached = 0;
toreq->cached = 0;
! if ((size = gftp_get_file (fromreq, fromfile, fromfd, tosize)) < 0)
return (-2);
-
if (gftp_put_file (toreq, tofile, tofd, tosize, size) != 0)
{
if (gftp_abort_transfer (fromreq) != 0)
gftp_end_transfer (fromreq);
-
return (-2);
}
--- 223,251 ----
{
if (fromreq->transfer_file == NULL)
return (-2);
! #if GLIB_MAJOR_VERSION > 1
! lfromfile = gftp_locale_from_utf8 (fromfile);
! ltofile = gftp_locale_from_utf8 (tofile);
! ret = fromreq->transfer_file (fromreq, lfromfile, fromsize, toreq,
! ltofile, tosize);
! g_free(lfromfile);
! g_free(ltofile);
! #else
! ret = fromreq->transfer_file (fromreq, fromfile, fromsize, toreq,
! tofile, tosize);
! #endif
! return (ret);
}
fromreq->cached = 0;
toreq->cached = 0;
! size = gftp_get_file (fromreq, fromfile, fromfd, tosize);
! if (size < 0)
return (-2);
if (gftp_put_file (toreq, tofile, tofd, tosize, size) != 0)
{
if (gftp_abort_transfer (fromreq) != 0)
gftp_end_transfer (fromreq);
return (-2);
}
***************
*** 286,295 ****
int
gftp_list_files (gftp_request * request)
{
! int fd;
g_return_val_if_fail (request != NULL, -2);
request->cached = 0;
if (request->use_cache && (fd = gftp_find_cache_entry (request)) > 0)
{
--- 327,343 ----
int
gftp_list_files (gftp_request * request)
{
! int fd, ret;
! #if GLIB_MAJOR_VERSION > 1
! char *tempstr;
! #endif
g_return_val_if_fail (request != NULL, -2);
+ #if GLIB_MAJOR_VERSION > 1
+ tempstr = request->directory;
+ request->directory = gftp_locale_from_utf8(request->directory);
+ #endif
request->cached = 0;
if (request->use_cache && (fd = gftp_find_cache_entry (request)) > 0)
{
***************
*** 299,304 ****
--- 347,356 ----
request->cachefd = fd;
request->cached = 1;
+ #if GLIB_MAJOR_VERSION > 1
+ g_free(request->directory);
+ request->directory = tempstr;
+ #endif
return (0);
}
else if (request->use_cache)
***************
*** 308,315 ****
}
if (request->list_files == NULL)
! return (-2);
! return (request->list_files (request));
}
--- 360,375 ----
}
if (request->list_files == NULL)
! ret = -2;
! else
! ret = request->list_files (request);
!
! #if GLIB_MAJOR_VERSION > 1
! g_free(request->directory);
! request->directory = tempstr;
! #endif
!
! return (ret);
}
***************
*** 340,358 ****
ret = request->get_next_file (request, fle, fd);
#if GLIB_MAJOR_VERSION > 1
! if (fle->file != NULL && !g_utf8_validate (fle->file, -1, NULL))
! {
! error = NULL;
! if ((tempstr = g_locale_to_utf8 (fle->file, -1, &bread,
! &bwrite, &error)) != NULL)
! {
! g_free (fle->file);
! fle->file = tempstr;
! }
! else
! g_warning ("Error when converting %s to UTF-8: %s\n", fle->file,
! error->message);
! }
#endif
if (ret >= 0 && !request->cached && request->cachefd > 0 &&
--- 400,410 ----
ret = request->get_next_file (request, fle, fd);
#if GLIB_MAJOR_VERSION > 1
! if (fle->file != NULL) {
! tempstr = gftp_locale_to_utf8(fle->file);
! g_free (fle->file);
! fle->file = tempstr;
! }
#endif
if (ret >= 0 && !request->cached && request->cachefd > 0 &&
***************
*** 556,565 ****
int
gftp_set_directory (gftp_request * request, const char *directory)
{
g_return_val_if_fail (request != NULL, -2);
g_return_val_if_fail (directory != NULL, -2);
-
if (request->sockfd <= 0 && !request->always_connected)
{
if (directory != request->directory)
--- 608,621 ----
int
gftp_set_directory (gftp_request * request, const char *directory)
{
+ int ret;
+ #if GLIB_MAJOR_VERSION > 1
+ char *tempstr;
+ #endif
+
g_return_val_if_fail (request != NULL, -2);
g_return_val_if_fail (directory != NULL, -2);
if (request->sockfd <= 0 && !request->always_connected)
{
if (directory != request->directory)
***************
*** 569,579 ****
request->directory = g_malloc (strlen (directory) + 1);
strcpy (request->directory, directory);
}
! return (0);
}
else if (request->chdir == NULL)
! return (-2);
! return (request->chdir (request, directory));
}
--- 625,650 ----
request->directory = g_malloc (strlen (directory) + 1);
strcpy (request->directory, directory);
}
! ret = 0;
}
else if (request->chdir == NULL)
! ret = -2;
! else
! {
! #if GLIB_MAJOR_VERSION > 1
! tempstr = gftp_locale_from_utf8 (directory);
! g_free (request->directory);
! request->directory = tempstr;
! ret = request->chdir (request, request->directory);
! tempstr = gftp_locale_to_utf8 (request->directory);
! g_free (request->directory);
! request->directory = tempstr;
! #else
! ret = request->chdir (request, directory);
! #endif
! }
!
! return (ret);
}
***************
*** 650,682 ****
int
gftp_remove_directory (gftp_request * request, const char *directory)
{
g_return_val_if_fail (request != NULL, -2);
if (request->rmdir == NULL)
return (-2);
! return (request->rmdir (request, directory));
}
int
gftp_remove_file (gftp_request * request, const char *file)
{
g_return_val_if_fail (request != NULL, -2);
if (request->rmfile == NULL)
return (-2);
! return (request->rmfile (request, file));
}
int
gftp_make_directory (gftp_request * request, const char *directory)
{
g_return_val_if_fail (request != NULL, -2);
if (request->mkdir == NULL)
return (-2);
! return (request->mkdir (request, directory));
}
--- 721,795 ----
int
gftp_remove_directory (gftp_request * request, const char *directory)
{
+ int ret;
+ #if GLIB_MAJOR_VERSION > 1
+ char* tempstr;
+ #endif
+
g_return_val_if_fail (request != NULL, -2);
if (request->rmdir == NULL)
return (-2);
!
! #if GLIB_MAJOR_VERSION > 1
! tempstr = gftp_locale_from_utf8(directory);
! ret = request->rmdir (request, tempstr);
! g_free(tempstr);
! #else
! ret = request->rmdir (request, directory);
! #endif
!
! return (ret);
}
int
gftp_remove_file (gftp_request * request, const char *file)
{
+ int ret;
+ #if GLIB_MAJOR_VERSION > 1
+ char* tempstr;
+ #endif
+
g_return_val_if_fail (request != NULL, -2);
if (request->rmfile == NULL)
return (-2);
!
! #if GLIB_MAJOR_VERSION > 1
! tempstr = gftp_locale_from_utf8(file);
! ret = request->rmfile (request, tempstr);
! g_free(tempstr);
! #else
! ret = request->rmfile (request, file);
! #endif
!
! return (ret);
}
int
gftp_make_directory (gftp_request * request, const char *directory)
{
+ int ret;
+ #if GLIB_MAJOR_VERSION > 1
+ char* tempstr;
+ #endif
+
g_return_val_if_fail (request != NULL, -2);
if (request->mkdir == NULL)
return (-2);
!
! #if GLIB_MAJOR_VERSION > 1
! tempstr = gftp_locale_from_utf8(directory);
! ret = request->mkdir (request, tempstr);
! g_free(tempstr);
! #else
! ret = request->mkdir (request, directory);
! #endif
!
! return (ret);
}
***************
*** 684,716 ****
gftp_rename_file (gftp_request * request, const char *oldname,
const char *newname)
{
g_return_val_if_fail (request != NULL, -2);
if (request->rename == NULL)
return (-2);
! return (request->rename (request, oldname, newname));
}
int
gftp_chmod (gftp_request * request, const char *file, int mode)
{
g_return_val_if_fail (request != NULL, -2);
if (request->chmod == NULL)
return (-2);
! return (request->chmod (request, file, mode));
}
int
gftp_set_file_time (gftp_request * request, const char *file, time_t datetime)
{
g_return_val_if_fail (request != NULL, -2);
if (request->set_file_time == NULL)
return (-2);
! return (request->set_file_time (request, file, datetime));
}
--- 797,872 ----
gftp_rename_file (gftp_request * request, const char *oldname,
const char *newname)
{
+ int ret;
+ #if GLIB_MAJOR_VERSION > 1
+ char *tempstr, *tempstr1;
+ #endif
+
g_return_val_if_fail (request != NULL, -2);
if (request->rename == NULL)
return (-2);
!
! #if GLIB_MAJOR_VERSION > 1
! tempstr = gftp_locale_from_utf8(oldname);
! tempstr1 = gftp_locale_from_utf8(newname);
! ret = request->rename (request, tempstr, tempstr1);
! g_free(tempstr);
! g_free(tempstr1);
! #else
! ret = request->rename (request, oldname, newname);
! #endif
!
! return (ret);
}
int
gftp_chmod (gftp_request * request, const char *file, int mode)
{
+ int ret;
+ #if GLIB_MAJOR_VERSION > 1
+ char *tempstr;
+ #endif
+
g_return_val_if_fail (request != NULL, -2);
if (request->chmod == NULL)
return (-2);
!
! #if GLIB_MAJOR_VERSION > 1
! tempstr = gftp_locale_from_utf8(file);
! ret = request->chmod (request, tempstr, mode);
! g_free(tempstr);
! #else
! ret = request->chmod (request, file, mode);
! #endif
!
! return (ret);
}
int
gftp_set_file_time (gftp_request * request, const char *file, time_t datetime)
{
+ int ret;
+ #if GLIB_MAJOR_VERSION > 1
+ char *tempstr;
+ #endif
+
g_return_val_if_fail (request != NULL, -2);
if (request->set_file_time == NULL)
return (-2);
! #if GLIB_MAJOR_VERSION > 1
! tempstr = gftp_locale_from_utf8(file);
! ret = request->set_file_time (request, tempstr, datetime);
! g_free(tempstr);
! #else
! ret = request->set_file_time (request, file, datetime);
! #endif
!
! return (ret);
}
***************
*** 761,771 ****
off_t
gftp_get_file_size (gftp_request * request, const char *filename)
{
g_return_val_if_fail (request != NULL, 0);
if (request->get_file_size == NULL)
return (0);
! return (request->get_file_size (request, filename));
}
--- 917,941 ----
off_t
gftp_get_file_size (gftp_request * request, const char *filename)
{
+ int ret;
+ #if GLIB_MAJOR_VERSION > 1
+ char *tempstr;
+ #endif
+
g_return_val_if_fail (request != NULL, 0);
if (request->get_file_size == NULL)
return (0);
!
! #if GLIB_MAJOR_VERSION > 1
! tempstr = gftp_locale_from_utf8(filename);
! ret = request->get_file_size (request, tempstr);
! g_free(tempstr);
! #else
! ret = request->get_file_size (request, filename);
! #endif
!
! return (ret);
}
***************
*** 1481,1486 ****
--- 1651,1657 ----
unsigned long *newsize;
GHashTable * dirhash;
gftp_file * curfle;
+ int set_dir_ret;
g_return_val_if_fail (transfer != NULL, -1);
g_return_val_if_fail (transfer->fromreq != NULL, -1);
***************
*** 1530,1543 ****
transfer->toreq->directory = curfle->destfile;
}
forcecd = 1;
! if (gftp_set_directory (transfer->fromreq,
! transfer->fromreq->directory) == 0)
{
if (curfle->startsize > 0 && transfer->toreq)
{
remotechanged = 1;
! if (gftp_set_directory (transfer->toreq,
! transfer->toreq->directory) != 0)
curfle->startsize = 0;
}
--- 1701,1719 ----
transfer->toreq->directory = curfle->destfile;
}
forcecd = 1;
! set_dir_ret = gftp_set_directory (transfer->fromreq,
! transfer->fromreq->directory);
! curfle->file = transfer->fromreq->directory;
! if (set_dir_ret == 0)
{
if (curfle->startsize > 0 && transfer->toreq)
{
remotechanged = 1;
! set_dir_ret =
! gftp_set_directory (transfer->toreq,
! transfer->toreq->directory);
! curfle->destfile = transfer->toreq->directory;
! if (set_dir_ret != 0)
curfle->startsize = 0;
}
***************
*** 2194,2196 ****
--- 2370,2419 ----
dest->swap_socks (dest, source);
}
+ #if GLIB_MAJOR_VERSION > 1
+ char*
+ gftp_locale_to_utf8(const char *from)
+ {
+ char *result = NULL;
+ gsize bread, bwrite;
+ GError * error;
+
+ if (from != NULL)
+ {
+ error = NULL;
+ if ((result = g_locale_to_utf8 (from, -1, &bread,
+ &bwrite, &error)) == NULL)
+ g_warning ("Error when converting %s from UTF-8: %s\n", from,
+ error->message);
+ }
+ else
+ {
+ result = g_memdup(from, (strlen (from) + 1));
+ }
+
+ return result;
+ }
+
+ char*
+ gftp_locale_from_utf8(const char *from)
+ {
+ char *result;
+ gsize bread, bwrite;
+ GError * error;
+
+ if (from != NULL && g_utf8_validate (from, -1, NULL))
+ {
+ error = NULL;
+ if ((result = g_locale_from_utf8 (from, -1, &bread,
+ &bwrite, &error)) == NULL)
+ g_warning ("Error when converting %s from UTF-8: %s\n", from,
+ error->message);
+ }
+ else
+ {
+ result = g_memdup(from, (strlen (from) + 1));
+ }
+
+ return result;
+ }
+ #endif
*** /home/liling/src/gftp/gftp-2.0.14/src/gtk/transfer.c Thu Dec 5 08:43:07 2002
--- /home/liling/src/gftp/gftp-2.0.14.patched/src/gtk/transfer.c Wed Jul 16 01:02:10 2003
***************
*** 768,774 ****
--- 768,780 ----
{
if (transfer->toreq->mkdir != NULL)
{
+ #if GLIB_MAJOR_VERSION > 1
+ tempstr = gftp_locale_from_utf8(curfle->destfile);
+ transfer->toreq->mkdir (transfer->toreq, tempstr);
+ g_free(tempstr);
+ #else
transfer->toreq->mkdir (transfer->toreq, curfle->destfile);
+ #endif
if (!GFTP_IS_CONNECTED (transfer->toreq))
break;
}
*** /home/liling/src/gftp/gftp-2.0.14/src/gtk/view_dialog.c Thu Nov 21 08:33:51 2002
--- /home/liling/src/gftp/gftp-2.0.14.patched/src/gtk/view_dialog.c Tue Jul 15 21:15:01 2003
***************
*** 29,34 ****
--- 29,37 ----
gftp_window_data * fromwdata, * towdata;
gftp_file * new_fle;
int num;
+ #if GLIB_MAJOR_VERSION > 1
+ char * tempstr;
+ #endif
fromwdata = data;
towdata = fromwdata == &window1 ? &window2 : &window1;
***************
*** 49,55 ****
}
if (strcmp (GFTP_GET_PROTOCOL_NAME (fromwdata->request), "Local") == 0)
! view_file (curfle->file, 0, 1, 0, 1, 1, NULL, fromwdata);
else
{
new_fle = copy_fdata (curfle);
--- 52,66 ----
}
if (strcmp (GFTP_GET_PROTOCOL_NAME (fromwdata->request), "Local") == 0)
! {
! #if GLIB_MAJOR_VERSION > 1
! tempstr = gftp_locale_from_utf8 (curfle->file);
! view_file (tempstr, 0, 1, 0, 1, 1, NULL, fromwdata);
! g_free (tempstr);
! #else
! view_file (curfle->file, 0, 1, 0, 1, 1, NULL, fromwdata);
! #endif
! }
else
{
new_fle = copy_fdata (curfle);
***************
*** 84,89 ****
--- 95,103 ----
GList * templist, * filelist, * newfile;
gftp_file * new_fle;
int num;
+ #if GLIB_MAJOR_VERSION > 1
+ char * tempstr;
+ #endif
fromwdata = data;
towdata = fromwdata == &window1 ? &window2 : &window1;
***************
*** 111,117 ****
}
if (strcmp (GFTP_GET_PROTOCOL_NAME (fromwdata->request), "Local") == 0)
! view_file (curfle->file, 0, 0, 0, 1, 1, NULL, fromwdata);
else
{
new_fle = copy_fdata (curfle);
--- 125,139 ----
}
if (strcmp (GFTP_GET_PROTOCOL_NAME (fromwdata->request), "Local") == 0)
! {
! #if GLIB_MAJOR_VERSION > 1
! tempstr = gftp_locale_from_utf8 (curfle->file);
! view_file (tempstr, 0, 0, 0, 1, 1, NULL, fromwdata);
! g_free (tempstr);
! #else
! view_file (curfle->file, 0, 0, 0, 1, 1, NULL, fromwdata);
! #endif
! }
else
{
new_fle = copy_fdata (curfle);
*** /home/liling/src/gftp/gftp-2.0.14/src/text/gftp-text.c Wed Nov 27 22:29:56 2002
--- /home/liling/src/gftp/gftp-2.0.14.patched/src/text/gftp-text.c Tue Jul 15 21:15:01 2003
***************
*** 389,401 ****
--- 389,411 ----
int
gftp_text_pwd (gftp_request * request, char *command, gpointer *data)
{
+ #if GLIB_MAJOR_VERSION > 1
+ char *tempstr;
+ #endif
+
if (!GFTP_IS_CONNECTED (request))
{
gftp_text_log (gftp_logging_error, NULL,
_("Error: Not connected to a remote site\n"));
return (1);
}
+ #if GLIB_MAJOR_VERSION > 1
+ tempstr = gftp_locale_from_utf8(request->directory);
+ gftp_text_log (gftp_logging_misc, NULL, "%s\n", tempstr);
+ g_free(tempstr);
+ #else
gftp_text_log (gftp_logging_misc, NULL, "%s\n", request->directory);
+ #endif
return (1);
}
***************
*** 458,463 ****
--- 468,477 ----
int
gftp_text_rmdir (gftp_request * request, char *command, gpointer *data)
{
+ #if GLIB_MAJOR_VERSION > 1
+ char * tempstr;
+ #endif
+
if (!GFTP_IS_CONNECTED (request))
{
gftp_text_log (gftp_logging_error, NULL,
***************
*** 471,477 ****
--- 485,497 ----
}
else
{
+ #if GLIB_MAJOR_VERSION > 1
+ tempstr = gftp_locale_to_utf8(command);
+ gftp_remove_directory (request, tempstr);
+ g_free(tempstr);
+ #else
gftp_remove_directory (request, command);
+ #endif
}
return (1);
}
***************
*** 480,485 ****
--- 500,508 ----
int
gftp_text_delete (gftp_request * request, char *command, gpointer *data)
{
+ #if GLIB_MAJOR_VERSION > 1
+ char * tempstr;
+ #endif
if (!GFTP_IS_CONNECTED (request))
{
gftp_text_log (gftp_logging_error, NULL,
***************
*** 493,499 ****
--- 516,528 ----
}
else
{
+ #if GLIB_MAJOR_VERSION > 1
+ tempstr = gftp_locale_to_utf8(command);
+ gftp_remove_file (request, tempstr);
+ g_free(tempstr);
+ #else
gftp_remove_file (request, command);
+ #endif
}
return (1);
}
***************
*** 503,508 ****
--- 532,540 ----
gftp_text_rename (gftp_request * request, char *command, gpointer *data)
{
char *pos;
+ #if GLIB_MAJOR_VERSION > 1
+ char * tempstr;
+ #endif
if (!GFTP_IS_CONNECTED (request))
{
***************
*** 521,527 ****
--- 553,565 ----
}
else
{
+ #if GLIB_MAJOR_VERSION > 1
+ tempstr = gftp_locale_to_utf8(command);
+ gftp_rename_file (request, tempstr, pos);
+ g_free(tempstr);
+ #else
gftp_rename_file (request, command, pos);
+ #endif
}
return (1);
}
***************
*** 531,536 ****
--- 569,577 ----
gftp_text_chmod (gftp_request * request, char *command, gpointer *data)
{
char *pos;
+ #if GLIB_MAJOR_VERSION > 1
+ char * tempstr;
+ #endif
if (!GFTP_IS_CONNECTED (request))
{
***************
*** 549,555 ****
--- 590,602 ----
}
else
{
+ #if GLIB_MAJOR_VERSION > 1
+ tempstr = gftp_locale_to_utf8(command);
+ gftp_chmod (request, pos, strtol (tempstr, NULL, 10));
+ g_free(tempstr);
+ #else
gftp_chmod (request, pos, strtol (command, NULL, 10));
+ #endif
}
return (1);
}
***************
*** 563,568 ****
--- 610,620 ----
int sortcol, sortasds;
gftp_file * fle;
time_t curtime;
+ #if GLIB_MAJOR_VERSION > 1
+ gsize bread, bwrite;
+ char *tempstr;
+ GError * error;
+ #endif
time (&curtime);
if (!GFTP_IS_CONNECTED (request))
***************
*** 618,623 ****
--- 670,681 ----
fle = templist->data;
+ #if GLIB_MAJOR_VERSION > 1
+ tempstr = gftp_locale_from_utf8 (fle->file);
+ g_free (fle->file);
+ fle->file = tempstr;
+ #endif
+
if (*fle->attribs == 'd')
color = COLOR_BLUE;
else if (*fle->attribs == 'l')
***************
*** 696,701 ****
--- 754,762 ----
{
gftp_transfer * transfer;
gftp_file * fle;
+ #if GLIB_MAJOR_VERSION > 1
+ char * tempstr;
+ #endif
if (!GFTP_IS_CONNECTED (gftp_text_remreq))
{
***************
*** 723,729 ****
--- 784,795 ----
return (1);
}
fle = g_malloc0 (sizeof (*fle));
+ #if GLIB_MAJOR_VERSION > 1
+ tempstr = gftp_locale_to_utf8(command);
+ while (gftp_get_next_file (transfer->fromreq, tempstr, fle) > 0)
+ #else
while (gftp_get_next_file (transfer->fromreq, command, fle) > 0)
+ #endif
{
if (strcmp (fle->file, ".") == 0 || strcmp (fle->file, "..") == 0)
{
***************
*** 735,740 ****
--- 801,809 ----
}
g_free (fle);
gftp_end_transfer (transfer->fromreq);
+ #if GLIB_MAJOR_VERSION > 1
+ g_free(tempstr);
+ #endif
if (transfer->files == NULL)
{
***************
*** 769,774 ****
--- 838,846 ----
{
gftp_transfer * transfer;
gftp_file * fle;
+ #if GLIB_MAJOR_VERSION > 1
+ char * tempstr;
+ #endif
if (!GFTP_IS_CONNECTED (gftp_text_remreq))
{
***************
*** 795,801 ****
--- 867,878 ----
return (1);
}
fle = g_malloc (sizeof (*fle));
+ #if GLIB_MAJOR_VERSION > 1
+ tempstr = gftp_locale_to_utf8(command);
+ while (gftp_get_next_file (transfer->fromreq, tempstr, fle) > 0)
+ #else
while (gftp_get_next_file (transfer->fromreq, command, fle) > 0)
+ #endif
{
if (strcmp (fle->file, ".") == 0 || strcmp (fle->file, "..") == 0)
{
***************
*** 807,812 ****
--- 884,892 ----
}
g_free (fle);
gftp_end_transfer (transfer->fromreq);
+ #if GLIB_MAJOR_VERSION > 1
+ g_free(tempstr);
+ #endif
if (transfer->files == NULL)
{
Attachment:
pgp00000.pgp
Description: PGP signature