diff options
Diffstat (limited to 'net-ftp/gftp/files/gftp-ds-rcc.patch')
-rw-r--r-- | net-ftp/gftp/files/gftp-ds-rcc.patch | 822 |
1 files changed, 0 insertions, 822 deletions
diff --git a/net-ftp/gftp/files/gftp-ds-rcc.patch b/net-ftp/gftp/files/gftp-ds-rcc.patch deleted file mode 100644 index a704deb..0000000 --- a/net-ftp/gftp/files/gftp-ds-rcc.patch +++ /dev/null @@ -1,822 +0,0 @@ -diff -dPNur gftp-2.0.18-orig/configure.in gftp-2.0.18-new/configure.in ---- gftp-2.0.18-orig/configure.in 2005-02-04 16:42:32.000000000 +0100 -+++ gftp-2.0.18-new/configure.in 2005-07-23 18:54:53.000000000 +0200 -@@ -288,6 +288,20 @@ - fi - AC_SUBST(SSL_LIBS) - -+AC_CHECK_LIB(rccui, rccUiInit,[ -+ AC_CHECK_HEADERS(librcc.h librccui.h,[ -+ LIBRCC_LIBS="-lrccui" -+ LIBRCC_INCLUDES="-DHAVE_LIBRCC" -+ ],[ -+ LIBRCC_LIBS="" -+ LIBRCC_INCLUDES="" -+])],[ -+ LIBRCC_LIBS="" -+ LIBRCC_INCLUDES="" -+]) -+AC_SUBST(LIBRCC_LIBS) -+AC_SUBST(LIBRCC_INCLUDES) -+ - AM_GNU_GETTEXT - - AC_CHECK_PROG(DB2HTML, db2html, true, false) -diff -dPNur gftp-2.0.18-orig/lib/gftp.h gftp-2.0.18-new/lib/gftp.h ---- gftp-2.0.18-orig/lib/gftp.h 2005-01-19 00:09:58.000000000 +0100 -+++ gftp-2.0.18-new/lib/gftp.h 2005-07-23 20:57:03.000000000 +0200 -@@ -362,6 +362,7 @@ - { - int protonum; /* Current number of the protocol this is - set to */ -+ int language, charset; /* Remote language and encoding */ - char *hostname, /* Hostname we will connect to */ - *username, /* Username for host*/ - *password, /* Password for host */ -@@ -928,6 +929,12 @@ - const char *filename, - mode_t * mode ); - -+void gftp_set_language ( gftp_request * request, -+ int language ); -+ -+void gftp_set_charset ( gftp_request * request, -+ int charset ); -+ - void gftp_set_hostname ( gftp_request * request, - const char *hostname ); - -diff -dPNur gftp-2.0.18-orig/lib/Makefile.am gftp-2.0.18-new/lib/Makefile.am ---- gftp-2.0.18-orig/lib/Makefile.am 2005-01-16 17:10:12.000000000 +0100 -+++ gftp-2.0.18-new/lib/Makefile.am 2005-07-23 18:58:12.000000000 +0200 -@@ -4,6 +4,6 @@ - noinst_LIBRARIES = libgftp.a - libgftp_a_SOURCES=bookmark.c cache.c config_file.c fsp.c ftps.c https.c \ - local.c misc.c mkstemps.c protocols.c pty.c rfc959.c \ -- rfc2068.c sshv2.c sslcommon.c --INCLUDES=@GLIB_CFLAGS@ @PTHREAD_CFLAGS@ -I../intl -DSHARE_DIR=\"$(datadir)/gftp\" -DLOCALE_DIR=\"$(datadir)/locale\" --noinst_HEADERS=gftp.h ftpcommon.h httpcommon.h options.h -+ rfc2068.c sshv2.c sslcommon.c rcc.c -+INCLUDES=@LIBRCC_INCLUDES@ @GLIB_CFLAGS@ @PTHREAD_CFLAGS@ -I../intl -DSHARE_DIR=\"$(datadir)/gftp\" -DLOCALE_DIR=\"$(datadir)/locale\" -+noinst_HEADERS=gftp.h ftpcommon.h httpcommon.h options.h rcc.h -diff -dPNur gftp-2.0.18-orig/lib/rcc.c gftp-2.0.18-new/lib/rcc.c ---- gftp-2.0.18-orig/lib/rcc.c 1970-01-01 01:00:00.000000000 +0100 -+++ gftp-2.0.18-new/lib/rcc.c 2005-07-24 01:53:25.000000000 +0200 -@@ -0,0 +1,289 @@ -+#include <stdlib.h> -+ -+#ifdef HAVE_LIBRCC -+# include <librcc.h> -+# include <librccui.h> -+#endif /* HAVE_LIBRCC */ -+ -+#include "rcc.h" -+ -+#ifdef HAVE_LIBRCC -+static rcc_class classes[] = { -+ { "ftp", RCC_CLASS_STANDARD, NULL, NULL, "FTP Encoding", 0 }, -+ { "http", RCC_CLASS_STANDARD, NULL, NULL, "HTTP Encoding", 0 }, -+ { "ssh", RCC_CLASS_STANDARD, NULL, NULL, "SSH Encoding", 0 }, -+ { "fs", RCC_CLASS_STANDARD, NULL, NULL, "FS Encoding", 0 }, -+ { "out", RCC_CLASS_STANDARD, NULL, NULL, "Output Encoding", 0 }, -+ { NULL, RCC_CLASS_STANDARD, NULL, NULL, NULL, 0 } -+}; -+ -+rcc_context ctx; -+rcc_ui_context uictx; -+static int rcc_initialized = 0; -+#endif /* HAVE_LIBRCC */ -+ -+ -+void rccPatchFree() { -+#ifdef HAVE_LIBRCC -+ if (rcc_initialized) { -+ rccUiFreeContext(uictx); -+ rccFreeContext(ctx); -+ rccUiFree(); -+ rccFree(); -+ rcc_initialized = 0; -+ } -+#endif /* HAVE_LIBRCC */ -+} -+ -+void rccPatchInit() { -+#ifdef HAVE_LIBRCC -+ if (rcc_initialized) return; -+ rccInit(); -+ ctx = rccCreateContext(NULL, 0, 0, classes, 0); -+ if (ctx) { -+ rccLoad(ctx, "ftp"); -+ rccInitDb4(ctx, NULL, 0); -+ rccUiInit(); -+ uictx = rccUiCreateContext(ctx); -+ if (uictx) rcc_initialized = 1; -+ else { -+ rccUiFree(); -+ rccFreeContext(ctx); -+ rccFree(); -+ } -+ } else rccFree(); -+#endif /* HAVE_LIBRCC */ -+} -+ -+ -+#ifdef HAVE_LIBRCC -+static char *rcc_languages[RCC_MAX_LANGUAGES+1]; -+static char *rcc_charsets[RCC_MAX_CHARSETS+1]; -+#endif /* HAVE_LIBRCC */ -+ -+char **rccPatchGetLanguageList() { -+#ifdef HAVE_LIBRCC -+ unsigned int i, num; -+ -+ if (rcc_initialized) { -+ num = rccGetLanguageNumber(ctx); -+ for (i=0;i<(num?num:1);i++) -+ rcc_languages[i] = (char*)rccUiGetLanguageName(uictx, (rcc_language_id)i); -+ -+ rcc_languages[i] = NULL; -+ return rcc_languages; -+ } -+#endif /* HAVE_LIBRCC */ -+ -+ return NULL; -+ -+} -+ -+char **rccPatchGetCharsetList(int lid) { -+#ifdef HAVE_LIBRCC -+ unsigned int i, num; -+ rcc_language_config config; -+ -+ if (rcc_initialized) { -+ config = rccGetConfig(ctx, (rcc_language_id)lid); -+ num = rccConfigGetCharsetNumber(config); -+ for (i=0;i<(num?num:1);i++) -+ rcc_charsets[i] = (char*)rccUiGetCharsetName(uictx, (rcc_language_id)lid, (rcc_class_id)0 /* first class, they are equal*/, (rcc_charset_id)i); -+ -+ rcc_charsets[i] = NULL; -+ return rcc_charsets; -+ } -+#endif /* HAVE_LIBRCC */ -+ -+ return NULL; -+} -+ -+char *rccPatchFrom(gftp_request * request, const char *str) { -+#ifdef HAVE_LIBRCC -+ rcc_class_id cl; -+ if (rcc_initialized) { -+ switch (request->protonum) { -+ case GFTP_FTP_NUM: -+ case GFTP_FTPS_NUM: -+ cl = (rcc_class_id)RCC_CLASS_FTP; -+ break; -+ case GFTP_HTTP_NUM: -+ case GFTP_HTTPS_NUM: -+ cl = (rcc_class_id)RCC_CLASS_HTTP; -+ break; -+ case GFTP_SSHV2_NUM: -+ cl = (rcc_class_id)RCC_CLASS_SSH; -+ break; -+ case GFTP_LOCAL_NUM: -+ cl = (rcc_class_id)RCC_CLASS_FS; -+ break; -+ default: -+ return NULL; -+ } -+ -+ if ((cl == RCC_CLASS_FTP)||(cl == RCC_CLASS_HTTP)||(cl == RCC_CLASS_SSH)) { -+ if (request->language) rccSetLanguage(ctx, (rcc_language_id)request->language); -+ if (request->charset) rccSetCharset(ctx, cl, (rcc_charset_id)request->charset); -+ } -+ -+ return rccRecodeFromCharset(ctx, cl, "UTF-8", str); -+ } -+#endif /* HAVE_LIBRCC */ -+ return NULL; -+} -+ -+char *rccPatchTo(gftp_request * request, const char *str) { -+#ifdef HAVE_LIBRCC -+ rcc_class_id cl; -+ if (rcc_initialized) { -+ switch (request->protonum) { -+ case GFTP_FTP_NUM: -+ case GFTP_FTPS_NUM: -+ cl = (rcc_class_id)RCC_CLASS_FTP; -+ break; -+ case GFTP_HTTP_NUM: -+ case GFTP_HTTPS_NUM: -+ cl = (rcc_class_id)RCC_CLASS_HTTP; -+ break; -+ case GFTP_SSHV2_NUM: -+ cl = (rcc_class_id)RCC_CLASS_SSH; -+ break; -+ case GFTP_LOCAL_NUM: -+ cl = (rcc_class_id)RCC_CLASS_FS; -+ break; -+ default: -+ return NULL; -+ } -+ -+ if ((cl == RCC_CLASS_FTP)||(cl == RCC_CLASS_HTTP)||(cl == RCC_CLASS_SSH)) { -+ if (request->language) rccSetLanguage(ctx, (rcc_language_id)request->language); -+ if (request->charset) rccSetCharset(ctx, cl, (rcc_charset_id)request->charset); -+ } -+ -+ return rccRecodeToCharset(ctx, cl, "UTF-8", str); -+ } -+#endif /* HAVE_LIBRCC */ -+ return NULL; -+} -+ -+char *rccPatch(gftp_request *from, gftp_request *to, const char *str) { -+ char *res, *ret; -+ const char *tmp; -+ -+ if (from->protonum == to->protonum) return NULL; -+ printf("%u %u\n", from->protonum, to->protonum); -+ -+ tmp = strstr(str, to->directory); -+ if (!tmp) tmp = str; -+ -+ res = rccPatchTo(from, tmp); -+ if (!res) res = (char*)tmp; -+ -+ ret = rccPatchFrom(to, res); -+ if (ret) { -+ if (res!=tmp) free(res); -+ } else { -+ if (res!=tmp) ret = res; -+ else return NULL; -+ } -+ -+ if (tmp != str) { -+ res = (char*)malloc((strlen(ret) + (tmp-str) + 1)*sizeof(char)); -+ if (res) { -+ memcpy(res, str, (tmp-str)); -+ strcpy(res+(tmp-str), ret); -+ } -+ free(ret); -+ if (res) puts(res); -+ return res; -+ } -+ -+ return ret; -+} -+ -+char *rccPatchFromClass(gftp_request * request, int from, const char *str) { -+#ifdef HAVE_LIBRCC -+ rcc_class_id cl; -+ if (rcc_initialized) { -+ switch (request->protonum) { -+ case GFTP_FTP_NUM: -+ case GFTP_FTPS_NUM: -+ cl = (rcc_class_id)RCC_CLASS_FTP; -+ break; -+ case GFTP_HTTP_NUM: -+ case GFTP_HTTPS_NUM: -+ cl = (rcc_class_id)RCC_CLASS_HTTP; -+ break; -+ case GFTP_SSHV2_NUM: -+ cl = (rcc_class_id)RCC_CLASS_SSH; -+ break; -+ case GFTP_LOCAL_NUM: -+ cl = (rcc_class_id)RCC_CLASS_FS; -+ break; -+ default: -+ return NULL; -+ } -+ -+ if ((cl == RCC_CLASS_FTP)||(cl == RCC_CLASS_HTTP)||(cl == RCC_CLASS_SSH)) { -+ if (request->language) rccSetLanguage(ctx, (rcc_language_id)request->language); -+ if (request->charset) rccSetCharset(ctx, cl, (rcc_charset_id)request->charset); -+ } -+ -+ return rccRecode(ctx, (rcc_class_id)from, cl, str); -+ } -+#endif /* HAVE_LIBRCC */ -+ return NULL; -+} -+ -+char *rccPatchToClass(gftp_request * request, int to, const char *str) { -+#ifdef HAVE_LIBRCC -+ rcc_class_id cl; -+ if (rcc_initialized) { -+ switch (request->protonum) { -+ case GFTP_FTP_NUM: -+ case GFTP_FTPS_NUM: -+ cl = (rcc_class_id)RCC_CLASS_FTP; -+ break; -+ case GFTP_HTTP_NUM: -+ case GFTP_HTTPS_NUM: -+ cl = (rcc_class_id)RCC_CLASS_HTTP; -+ break; -+ case GFTP_SSHV2_NUM: -+ cl = (rcc_class_id)RCC_CLASS_SSH; -+ break; -+ case GFTP_LOCAL_NUM: -+ cl = (rcc_class_id)RCC_CLASS_FS; -+ break; -+ default: -+ return NULL; -+ } -+ -+ if ((cl == RCC_CLASS_FTP)||(cl == RCC_CLASS_HTTP)||(cl == RCC_CLASS_SSH)) { -+ if (request->language) rccSetLanguage(ctx, (rcc_language_id)request->language); -+ if (request->charset) rccSetCharset(ctx, cl, (rcc_charset_id)request->charset); -+ } -+ -+ return rccRecode(ctx, cl, (rcc_class_id)to, str); -+ } -+#endif /* HAVE_LIBRCC */ -+ return NULL; -+} -+ -+ -+char *rccPatchUTF2OUT(const char *str) { -+#ifdef HAVE_LIBRCC -+ if (rcc_initialized) { -+ return rccRecodeFromCharset(ctx, RCC_CLASS_OUT, "UTF-8", str); -+ } -+#endif /* HAVE_LIBRCC */ -+ return NULL; -+} -+ -+char *rccPatchOUT2UTF(const char *str) { -+#ifdef HAVE_LIBRCC -+ if (rcc_initialized) { -+ return rccRecodeToCharset(ctx, RCC_CLASS_OUT, "UTF-8", str); -+ } -+#endif /* HAVE_LIBRCC */ -+ return NULL; -+} -diff -dPNur gftp-2.0.18-orig/lib/rcc.h gftp-2.0.18-new/lib/rcc.h ---- gftp-2.0.18-orig/lib/rcc.h 1970-01-01 01:00:00.000000000 +0100 -+++ gftp-2.0.18-new/lib/rcc.h 2005-07-24 01:49:20.000000000 +0200 -@@ -0,0 +1,28 @@ -+#ifndef _RCC_H -+#define _RCC_H -+ -+#include "gftp.h" -+ -+#define RCC_CLASS_FTP 0 -+#define RCC_CLASS_HTTP 1 -+#define RCC_CLASS_SSH 2 -+#define RCC_CLASS_FS 3 -+#define RCC_CLASS_OUT 4 -+ -+void rccPatchFree(); -+void rccPatchInit(); -+ -+char **rccPatchGetLanguageList(); -+char **rccPatchGetCharsetList(int lid); -+ -+char *rccPatchFrom(gftp_request * request, const char *str); -+char *rccPatchTo(gftp_request * request, const char *str); -+char *rccPatch(gftp_request *from, gftp_request *to, const char *str); -+ -+char *rccPatchFromClass(gftp_request * request, int from, const char *str); -+char *rccPatchToClass(gftp_request * request, int to, const char *str); -+ -+char *rccPatchUTF2OUT(const char *str); -+char *rccPatchOUT2UTF(const char *str); -+ -+#endif /* _RCC_H */ -diff -dPNur gftp-2.0.18-orig/src/gtk/gtkui.c gftp-2.0.18-new/src/gtk/gtkui.c ---- gftp-2.0.18-orig/src/gtk/gtkui.c 2005-01-26 04:22:05.000000000 +0100 -+++ gftp-2.0.18-new/src/gtk/gtkui.c 2005-07-24 00:40:47.000000000 +0200 -@@ -351,6 +351,8 @@ - filelist = wdata->files; - templist = get_next_selection (templist, &filelist, &num); - curfle = filelist->data; -+ cdata->source_string = gftp_string_to_utf8(wdata->request, curfle->file); -+ if (!cdata->source_string) - cdata->source_string = g_strdup (curfle->file); - - tempstr = g_strdup_printf (_("What would you like to rename %s to?"), -diff -dPNur gftp-2.0.18-orig/src/gtk/Makefile.am gftp-2.0.18-new/src/gtk/Makefile.am ---- gftp-2.0.18-orig/src/gtk/Makefile.am 2005-01-16 17:12:08.000000000 +0100 -+++ gftp-2.0.18-new/src/gtk/Makefile.am 2005-07-23 19:16:26.000000000 +0200 -@@ -5,6 +5,6 @@ - gftp_gtk_SOURCES = bookmarks.c chmod_dialog.c delete_dialog.c dnd.c \ - gftp-gtk.c gtkui.c gtkui_transfer.c menu-items.c \ - misc-gtk.c options_dialog.c transfer.c view_dialog.c --INCLUDES = @GTK_CFLAGS@ @PTHREAD_CFLAGS@ -I../../intl --LDADD = ../../lib/libgftp.a ../../lib/fsplib/libfsp.a ../uicommon/libgftpui.a @GTK_LIBS@ @PTHREAD_LIBS@ @EXTRA_LIBS@ @GTHREAD_LIBS@ @SSL_LIBS@ @LIBINTL@ -+INCLUDES = @LIBRCC_INCLUDES@ @GTK_CFLAGS@ @PTHREAD_CFLAGS@ -I../../intl -+LDADD = ../../lib/libgftp.a ../../lib/fsplib/libfsp.a ../uicommon/libgftpui.a @GTK_LIBS@ @PTHREAD_LIBS@ @EXTRA_LIBS@ @GTHREAD_LIBS@ @SSL_LIBS@ @LIBINTL@ @LIBRCC_LIBS@ - noinst_HEADERS = gftp-gtk.h -diff -dPNur gftp-2.0.18-orig/src/text/gftp-text.c gftp-2.0.18-new/src/text/gftp-text.c ---- gftp-2.0.18-orig/src/text/gftp-text.c 2005-01-25 02:11:00.000000000 +0100 -+++ gftp-2.0.18-new/src/text/gftp-text.c 2005-07-24 01:54:25.000000000 +0200 -@@ -18,6 +18,7 @@ - /*****************************************************************************/ - - #include "gftp-text.h" -+#include "../../lib/rcc.h" - static const char cvsid[] = "$Id: gftp-text.c,v 1.45 2005/01/25 01:11:00 masneyb Exp $"; - - unsigned int -@@ -93,6 +94,7 @@ - const char *string, ...) - { - char tempstr[512], *utf8_str = NULL, *outstr; -+ char *locale_str; - va_list argp; - - g_return_if_fail (string != NULL); -@@ -140,7 +142,14 @@ - } - - if (level == gftp_logging_misc_nolog) -+{ -+ locale_str = rccPatchUTF2OUT(outstr); -+ if (locale_str) { -+ printf ("%s", locale_str); -+ free(locale_str); -+ } else - printf ("%s", outstr); -+} - else - gftp_text_write_string (request, outstr); - -@@ -158,6 +167,7 @@ - gchar *locale_question; - sigset_t sig, sigsave; - char *pos, *termname; -+ char *tmp; - int singlechar; - FILE *infd; - -@@ -247,6 +257,9 @@ - #else - char tempstr[512]; - #endif -+ char *recoded = NULL; -+ -+ rccPatchInit(); - - gftpui_common_init (&argc, &argv, gftp_text_log); - -@@ -298,9 +311,11 @@ - g_snprintf (prompt, sizeof (prompt), "%sftp%s> ", GFTPUI_COMMON_COLOR_BLUE, GFTPUI_COMMON_COLOR_DEFAULT); - while ((tempstr = readline (prompt))) - { -+ if (recoded) free(recoded); -+ recoded = rccPatchFromClass(gftp_text_remreq, RCC_CLASS_OUT, tempstr); - if (gftpui_common_process_command (locuidata, gftp_text_locreq, - remuidata, gftp_text_remreq, -- tempstr) == 0) -+ recoded?recoded:tempstr) == 0) - break; - - add_history (tempstr); -@@ -310,16 +325,20 @@ - printf ("%sftp%s> ", GFTPUI_COMMON_COLOR_BLUE, GFTPUI_COMMON_COLOR_DEFAULT); - while (fgets (tempstr, sizeof (tempstr), stdin) != NULL) - { -+ if (recoded) free(recoded); -+ recoded = rccPatchFromClass(gftp_tetxt_remreq, RCC_CLASS_OUT, tempstr); - if (gftpui_common_process_command (locuidata, gftp_text_locreq, - remuidata, gftp_text_remreq, -- tempstr) == 0) -+ recoded?recoded:tempstr) == 0) - break; - - printf ("%sftp%s> ", GFTPUI_COMMON_COLOR_BLUE, GFTPUI_COMMON_COLOR_DEFAULT); - } - #endif -- -+ if (recoded) free(recoded); -+ - gftp_shutdown (); -+ rccPatchFree(); - return (0); - } - -diff -dPNur gftp-2.0.18-orig/src/text/Makefile.am gftp-2.0.18-new/src/text/Makefile.am ---- gftp-2.0.18-orig/src/text/Makefile.am 2005-01-16 17:12:00.000000000 +0100 -+++ gftp-2.0.18-new/src/text/Makefile.am 2005-07-23 19:16:39.000000000 +0200 -@@ -3,7 +3,7 @@ - bin_PROGRAMS = @GFTP_TEXT@ - EXTRA_PROGRAMS = gftp-text - gftp_text_SOURCES=gftp-text.c textui.c --INCLUDES=@GLIB_CFLAGS@ -I../../intl --LDADD = ../../lib/libgftp.a ../../lib/fsplib/libfsp.a ../uicommon/libgftpui.a @GLIB_LIBS@ @EXTRA_LIBS@ @READLINE_LIBS@ @SSL_LIBS@ @LIBINTL@ -+INCLUDES=@LIBRCC_INCLUDES@ @GLIB_CFLAGS@ -I../../intl -+LDADD = ../../lib/libgftp.a ../../lib/fsplib/libfsp.a ../uicommon/libgftpui.a @GLIB_LIBS@ @EXTRA_LIBS@ @READLINE_LIBS@ @SSL_LIBS@ @LIBINTL@ @LIBRCC_LIBS@ - noinst_HEADERS=gftp-text.h - localedir=$(datadir)/locale -diff -dPNur gftp-2.0.18-orig/lib/protocols.c gftp-2.0.18-new/lib/protocols.c ---- gftp-2.0.18-orig/lib/protocols.c 2005-07-23 15:30:59.000000000 +0200 -+++ gftp-2.0.18-new/lib/protocols.c 2005-07-24 00:56:12.000000000 +0200 -@@ -18,6 +18,8 @@ - /*****************************************************************************/ - - #include "gftp.h" -+#include "rcc.h" -+ - static const char cvsid[] = "$Id: protocols.c,v 1.125 2005/01/25 02:34:18 masneyb Exp $"; - - gftp_request * -@@ -26,6 +28,8 @@ - gftp_request *request; - - request = g_malloc0 (sizeof (*request)); -+ request->language = 0; -+ request->charset = 0; - request->datafd = -1; - request->cachefd = -1; - request->server_type = GFTP_DIRTYPE_OTHER; -@@ -460,6 +469,9 @@ - gftp_lookup_request_option (request, "remote_charsets", &tempstr); - if (*tempstr == '\0') - { -+ ret = rccPatchTo(request, str); -+ if (ret) return ret; -+ - error = NULL; - if ((ret = g_locale_to_utf8 (str, -1, &bread, &bwrite, &error)) != NULL) - return (ret); -@@ -531,6 +544,9 @@ - gftp_lookup_request_option (request, "remote_charsets", &tempstr); - if (*tempstr == '\0') - { -+ ret = rccPatchFrom(request, str); -+ if (ret) return ret; -+ - error = NULL; - if ((ret = g_locale_from_utf8 (str, -1, &bread, &bwrite, &error)) != NULL) - return (ret); -@@ -919,6 +935,18 @@ - } - - -+void -+gftp_set_language (gftp_request * request, int language) { -+ g_return_if_fail (request != NULL); -+ request->language = language; -+} -+ -+void -+gftp_set_charset (gftp_request * request, int charset) { -+ g_return_if_fail (request != NULL); -+ request->charset = charset; -+} -+ - void - gftp_set_hostname (gftp_request * request, const char *hostname) - { -@@ -1056,6 +1084,7 @@ - const char *newname) - { - char *utf8; -+ char *oldutf8; - int ret; - - g_return_val_if_fail (request != NULL, GFTP_EFATAL); -@@ -1064,13 +1093,13 @@ - return (GFTP_EFATAL); - - utf8 = gftp_string_from_utf8 (request, newname); -+ oldutf8 = gftp_string_from_utf8 (request, oldname); -+ ret = request->rename (request, oldutf8?oldutf8:oldname, utf8?utf8:newname); -+ - if (utf8 != NULL) -- { -- ret = request->rename (request, oldname, utf8); - g_free (utf8); -- } -- else -- ret = request->rename (request, oldname, newname); -+ if (oldutf8 != NULL) -+ g_free (oldutf8); - - return (ret); - } -@@ -1948,11 +1977,14 @@ - (newsize = g_hash_table_lookup (dirhash, fle->file)) != NULL) - fle->startsize = *newsize; - -- if (transfer->toreq && fle->destfile == NULL) -+ if (transfer->toreq && fle->destfile == NULL) { -+ newname = rccPatch(transfer->fromreq, transfer->toreq, fle->file); - fle->destfile = gftp_build_path (transfer->toreq, - transfer->toreq->directory, -- fle->file, NULL); -- -+ newname?newname:fle->file, NULL); -+ if (newname) free(newname); -+ } -+ - if (transfer->fromreq->directory != NULL && - *transfer->fromreq->directory != '\0' && - *fle->file != '/') -@@ -2026,11 +2058,15 @@ - return (curfle->size); - } - -- if (transfer->toreq && curfle->destfile == NULL) -+ if (transfer->toreq && curfle->destfile == NULL) { -+ newname = rccPatch(transfer->fromreq, transfer->toreq, curfle->file); - curfle->destfile = gftp_build_path (transfer->toreq, - transfer->toreq->directory, -- curfle->file, NULL); -+ newname?newname:curfle->file, NULL); -+ if (newname) free(newname); -+ } - -+ - if (transfer->fromreq->directory != NULL && - *transfer->fromreq->directory != '\0' && *curfle->file != '/') - { -diff -dPNur gftp-2.0.18-orig/src/gtk/gftp-gtk.c gftp-2.0.18-new/src/gtk/gftp-gtk.c ---- gftp-2.0.18-orig/src/gtk/gftp-gtk.c 2005-01-25 03:34:19.000000000 +0100 -+++ gftp-2.0.18-new/src/gtk/gftp-gtk.c 2005-07-23 22:22:42.000000000 +0200 -@@ -18,6 +18,7 @@ - /*****************************************************************************/ - - #include "gftp-gtk.h" -+#include "../../lib/rcc.h" - static const char cvsid[] = "$Id: gftp-gtk.c,v 1.66 2005/01/25 02:34:19 masneyb Exp $"; - - static GtkItemFactory *log_factory, *dl_factory; -@@ -28,6 +29,7 @@ - GtkWidget * stop_btn, * hostedit, * useredit, * passedit, * portedit, * logwdw, - * dlwdw, * protocol_menu, * optionmenu, * gftpui_command_widget, - * download_left_arrow, * upload_right_arrow, * openurl_btn; -+GtkWidget * language_menu, * charset_menu; - GtkTooltips * openurl_tooltip; - GtkAdjustment * logwdw_vadj; - #if GTK_MAJOR_VERSION > 1 -@@ -420,6 +422,42 @@ - return (factory->widget); - } - -+#ifdef HAVE_LIBRCC -+static int rcc_current_language = 0; -+static int rcc_current_charset = 0; -+ -+static void rccCharsetCB(GtkWidget * w, gpointer item) { -+ rcc_current_charset = g_list_index(GTK_MENU_SHELL(charset_menu)->children, gtk_menu_get_active(GTK_MENU(charset_menu))); -+} -+ -+static void rccLanguageCB(GtkWidget * w, gpointer item) { -+ GtkWidget *tempwid, *optionmenu; -+ unsigned int i; -+ char **langs; -+ gint cur; -+ -+ cur = g_list_index(GTK_MENU_SHELL(language_menu)->children, gtk_menu_get_active(GTK_MENU(language_menu))); -+ optionmenu = gtk_menu_get_attach_widget(GTK_MENU(charset_menu)); -+ -+ rcc_current_language = cur; -+ rcc_current_charset = 0; -+ -+ langs = rccPatchGetCharsetList(cur); -+ if (langs) { -+ charset_menu = gtk_menu_new (); -+ for (i=0;langs[i];i++) { -+ tempwid = gtk_menu_item_new_with_label (langs[i]); -+ gtk_object_set_user_data (GTK_OBJECT (tempwid), GINT_TO_POINTER(i)); -+ gtk_menu_append (GTK_MENU (charset_menu), tempwid); -+ gtk_widget_show (tempwid); -+ } -+ -+ gtk_option_menu_remove_menu (GTK_OPTION_MENU (optionmenu)); -+ gtk_option_menu_set_menu (GTK_OPTION_MENU (optionmenu), charset_menu); -+ gtk_option_menu_set_history (GTK_OPTION_MENU (optionmenu), 0); -+ } -+} -+#endif /* HAVE_LIBRCC */ - - static GtkWidget * - CreateConnectToolbar (GtkWidget * parent) -@@ -430,14 +468,19 @@ - {"application/x-rootwin-drop", 0, 1} - }; - GtkWidget *toolbar, *box, *tempwid; -+ GtkWidget *vbox; -+ GtkWidget *tmpoptionmenu; - gftp_config_list_vars * tmplistvar; - char *default_protocol, *tempstr; -+ char **langs; - int i, num; - - toolbar = gtk_handle_box_new (); - -+ vbox = gtk_vbox_new (FALSE, 0); - box = gtk_hbox_new (FALSE, 4); -- gtk_container_add (GTK_CONTAINER (toolbar), box); -+ gtk_box_pack_start(GTK_BOX(vbox), box, FALSE, FALSE, 0); -+ gtk_container_add (GTK_CONTAINER (toolbar), vbox); - gtk_container_border_width (GTK_CONTAINER (box), 5); - - openurl_tooltip = gtk_tooltips_new (); -@@ -548,6 +591,7 @@ - optionmenu = gtk_option_menu_new (); - gtk_box_pack_start (GTK_BOX (tempwid), optionmenu, TRUE, FALSE, 0); - -+ - num = 0; - gftp_lookup_global_option ("default_protocol", &default_protocol); - protocol_menu = gtk_menu_new (); -@@ -584,6 +628,61 @@ - gtk_container_border_width (GTK_CONTAINER (stop_btn), 1); - gtk_box_pack_start (GTK_BOX (box), stop_btn, FALSE, FALSE, 0); - -+#ifdef HAVE_LIBRCC -+ box = gtk_hbox_new (FALSE, 4); -+ gtk_box_pack_start(GTK_BOX(vbox), box, FALSE, FALSE, 0); -+ gtk_container_border_width (GTK_CONTAINER (box), 5); -+ -+ langs = rccPatchGetCharsetList(0); -+ if (langs) { -+ tempwid = gtk_vbox_new (FALSE, 0); -+ gtk_box_pack_end (GTK_BOX (box), tempwid, FALSE, FALSE, 0); -+ -+ tmpoptionmenu = gtk_option_menu_new (); -+ gtk_box_pack_start (GTK_BOX (tempwid), tmpoptionmenu, TRUE, FALSE, 0); -+ -+ charset_menu = gtk_menu_new (); -+ for (i=0;langs[i];i++) { -+ tempwid = gtk_menu_item_new_with_label (langs[i]); -+ gtk_signal_connect(GTK_OBJECT(tempwid), "activate", GTK_SIGNAL_FUNC(rccCharsetCB), NULL); -+ gtk_object_set_user_data (GTK_OBJECT (tempwid), GINT_TO_POINTER(i)); -+ gtk_menu_append (GTK_MENU (charset_menu), tempwid); -+ gtk_widget_show (tempwid); -+ } -+ -+ gtk_option_menu_set_menu (GTK_OPTION_MENU (tmpoptionmenu), charset_menu); -+ gtk_option_menu_set_history (GTK_OPTION_MENU (tmpoptionmenu), rcc_current_charset); -+ -+ tempwid = gtk_label_new (_("Charset: ")); -+ gtk_box_pack_end (GTK_BOX (box), tempwid, FALSE, FALSE, 0); -+ } -+ -+ langs = rccPatchGetLanguageList(); -+ if (langs) { -+ tempwid = gtk_vbox_new (FALSE, 0); -+ gtk_box_pack_end (GTK_BOX (box), tempwid, FALSE, FALSE, 0); -+ -+ tmpoptionmenu = gtk_option_menu_new (); -+ gtk_box_pack_start (GTK_BOX (tempwid), tmpoptionmenu, TRUE, FALSE, 0); -+ -+ language_menu = gtk_menu_new (); -+ for (i=0;langs[i];i++) { -+ tempwid = gtk_menu_item_new_with_label (langs[i]); -+ gtk_signal_connect(GTK_OBJECT(tempwid), "activate", GTK_SIGNAL_FUNC(rccLanguageCB), NULL); -+ gtk_object_set_user_data (GTK_OBJECT (tempwid), GINT_TO_POINTER(i)); -+ gtk_menu_append (GTK_MENU (language_menu), tempwid); -+ gtk_widget_show (tempwid); -+ } -+ -+ gtk_option_menu_set_menu (GTK_OPTION_MENU (tmpoptionmenu), language_menu); -+ gtk_option_menu_set_history (GTK_OPTION_MENU (tmpoptionmenu), rcc_current_language); -+ -+ tempwid = gtk_label_new (_("Language: ")); -+ gtk_box_pack_end (GTK_BOX (box), tempwid, FALSE, FALSE, 0); -+ } -+#endif /* HAVE_LIBRCC */ -+ -+ - gtk_widget_grab_focus (GTK_COMBO (hostedit)->entry); - - return (toolbar); -@@ -1132,6 +1231,16 @@ - add_history (current_wdata->combo, current_wdata->history, - current_wdata->histlen, current_wdata->request->directory); - -+#ifdef HAVE_LIBRCC -+ tempwid = gtk_menu_get_active (GTK_MENU (language_menu)); -+ num = GPOINTER_TO_INT (gtk_object_get_user_data (GTK_OBJECT (tempwid))); -+ gftp_set_language(current_wdata->request, num); -+ -+ tempwid = gtk_menu_get_active (GTK_MENU (charset_menu)); -+ num = GPOINTER_TO_INT (gtk_object_get_user_data (GTK_OBJECT (tempwid))); -+ gftp_set_charset(current_wdata->request, num); -+#endif /* HAVE_LIBRCC */ -+ - ftp_connect (current_wdata, current_wdata->request, 1); - } - -@@ -1270,6 +1379,8 @@ - { - GtkWidget *window, *ui; - -+ rccPatchInit(); -+ - /* We override the read color functions because we are using a GdkColor - structures to store the color. If I put this in lib/config_file.c, then - the core library would be dependant on Gtk+ being present */ -@@ -1336,6 +1447,8 @@ - GDK_THREADS_ENTER (); - gtk_main (); - GDK_THREADS_LEAVE (); -+ -+ rccPatchFree(); - - return (0); - } |