Mercurial > gftp.yaz
changeset 843:32dbed7e0dc4
2006-11-2 Brian Masney <masneyb@gftp.org>
* lib/local.c lib/misc.c lib/sshv2.c - more improvements to make sure
that the filename is encoded in the proper character set.
author | masneyb |
---|---|
date | Fri, 03 Nov 2006 02:35:47 +0000 |
parents | 0d6fba16c7db |
children | 1ece208d1357 |
files | ChangeLog lib/local.c lib/misc.c lib/sshv2.c |
diffstat | 4 files changed, 50 insertions(+), 34 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog Fri Nov 03 02:01:16 2006 +0000 +++ b/ChangeLog Fri Nov 03 02:35:47 2006 +0000 @@ -1,4 +1,7 @@ 2006-11-2 Brian Masney <masneyb@gftp.org> + * lib/local.c lib/misc.c lib/sshv2.c - more improvements to make sure + that the filename is encoded in the proper character set. + * lib/gftp.h lib/protocols.c - added _do_convert_string(), which is the common code that was in gftp_string_to_utf8() and gftp_string_from_utf8(). @@ -3677,7 +3680,7 @@ * cvsclean - added this script - * *.[ch] - added $Id: ChangeLog,v 1.492 2006/11/03 02:01:16 masneyb Exp $ tags + * *.[ch] - added $Id: ChangeLog,v 1.493 2006/11/03 02:35:46 masneyb Exp $ tags * debian/* - updated files from Debian maintainer
--- a/lib/local.c Fri Nov 03 02:01:16 2006 +0000 +++ b/lib/local.c Fri Nov 03 02:35:47 2006 +0000 @@ -69,7 +69,7 @@ return (GFTP_ERETRYABLE); } - utf8 = gftp_string_from_utf8 (request, tempstr, &destlen); + utf8 = gftp_string_to_utf8 (request, tempstr, &destlen); if (utf8 != NULL) request->directory = utf8; else @@ -397,10 +397,10 @@ static int local_list_files (gftp_request * request) { - char *dir, *tempstr, *utf8; local_protocol_data *lpd; - int freeit, ret; + char *dir, *utf8; size_t destlen; + int ret; g_return_val_if_fail (request != NULL, GFTP_EFATAL); g_return_val_if_fail (request->directory != NULL, GFTP_EFATAL); @@ -410,37 +410,32 @@ g_return_val_if_fail (lpd != NULL, GFTP_EFATAL); - utf8 = gftp_string_from_utf8 (request, request->directory, &destlen); - dir = utf8 != NULL ? utf8 : request->directory; + if (request->directory[strlen (request->directory) - 1] != '/') + dir = g_strconcat (request->directory, "/", NULL); + else + dir = request->directory; - if (dir[strlen (dir) - 1] != '/') + utf8 = gftp_string_from_utf8 (request, dir, &destlen); + if (utf8 != NULL) { - tempstr = g_strconcat (dir, "/", NULL); - freeit = 1; + lpd->dir = opendir (utf8); + g_free (utf8); } else - { - tempstr = dir; - freeit = 0; - } + lpd->dir = opendir (dir); - if ((lpd->dir = opendir (tempstr)) == NULL) + if (dir != request->directory) + g_free (dir); + + if (lpd->dir == NULL) { request->logging_function (gftp_logging_error, request, _("Could not get local directory listing %s: %s\n"), - tempstr, g_strerror (errno)); - ret = GFTP_ERETRYABLE; + request->directory, g_strerror (errno)); + return (GFTP_ERETRYABLE); } else - ret = 0; - - if (freeit) - g_free (tempstr); - - if (utf8 != NULL) - g_free (utf8); - - return (ret); + return (0); }
--- a/lib/misc.c Fri Nov 03 02:01:16 2006 +0000 +++ b/lib/misc.c Fri Nov 03 02:35:47 2006 +0000 @@ -874,6 +874,7 @@ char *file_prefixstr, char *file_suffixstr) { char *tempstr1, *tempstr2, *ret, tstr[50], *attribs, *utf8; + int old_encoding; size_t destlen; struct tm *lt; time_t t; @@ -901,11 +902,19 @@ if (file_suffixstr == NULL) file_suffixstr = ""; + old_encoding = request->use_local_encoding; utf8 = gftp_string_from_utf8 (request, fle->file, &destlen); - ret = g_strdup_printf ("%s %s %s %s%s%s", tempstr1, tempstr2, tstr, - file_prefixstr, - utf8 != NULL ? utf8: fle->file, - file_suffixstr); + request->use_local_encoding = old_encoding; + + if (utf8 != NULL) + { + ret = g_strdup_printf ("%s %s %s %s%s%s", tempstr1, tempstr2, tstr, + file_prefixstr, utf8, file_suffixstr); + g_free (utf8); + } + else + ret = g_strdup_printf ("%s %s %s %s%s%s", tempstr1, tempstr2, tstr, + file_prefixstr, fle->file, file_suffixstr); g_free (tempstr1); g_free (tempstr2);
--- a/lib/sshv2.c Fri Nov 03 02:01:16 2006 +0000 +++ b/lib/sshv2.c Fri Nov 03 02:35:47 2006 +0000 @@ -1025,9 +1025,9 @@ static int sshv2_getcwd (gftp_request * request) { + char *tempstr, *dir, *utf8; sshv2_message message; - char *tempstr, *dir; - size_t msglen; + size_t len; int ret; g_return_val_if_fail (request != NULL, GFTP_EFATAL); @@ -1038,8 +1038,8 @@ else dir = request->directory; - tempstr = sshv2_initialize_buffer_with_i18n_string (request, dir, &msglen); - ret = sshv2_send_command (request, SSH_FXP_REALPATH, tempstr, msglen); + tempstr = sshv2_initialize_buffer_with_i18n_string (request, dir, &len); + ret = sshv2_send_command (request, SSH_FXP_REALPATH, tempstr, len); g_free (tempstr); if (ret < 0) return (ret); @@ -1059,9 +1059,18 @@ if ((ret = sshv2_buffer_get_int32 (request, &message, 1, 1, NULL)) < 0) return (ret); - if ((request->directory = sshv2_buffer_get_string (request, &message, 1)) == NULL) + if ((dir = sshv2_buffer_get_string (request, &message, 1)) == NULL) return (GFTP_EFATAL); + utf8 = gftp_string_to_utf8 (request, dir, &len); + if (utf8 != NULL) + { + request->directory = utf8; + g_free (dir); + } + else + request->directory = dir; + sshv2_message_free (&message); return (0); }