# HG changeset patch # User masneyb # Date 1162522971 0 # Node ID 8263cc35c027305aeb1aad305ec735d0079ef1f9 # Parent 1ece208d1357ddd63c65592e12bcae29581e0696 2006-11-2 Brian Masney * lib/gftp.h lib/local.c lib/misc.c lib/protocols.c lib/rfc959.c lib/sshv2.c - added gftp_filename_to_utf8() and gftp_filename_from_utf8(). (gftp_string_from_utf8) - added argument that will force the local encoding to be used. diff -r 1ece208d1357 -r 8263cc35c027 ChangeLog --- a/ChangeLog Fri Nov 03 02:37:09 2006 +0000 +++ b/ChangeLog Fri Nov 03 03:02:51 2006 +0000 @@ -1,4 +1,10 @@ 2006-11-2 Brian Masney + * lib/gftp.h lib/local.c lib/misc.c lib/protocols.c lib/rfc959.c + lib/sshv2.c - added gftp_filename_to_utf8() and + gftp_filename_from_utf8(). + (gftp_string_from_utf8) - added argument that will force the local + encoding to be used. + * src/gtk/bookmarks.c - removed UTF-8 check since the string is already in that format @@ -3683,7 +3689,7 @@ * cvsclean - added this script - * *.[ch] - added $Id: ChangeLog,v 1.494 2006/11/03 02:37:09 masneyb Exp $ tags + * *.[ch] - added $Id: ChangeLog,v 1.495 2006/11/03 03:02:47 masneyb Exp $ tags * debian/* - updated files from Debian maintainer diff -r 1ece208d1357 -r 8263cc35c027 lib/gftp.h --- a/lib/gftp.h Fri Nov 03 02:37:09 2006 +0000 +++ b/lib/gftp.h Fri Nov 03 03:02:51 2006 +0000 @@ -912,6 +912,15 @@ size_t *dest_len ); /*@null@*/ char * gftp_string_from_utf8 ( gftp_request * request, + int force_local, + const char *str, + size_t *dest_len ); + +/*@null@*/ char * gftp_filename_to_utf8 ( gftp_request * request, + const char *str, + size_t *dest_len ); + +/*@null@*/ char * gftp_filename_from_utf8 ( gftp_request * request, const char *str, size_t *dest_len ); diff -r 1ece208d1357 -r 8263cc35c027 lib/local.c --- a/lib/local.c Fri Nov 03 02:37:09 2006 +0000 +++ b/lib/local.c Fri Nov 03 03:02:51 2006 +0000 @@ -69,7 +69,7 @@ return (GFTP_ERETRYABLE); } - utf8 = gftp_string_to_utf8 (request, tempstr, &destlen); + utf8 = gftp_filename_to_utf8 (request, tempstr, &destlen); if (utf8 != NULL) request->directory = utf8; else @@ -90,7 +90,7 @@ g_return_val_if_fail (request->protonum == GFTP_LOCAL_NUM, GFTP_EFATAL); g_return_val_if_fail (directory != NULL, GFTP_EFATAL); - utf8 = gftp_string_from_utf8 (request, directory, &destlen); + utf8 = gftp_filename_from_utf8 (request, directory, &destlen); if (utf8 != NULL) { ret = chdir (utf8); @@ -168,7 +168,7 @@ flags |= O_LARGEFILE; #endif - utf8 = gftp_string_from_utf8 (request, filename, &destlen); + utf8 = gftp_filename_from_utf8 (request, filename, &destlen); if (utf8 != NULL) { request->datafd = gftp_fd_open (request, utf8, flags, 0); @@ -227,7 +227,7 @@ #endif perms = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH; - utf8 = gftp_string_from_utf8 (request, filename, &destlen); + utf8 = gftp_filename_from_utf8 (request, filename, &destlen); if (utf8 != NULL) { request->datafd = gftp_fd_open (request, utf8, flags, perms); @@ -298,7 +298,7 @@ char *utf8; int ret; - utf8 = gftp_string_from_utf8 (request, filename, &destlen); + utf8 = gftp_filename_from_utf8 (request, filename, &destlen); if (utf8 != NULL) { ret = stat (utf8, &st); @@ -415,7 +415,7 @@ else dir = request->directory; - utf8 = gftp_string_from_utf8 (request, dir, &destlen); + utf8 = gftp_filename_from_utf8 (request, dir, &destlen); if (utf8 != NULL) { lpd->dir = opendir (utf8); @@ -447,7 +447,7 @@ char *utf8; int ret; - utf8 = gftp_string_from_utf8 (request, filename, &destlen); + utf8 = gftp_filename_from_utf8 (request, filename, &destlen); if (utf8 != NULL) { ret = stat (utf8, &st); @@ -474,7 +474,7 @@ g_return_val_if_fail (request->protonum == GFTP_LOCAL_NUM, GFTP_EFATAL); g_return_val_if_fail (directory != NULL, GFTP_EFATAL); - utf8 = gftp_string_from_utf8 (request, directory, &destlen); + utf8 = gftp_filename_from_utf8 (request, directory, &destlen); if (utf8 != NULL) { ret = rmdir (utf8); @@ -510,7 +510,7 @@ g_return_val_if_fail (request->protonum == GFTP_LOCAL_NUM, GFTP_EFATAL); g_return_val_if_fail (file != NULL, GFTP_EFATAL); - utf8 = gftp_string_from_utf8 (request, file, &destlen); + utf8 = gftp_filename_from_utf8 (request, file, &destlen); if (utf8 != NULL) { ret = unlink (utf8); @@ -548,7 +548,7 @@ perms = S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH; - utf8 = gftp_string_from_utf8 (request, directory, &destlen); + utf8 = gftp_filename_from_utf8 (request, directory, &destlen); if (utf8 != NULL) { ret = mkdir (utf8, perms); @@ -588,9 +588,9 @@ g_return_val_if_fail (oldname != NULL, GFTP_EFATAL); g_return_val_if_fail (newname != NULL, GFTP_EFATAL); - old_utf8 = gftp_string_from_utf8 (request, oldname, &destlen); + old_utf8 = gftp_filename_from_utf8 (request, oldname, &destlen); conv_oldname = old_utf8 != NULL ? old_utf8 : oldname; - new_utf8 = gftp_string_from_utf8 (request, newname, &destlen); + new_utf8 = gftp_filename_from_utf8 (request, newname, &destlen); conv_newname = new_utf8 != NULL ? new_utf8 : newname; if (rename (conv_oldname, conv_newname) == 0) @@ -628,7 +628,7 @@ g_return_val_if_fail (request->protonum == GFTP_LOCAL_NUM, GFTP_EFATAL); g_return_val_if_fail (file != NULL, GFTP_EFATAL); - utf8 = gftp_string_from_utf8 (request, file, &destlen); + utf8 = gftp_filename_from_utf8 (request, file, &destlen); if (utf8 != NULL) { ret = chmod (utf8, mode); @@ -670,7 +670,7 @@ time_buf.modtime = datetime; time_buf.actime = datetime; - utf8 = gftp_string_from_utf8 (request, file, &destlen); + utf8 = gftp_filename_from_utf8 (request, file, &destlen); if (utf8 != NULL) { ret = utime (utf8, &time_buf); diff -r 1ece208d1357 -r 8263cc35c027 lib/misc.c --- a/lib/misc.c Fri Nov 03 02:37:09 2006 +0000 +++ b/lib/misc.c Fri Nov 03 03:02:51 2006 +0000 @@ -874,7 +874,6 @@ 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; @@ -902,10 +901,7 @@ if (file_suffixstr == NULL) file_suffixstr = ""; - old_encoding = request->use_local_encoding; - utf8 = gftp_string_from_utf8 (request, fle->file, &destlen); - request->use_local_encoding = old_encoding; - + utf8 = gftp_string_from_utf8 (request, 1, fle->file, &destlen); if (utf8 != NULL) { ret = g_strdup_printf ("%s %s %s %s%s%s", tempstr1, tempstr2, tstr, diff -r 1ece208d1357 -r 8263cc35c027 lib/protocols.c --- a/lib/protocols.c Fri Nov 03 02:37:09 2006 +0000 +++ b/lib/protocols.c Fri Nov 03 03:02:51 2006 +0000 @@ -464,8 +464,8 @@ /*@null@*/ char * -_do_convert_string (gftp_request * request, const char *str, - size_t *dest_len, int from_utf8) +_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; GError * error; @@ -479,12 +479,23 @@ error = NULL; gftp_lookup_request_option (request, "remote_charsets", &remote_charsets); - if (*remote_charsets == '\0' || request->use_local_encoding) + if (*remote_charsets == '\0' || request->use_local_encoding || + force_local == 1) { if (from_utf8) - ret = g_locale_from_utf8 (str, -1, &bread, dest_len, &error); + { + if (is_filename) + ret = g_filename_from_utf8 (str, -1, &bread, dest_len, &error); + else + ret = g_locale_from_utf8 (str, -1, &bread, dest_len, &error); + } else - ret = g_locale_to_utf8 (str, -1, &bread, dest_len, &error); + { + if (is_filename) + ret = g_filename_to_utf8 (str, -1, &bread, dest_len, &error); + else + ret = g_locale_to_utf8 (str, -1, &bread, dest_len, &error); + } if (ret == NULL) _do_show_iconv_error (str, request->iconv_charset, from_utf8, error); @@ -540,18 +551,34 @@ return (NULL); } -/*@null@*/ char * +char * gftp_string_to_utf8 (gftp_request * request, const char *str, size_t *dest_len) { - return (_do_convert_string (request, str, dest_len, 0)); + return (_do_convert_string (request, 0, 0, str, dest_len, 0)); } char * -gftp_string_from_utf8 (gftp_request * request, const char *str, +gftp_string_from_utf8 (gftp_request * request, int force_local, const char *str, size_t *dest_len) { - return (_do_convert_string (request, str, dest_len, 1)); + return (_do_convert_string (request, 0, force_local, str, dest_len, 1)); +} + + +char * +gftp_filename_to_utf8 (gftp_request * request, const char *str, + size_t *dest_len) +{ + return (_do_convert_string (request, 1, 0, str, dest_len, 0)); +} + + +char * +gftp_filename_from_utf8 (gftp_request * request, const char *str, + size_t *dest_len) +{ + return (_do_convert_string (request, 1, 0, str, dest_len, 1)); } #else @@ -564,7 +591,23 @@ char * -gftp_string_from_utf8 (gftp_request * request, const char *str, size_t dest_len) +gftp_string_from_utf8 (gftp_request * request, int force_local, const char *str, + size_t dest_len) +{ + return (NULL); +} + + +char * +gftp_filename_to_utf8 (gftp_request * request, const char *str, size_t dest_len) +{ + return (NULL); +} + + +char * +gftp_filename_from_utf8 (gftp_request * request, int force_local, + const char *str, size_t dest_len) { return (NULL); } @@ -618,7 +661,7 @@ if (ret >= 0 && fle->file != NULL) { - utf8 = gftp_string_to_utf8 (request, fle->file, &destlen); + utf8 = gftp_filename_to_utf8 (request, fle->file, &destlen); if (utf8 != NULL) { tmpfile = fle->file; diff -r 1ece208d1357 -r 8263cc35c027 lib/rfc959.c --- a/lib/rfc959.c Fri Nov 03 02:37:09 2006 +0000 +++ b/lib/rfc959.c Fri Nov 03 03:02:51 2006 +0000 @@ -203,7 +203,7 @@ if (argument != NULL) { - utf8 = gftp_string_from_utf8 (request, argument, &destlen); + utf8 = gftp_filename_from_utf8 (request, argument, &destlen); if (utf8 != NULL) { tempstr = g_strconcat (command, " ", utf8, "\r\n", NULL); @@ -320,7 +320,7 @@ } else { - utf8 = gftp_string_from_utf8 (request, newval, &destlen); + utf8 = gftp_string_from_utf8 (request, -1, newval, &destlen); if (utf8 != NULL) len += strlen (utf8); else @@ -391,7 +391,7 @@ if (request->directory) g_free (request->directory); - utf8 = gftp_string_to_utf8 (request, dir, &destlen); + utf8 = gftp_filename_to_utf8 (request, dir, &destlen); if (utf8 != NULL) request->directory = utf8; else @@ -1727,7 +1727,7 @@ g_return_val_if_fail (file != NULL, GFTP_EFATAL); g_return_val_if_fail (request->datafd > 0, GFTP_EFATAL); - utf8 = gftp_string_from_utf8 (request, file, &destlen); + utf8 = gftp_filename_from_utf8 (request, file, &destlen); if (utf8 != NULL) { tempstr = g_strdup_printf ("SITE CHMOD %o %s\r\n", mode, utf8); @@ -1759,7 +1759,7 @@ g_return_val_if_fail (command != NULL, GFTP_EFATAL); g_return_val_if_fail (request->datafd > 0, GFTP_EFATAL); - utf8 = gftp_string_from_utf8 (request, command, &destlen); + utf8 = gftp_string_from_utf8 (request, -1, command, &destlen); if (utf8 != NULL) { if (specify_site) diff -r 1ece208d1357 -r 8263cc35c027 lib/sshv2.c --- a/lib/sshv2.c Fri Nov 03 02:37:09 2006 +0000 +++ b/lib/sshv2.c Fri Nov 03 03:02:51 2006 +0000 @@ -175,7 +175,7 @@ char *utf8, *ret; size_t pathlen; - utf8 = gftp_string_from_utf8 (request, str, &pathlen); + utf8 = gftp_filename_from_utf8 (request, str, &pathlen); if (utf8 != NULL) addstr = utf8; else @@ -205,7 +205,7 @@ else path = gftp_build_path (request, request->directory, str, NULL); - utf8 = gftp_string_from_utf8 (request, path, len); + utf8 = gftp_filename_from_utf8 (request, path, len); if (utf8 != NULL) { g_free (path); @@ -1062,7 +1062,7 @@ if ((dir = sshv2_buffer_get_string (request, &message, 1)) == NULL) return (GFTP_EFATAL); - utf8 = gftp_string_to_utf8 (request, dir, &len); + utf8 = gftp_filename_to_utf8 (request, dir, &len); if (utf8 != NULL) { request->directory = utf8;