# HG changeset patch # User masneyb # Date 1162346725 0 # Node ID 57aad6d4b304d2a1e86444c32aa615802062416f # Parent 36e0867c4ef9e68fea344cb8332ce403f5c0882a 2006-10-31 Brian Masney WARNING: The CVS version of gFTP is currently broken, especially for international users. This will be fixed in a few days. * lib/gftp.h lib/local.c lib/misc.c lib/protocols.c lib/rfc959.c src/gtk/misc-gtk.c src/text/gftp-text.c - added length argument to gftp_string_from_utf8() and gftp_string_to_utf8() * src/uicommon/gftpui.c - warning fixes diff -r 36e0867c4ef9 -r 57aad6d4b304 ChangeLog --- a/ChangeLog Mon Oct 30 13:49:06 2006 +0000 +++ b/ChangeLog Wed Nov 01 02:05:25 2006 +0000 @@ -1,7 +1,14 @@ -2006-10-19 Brian Masney +2006-10-31 Brian Masney WARNING: The CVS version of gFTP is currently broken, especially for international users. This will be fixed in a few days. + * lib/gftp.h lib/local.c lib/misc.c lib/protocols.c lib/rfc959.c + src/gtk/misc-gtk.c src/text/gftp-text.c - added length argument to + gftp_string_from_utf8() and gftp_string_to_utf8() + + * src/uicommon/gftpui.c - warning fixes + +2006-10-19 Brian Masney * lib/fsp.c lib/gftp.h lib/local.c lib/protocols.c lib/rfc2068.c lib/rfc959.c lib/sshv2.c - added use_local_encoding variable to the gftp_request structure. This will determine if the filename should @@ -3656,7 +3663,7 @@ * cvsclean - added this script - * *.[ch] - added $Id: ChangeLog,v 1.487 2006/10/19 12:39:43 masneyb Exp $ tags + * *.[ch] - added $Id: ChangeLog,v 1.488 2006/11/01 02:05:05 masneyb Exp $ tags * debian/* - updated files from Debian maintainer diff -r 36e0867c4ef9 -r 57aad6d4b304 lib/gftp.h --- a/lib/gftp.h Mon Oct 30 13:49:06 2006 +0000 +++ b/lib/gftp.h Wed Nov 01 02:05:25 2006 +0000 @@ -907,10 +907,12 @@ int gftp_list_files ( gftp_request * request ); /*@null@*/ char * gftp_string_to_utf8 ( gftp_request * request, - const char *str ); + const char *str, + size_t *dest_len ); /*@null@*/ char * gftp_string_from_utf8 ( gftp_request * request, - const char *str ); + const char *str, + size_t *dest_len ); int gftp_parse_bookmark ( gftp_request * request, gftp_request * local_request, diff -r 36e0867c4ef9 -r 57aad6d4b304 lib/local.c --- a/lib/local.c Mon Oct 30 13:49:06 2006 +0000 +++ b/lib/local.c Wed Nov 01 02:05:25 2006 +0000 @@ -55,6 +55,7 @@ local_getcwd (gftp_request * request) { char tempstr[PATH_MAX], *utf8; + size_t destlen; if (request->directory != NULL) g_free (request->directory); @@ -68,7 +69,7 @@ return (GFTP_ERETRYABLE); } - utf8 = gftp_string_from_utf8 (request, tempstr); + utf8 = gftp_string_from_utf8 (request, tempstr, &destlen); if (utf8 != NULL) request->directory = utf8; else @@ -81,6 +82,7 @@ static int local_chdir (gftp_request * request, const char *directory) { + size_t destlen; char *utf8; int ret; @@ -88,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); + utf8 = gftp_string_from_utf8 (request, directory, &destlen); if (utf8 != NULL) { ret = chdir (utf8); @@ -153,6 +155,7 @@ local_get_file (gftp_request * request, const char *filename, int fd, off_t startsize) { + size_t destlen; char *utf8; off_t size; int flags; @@ -168,7 +171,7 @@ flags |= O_LARGEFILE; #endif - utf8 = gftp_string_from_utf8 (request, filename); + utf8 = gftp_string_from_utf8 (request, filename, &destlen); if (utf8 != NULL) { request->datafd = gftp_fd_open (request, utf8, flags, 0); @@ -210,6 +213,7 @@ off_t startsize, off_t totalsize) { int flags, perms; + size_t destlen; char *utf8; g_return_val_if_fail (request != NULL, GFTP_EFATAL); @@ -226,7 +230,7 @@ #endif perms = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH; - utf8 = gftp_string_from_utf8 (request, filename); + utf8 = gftp_string_from_utf8 (request, filename, &destlen); if (utf8 != NULL) { request->datafd = gftp_fd_open (request, utf8, flags, perms); @@ -293,10 +297,11 @@ mode_t * mode, off_t * filesize) { struct stat st; + size_t destlen; char *utf8; int ret; - utf8 = gftp_string_from_utf8 (request, filename); + utf8 = gftp_string_from_utf8 (request, filename, &destlen); if (utf8 != NULL) { ret = stat (utf8, &st); @@ -398,6 +403,7 @@ char *dir, *tempstr, *utf8; local_protocol_data *lpd; int freeit, ret; + size_t destlen; g_return_val_if_fail (request != NULL, GFTP_EFATAL); g_return_val_if_fail (request->directory != NULL, GFTP_EFATAL); @@ -407,7 +413,7 @@ g_return_val_if_fail (lpd != NULL, GFTP_EFATAL); - utf8 = gftp_string_from_utf8 (request, request->directory); + utf8 = gftp_string_from_utf8 (request, request->directory, &destlen); dir = utf8 != NULL ? utf8 : request->directory; if (dir[strlen (dir) - 1] != '/') @@ -445,10 +451,11 @@ local_get_file_size (gftp_request * request, const char *filename) { struct stat st; + size_t destlen; char *utf8; int ret; - utf8 = gftp_string_from_utf8 (request, filename); + utf8 = gftp_string_from_utf8 (request, filename, &destlen); if (utf8 != NULL) { ret = stat (utf8, &st); @@ -467,6 +474,7 @@ static int local_rmdir (gftp_request * request, const char *directory) { + size_t destlen; char *utf8; int ret; @@ -474,7 +482,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); + utf8 = gftp_string_from_utf8 (request, directory, &destlen); if (utf8 != NULL) { ret = rmdir (utf8); @@ -502,6 +510,7 @@ static int local_rmfile (gftp_request * request, const char *file) { + size_t destlen; char *utf8; int ret; @@ -509,7 +518,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); + utf8 = gftp_string_from_utf8 (request, file, &destlen); if (utf8 != NULL) { ret = unlink (utf8); @@ -538,6 +547,7 @@ local_mkdir (gftp_request * request, const char *directory) { int ret, perms; + size_t destlen; char *utf8; g_return_val_if_fail (request != NULL, GFTP_EFATAL); @@ -546,7 +556,7 @@ perms = S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH; - utf8 = gftp_string_from_utf8 (request, directory); + utf8 = gftp_string_from_utf8 (request, directory, &destlen); if (utf8 != NULL) { ret = mkdir (utf8, perms); @@ -578,6 +588,7 @@ { const char *conv_oldname, *conv_newname; char *old_utf8, *new_utf8; + size_t destlen; int ret; g_return_val_if_fail (request != NULL, GFTP_EFATAL); @@ -585,9 +596,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); + old_utf8 = gftp_string_from_utf8 (request, oldname, &destlen); conv_oldname = old_utf8 != NULL ? old_utf8 : oldname; - new_utf8 = gftp_string_from_utf8 (request, newname); + new_utf8 = gftp_string_from_utf8 (request, newname, &destlen); conv_newname = new_utf8 != NULL ? new_utf8 : newname; if (rename (conv_oldname, conv_newname) == 0) @@ -617,6 +628,7 @@ static int local_chmod (gftp_request * request, const char *file, mode_t mode) { + size_t destlen; char *utf8; int ret; @@ -624,7 +636,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); + utf8 = gftp_string_from_utf8 (request, file, &destlen); if (utf8 != NULL) { ret = chmod (utf8, mode); @@ -655,6 +667,7 @@ time_t datetime) { struct utimbuf time_buf; + size_t destlen; char *utf8; int ret; @@ -665,7 +678,7 @@ time_buf.modtime = datetime; time_buf.actime = datetime; - utf8 = gftp_string_from_utf8 (request, file); + utf8 = gftp_string_from_utf8 (request, file, &destlen); if (utf8 != NULL) { ret = utime (utf8, &time_buf); diff -r 36e0867c4ef9 -r 57aad6d4b304 lib/misc.c --- a/lib/misc.c Mon Oct 30 13:49:06 2006 +0000 +++ b/lib/misc.c Wed Nov 01 02:05:25 2006 +0000 @@ -874,6 +874,7 @@ char *file_prefixstr, char *file_suffixstr) { char *tempstr1, *tempstr2, *ret, tstr[50], *attribs, *utf8; + size_t destlen; struct tm *lt; time_t t; @@ -900,7 +901,7 @@ if (file_suffixstr == NULL) file_suffixstr = ""; - utf8 = gftp_string_from_utf8 (request, fle->file); + 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, diff -r 36e0867c4ef9 -r 57aad6d4b304 lib/protocols.c --- a/lib/protocols.c Mon Oct 30 13:49:06 2006 +0000 +++ b/lib/protocols.c Wed Nov 01 02:05:25 2006 +0000 @@ -432,11 +432,11 @@ /*@null@*/ char * -gftp_string_to_utf8 (gftp_request * request, const char *str) +gftp_string_to_utf8 (gftp_request * request, const char *str, size_t *dest_len) { char *ret, *remote_charsets, *stpos, *cur_charset, *tempstr; GError * error = NULL; - gsize bread, bwrite; + gsize bread; if (request == NULL) return (NULL); @@ -445,7 +445,7 @@ return (NULL); else if (request->iconv_initialized) { - ret = g_convert_with_iconv (str, -1, request->iconv, &bread, &bwrite, + ret = g_convert_with_iconv (str, -1, request->iconv, &bread, dest_len, &error); if (ret == NULL) printf (_("Error converting string '%s' from character set %s to character set %s: %s\n"), @@ -458,7 +458,7 @@ if (*tempstr == '\0') { error = NULL; - if ((ret = g_locale_to_utf8 (str, -1, &bread, &bwrite, &error)) != NULL) + if ((ret = g_locale_to_utf8 (str, -1, &bread, dest_len, &error)) != NULL) return (ret); /* Don't use request->logging_function since the strings must be in UTF-8 @@ -477,8 +477,8 @@ continue; error = NULL; - if ((ret = g_convert_with_iconv (str, -1, request->iconv, &bread, &bwrite, - &error)) == NULL) + if ((ret = g_convert_with_iconv (str, -1, request->iconv, &bread, + dest_len, &error)) == NULL) { printf (_("Error converting string '%s' from character set %s to character set %s: %s\n"), str, cur_charset, "UTF-8", error->message); @@ -501,11 +501,12 @@ char * -gftp_string_from_utf8 (gftp_request * request, const char *str) +gftp_string_from_utf8 (gftp_request * request, const char *str, + size_t *dest_len) { char *ret, *remote_charsets, *stpos, *cur_charset, *tempstr; GError * error = NULL; - gsize bread, bwrite; + gsize bread; if (request == NULL) return (NULL); @@ -518,7 +519,7 @@ return (NULL); else if (request->iconv_initialized) { - ret = g_convert_with_iconv (str, -1, request->iconv, &bread, &bwrite, + ret = g_convert_with_iconv (str, -1, request->iconv, &bread, dest_len, &error); if (ret == NULL) printf (_("Error converting string '%s' from character set %s to character set %s: %s\n"), @@ -531,7 +532,8 @@ if (*tempstr == '\0') { error = NULL; - if ((ret = g_locale_from_utf8 (str, -1, &bread, &bwrite, &error)) != NULL) + if ((ret = g_locale_from_utf8 (str, -1, &bread, dest_len, + &error)) != NULL) return (ret); /* Don't use request->logging_function since the strings must be in UTF-8 @@ -550,8 +552,8 @@ continue; error = NULL; - if ((ret = g_convert_with_iconv (str, -1, request->iconv, &bread, &bwrite, - &error)) == NULL) + if ((ret = g_convert_with_iconv (str, -1, request->iconv, &bread, + dest_len, &error)) == NULL) { printf (_("Error converting string '%s' from character set %s to character set %s: %s\n"), str, "UTF-8", cur_charset, error->message); @@ -575,14 +577,14 @@ #else char * -gftp_string_to_utf8 (gftp_request * request, const char *str) +gftp_string_to_utf8 (gftp_request * request, const char *str, size_t dest_len) { return (NULL); } char * -gftp_string_from_utf8 (gftp_request * request, const char *str) +gftp_string_from_utf8 (gftp_request * request, const char *str, size_t dest_len) { return (NULL); } @@ -595,6 +597,7 @@ gftp_file * fle) { char *slashpos, *tmpfile, *utf8; + size_t destlen; int fd, ret; g_return_val_if_fail (request != NULL, GFTP_EFATAL); @@ -635,7 +638,7 @@ if (ret >= 0 && fle->file != NULL) { - utf8 = gftp_string_to_utf8 (request, fle->file); + utf8 = gftp_string_to_utf8 (request, fle->file, &destlen); if (utf8 != NULL) { tmpfile = fle->file; @@ -669,9 +672,10 @@ { gftp_logging_func logging_function; gftp_bookmarks_var * tempentry; - char *default_protocol, *utf8; + char *default_protocol; const char *email; int i, init_ret; + size_t destlen; g_return_val_if_fail (request != NULL, GFTP_EFATAL); g_return_val_if_fail (bookmark != NULL, GFTP_EFATAL); @@ -713,30 +717,13 @@ gftp_set_account (request, tempentry->acct); gftp_set_hostname (request, tempentry->hostname); - - utf8 = gftp_string_from_utf8 (request, tempentry->remote_dir); - if (utf8 != NULL) - { - gftp_set_directory (request, utf8); - g_free (utf8); - } - else - gftp_set_directory (request, tempentry->remote_dir); - + gftp_set_directory (request, tempentry->remote_dir); gftp_set_port (request, tempentry->port); if (local_request != NULL && tempentry->local_dir != NULL && *tempentry->local_dir != '\0') { - utf8 = gftp_string_from_utf8 (request, tempentry->local_dir); - if (utf8 != NULL) - { - gftp_set_directory (local_request, utf8); - g_free (utf8); - } - else - gftp_set_directory (local_request, tempentry->local_dir); - + gftp_set_directory (local_request, tempentry->local_dir); if (refresh_local != NULL) *refresh_local = 1; } @@ -1037,7 +1024,6 @@ int gftp_make_directory (gftp_request * request, const char *directory) { - char *utf8; int ret; g_return_val_if_fail (request != NULL, GFTP_EFATAL); @@ -1045,16 +1031,7 @@ if (request->mkdir == NULL) return (GFTP_EFATAL); - utf8 = gftp_string_from_utf8 (request, directory); - if (utf8 != NULL) - { - ret = request->mkdir (request, utf8); - g_free (utf8); - } - else - ret = request->mkdir (request, directory); - - return (ret); + return (request->mkdir (request, directory)); } @@ -1062,7 +1039,6 @@ gftp_rename_file (gftp_request * request, const char *oldname, const char *newname) { - char *utf8; int ret; g_return_val_if_fail (request != NULL, GFTP_EFATAL); @@ -1070,16 +1046,7 @@ if (request->rename == NULL) return (GFTP_EFATAL); - utf8 = gftp_string_from_utf8 (request, newname); - if (utf8 != NULL) - { - ret = request->rename (request, oldname, utf8); - g_free (utf8); - } - else - ret = request->rename (request, oldname, newname); - - return (ret); + return (request->rename (request, oldname, newname)); } diff -r 36e0867c4ef9 -r 57aad6d4b304 lib/rfc959.c --- a/lib/rfc959.c Mon Oct 30 13:49:06 2006 +0000 +++ b/lib/rfc959.c Wed Nov 01 02:05:25 2006 +0000 @@ -198,11 +198,12 @@ int dont_try_to_reconnect) { char *tempstr, *utf8; + size_t destlen; int resp; if (argument != NULL) { - utf8 = gftp_string_from_utf8 (request, argument); + utf8 = gftp_string_from_utf8 (request, argument, &destlen); if (utf8 != NULL) { tempstr = g_strconcat (command, " ", utf8, "\r\n", NULL); @@ -225,7 +226,7 @@ { char *startpos, *endpos, *newstr, *newval, tempport[6], *proxy_config, *utf8, savechar; - size_t len; + size_t len, destlen; intptr_t tmp; g_return_val_if_fail (request != NULL, NULL); @@ -319,7 +320,7 @@ } else { - utf8 = gftp_string_from_utf8 (request, newval); + utf8 = gftp_string_from_utf8 (request, newval, &destlen); if (utf8 != NULL) len += strlen (utf8); else @@ -350,6 +351,7 @@ rfc959_getcwd (gftp_request * request) { char *pos, *dir, *utf8; + size_t destlen; int ret; ret = rfc959_send_command (request, "PWD\r\n", 1, 0); @@ -389,7 +391,7 @@ if (request->directory) g_free (request->directory); - utf8 = gftp_string_to_utf8 (request, dir); + utf8 = gftp_string_to_utf8 (request, dir, &destlen); if (utf8 != NULL) request->directory = utf8; else @@ -1718,13 +1720,14 @@ rfc959_chmod (gftp_request * request, const char *file, mode_t mode) { char *tempstr, *utf8; + size_t destlen; int ret; g_return_val_if_fail (request != NULL, GFTP_EFATAL); 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); + utf8 = gftp_string_from_utf8 (request, file, &destlen); if (utf8 != NULL) { tempstr = g_strdup_printf ("SITE CHMOD %o %s\r\n", mode, utf8); @@ -1749,13 +1752,14 @@ rfc959_site (gftp_request * request, int specify_site, const char *command) { char *tempstr, *utf8; + size_t destlen; int ret; g_return_val_if_fail (request != NULL, GFTP_EFATAL); 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); + utf8 = gftp_string_from_utf8 (request, command, &destlen); if (utf8 != NULL) { if (specify_site) diff -r 36e0867c4ef9 -r 57aad6d4b304 src/gtk/misc-gtk.c --- a/src/gtk/misc-gtk.c Mon Oct 30 13:49:06 2006 +0000 +++ b/src/gtk/misc-gtk.c Wed Nov 01 02:05:25 2006 +0000 @@ -54,6 +54,7 @@ GtkTextIter iter, iter2; const char *descr; char *utf8_str; + size_t destlen; #endif va_start (argp, string); @@ -70,7 +71,7 @@ va_end (argp); #if GTK_MAJOR_VERSION > 1 - if ((utf8_str = gftp_string_to_utf8 (request, logstr)) != NULL) + if ((utf8_str = gftp_string_to_utf8 (request, logstr, &destlen)) != NULL) { if (free_logstr) g_free (logstr); diff -r 36e0867c4ef9 -r 57aad6d4b304 src/text/gftp-text.c --- a/src/text/gftp-text.c Mon Oct 30 13:49:06 2006 +0000 +++ b/src/text/gftp-text.c Wed Nov 01 02:05:25 2006 +0000 @@ -40,10 +40,11 @@ { gchar *stpos, *endpos, *locale_str, savechar; unsigned int sw; + size_t destlen; sw = gftp_text_get_win_size (); - locale_str = gftp_string_from_utf8 (request, string); + locale_str = gftp_string_from_utf8 (request, string, &destlen); if (locale_str == NULL) stpos = string; else @@ -92,7 +93,7 @@ gftp_text_log (gftp_logging_level level, gftp_request * request, const char *string, ...) { - char tempstr[512], *utf8_str = NULL, *outstr; + char tempstr[512]; va_list argp; g_return_if_fail (string != NULL); @@ -117,19 +118,9 @@ g_vsnprintf (tempstr, sizeof (tempstr), string, argp); va_end (argp); -#if GLIB_MAJOR_VERSION > 1 - if (!g_utf8_validate (tempstr, -1, NULL)) - utf8_str = gftp_string_to_utf8 (request, tempstr); -#endif - - if (utf8_str != NULL) - outstr = utf8_str; - else - outstr = tempstr; - if (gftp_logfd != NULL && level != gftp_logging_misc_nolog) { - fwrite (outstr, 1, strlen (outstr), gftp_logfd); + fwrite (tempstr, 1, strlen (tempstr), gftp_logfd); if (ferror (gftp_logfd)) { fclose (gftp_logfd); @@ -140,14 +131,11 @@ } if (level == gftp_logging_misc_nolog) - printf ("%s", outstr); + printf ("%s", tempstr); else - gftp_text_write_string (request, outstr); + gftp_text_write_string (request, tempstr); printf ("%s", GFTPUI_COMMON_COLOR_DEFAULT); - - if (utf8_str != NULL) - g_free (utf8_str); } @@ -158,6 +146,7 @@ gchar *locale_question; sigset_t sig, sigsave; char *pos, *termname; + size_t destlen; int singlechar; FILE *infd; diff -r 36e0867c4ef9 -r 57aad6d4b304 src/uicommon/gftpui.c --- a/src/uicommon/gftpui.c Mon Oct 30 13:49:06 2006 +0000 +++ b/src/uicommon/gftpui.c Wed Nov 01 02:05:25 2006 +0000 @@ -1295,6 +1295,7 @@ memset (&updatetime, 0, sizeof (updatetime)); gftpui_start_current_file_in_transfer (tdata); + num_read = 0; while (!tdata->cancel && (num_read = gftp_get_next_file_chunk (tdata->fromreq, buf, trans_blksize)) > 0) @@ -1402,7 +1403,7 @@ } -static int +static void _gftpui_common_next_file_in_trans (gftp_transfer * tdata) { gftp_file * curfle;