From 14417e0ee8e9d051a74d3e58e27e837908456700 Mon Sep 17 00:00:00 2001 From: Perry Werneck Date: Fri, 21 Oct 2016 11:59:47 -0200 Subject: [PATCH] Corrigindo erro de charset no plugin ooRexx --- pw3270.cbp | 1 - src/classlib/session.cc | 22 ++++++++++++++++++++-- src/lib3270/iocalls.c | 2 ++ src/plugins/rx3270/pluginmain.cc | 1 + src/plugins/rx3270/text.cc | 95 ----------------------------------------------------------------------------------------------- src/pw3270/trace.c | 10 +++++++++- 6 files changed, 32 insertions(+), 99 deletions(-) delete mode 100644 src/plugins/rx3270/text.cc diff --git a/pw3270.cbp b/pw3270.cbp index e44be4f..9cc05b9 100644 --- a/pw3270.cbp +++ b/pw3270.cbp @@ -416,7 +416,6 @@ - diff --git a/src/classlib/session.cc b/src/classlib/session.cc index 9a4c168..5f4c279 100644 --- a/src/classlib/session.cc +++ b/src/classlib/session.cc @@ -472,10 +472,28 @@ } else { - rc = str; + char * text = strdup(str); + for(char *ptr = text;*ptr;ptr++) + { + if(*ptr < ' ' || *ptr > 128) + { + *ptr = '?'; + } + } + rc = text; + free(text); } #else - rc = str; + char * text = strdup(str); + for(char *ptr = text;*ptr;ptr++) + { + if(*ptr < ' ' || *ptr > 128) + { + *ptr = '?'; + } + } + rc = text; + free(text); #endif // HAVE_ICONV return rc; diff --git a/src/lib3270/iocalls.c b/src/lib3270/iocalls.c index d8f9fe8..945c19e 100644 --- a/src/lib3270/iocalls.c +++ b/src/lib3270/iocalls.c @@ -686,6 +686,8 @@ LIB3270_EXPORT int lib3270_wait_for_ready(H3270 *hSession, int seconds) { time_t end = time(0)+seconds; + event_dispatcher(hSession,0); + if(!lib3270_lock_status(hSession)) return 0; diff --git a/src/plugins/rx3270/pluginmain.cc b/src/plugins/rx3270/pluginmain.cc index b5548e6..478eb4c 100644 --- a/src/plugins/rx3270/pluginmain.cc +++ b/src/plugins/rx3270/pluginmain.cc @@ -523,6 +523,7 @@ extern "C" plugin::plugin(H3270 *hSession) : session() { this->hSession = hSession; + set_display_charset(); } plugin::~plugin() diff --git a/src/plugins/rx3270/text.cc b/src/plugins/rx3270/text.cc deleted file mode 100644 index 1d7c141..0000000 --- a/src/plugins/rx3270/text.cc +++ /dev/null @@ -1,95 +0,0 @@ -/* - * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 - * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a - * aplicativos mainframe. Registro no INPI sob o nome G3270. - * - * Copyright (C) <2008> - * - * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob - * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela - * Free Software Foundation. - * - * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER - * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO - * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para - * obter mais detalhes. - * - * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este - * programa; se não, escreva para a Free Software Foundation, Inc., 59 Temple - * Place, Suite 330, Boston, MA, 02111-1307, USA - * - * Este programa está nomeado como text.cc e possui - linhas de código. - * - * Contatos: - * - * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) - * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) - * - */ - - #include "rx3270.h" - #include - - #include - -/*--[ Implement ]------------------------------------------------------------------------------------*/ - -char * rx3270::get_3270_string(const char *str) -{ -#ifdef HAVE_ICONV - if(conv2Host != (iconv_t)(-1)) - { - size_t in = strlen((char *) str); - size_t out = (in << 1); - char *ptr; - char *buffer = (char *) malloc(out); - char *ret; - - memset(ptr=buffer,0,out); - - iconv(conv2Host,NULL,NULL,NULL,NULL); // Reset state - - if(iconv(conv2Host,(ICONV_CONST char **) &str,&in,&ptr,&out) == ((size_t) -1)) - ret = strdup((char *) str); - else - ret = strdup(buffer); - - free(buffer); - - return ret; - } -#endif // HAVE_ICONV - - return strdup(str); -} - -char * rx3270::get_local_string(const char *str) -{ -#ifdef HAVE_ICONV - if(conv2Local != (iconv_t)(-1)) - { - size_t in = strlen((char *) str); - size_t out = (in << 1); - char *ptr; - char *buffer = (char *) malloc(out); - char *ret; - - memset(ptr=buffer,0,out); - - iconv(conv2Local,NULL,NULL,NULL,NULL); // Reset state - - if(iconv(conv2Local,(ICONV_CONST char **) &str,&in,&ptr,&out) == ((size_t) -1)) - ret = strdup((char *) str); - else - ret = strdup(buffer); - - free(buffer); - - return ret; - } -#endif // HAVE_ICONV - - return strdup(str); -} - - diff --git a/src/pw3270/trace.c b/src/pw3270/trace.c index 2951543..7b61cec 100644 --- a/src/pw3270/trace.c +++ b/src/pw3270/trace.c @@ -418,7 +418,15 @@ static void destroy(GtkObject *widget) gtk_text_buffer_get_end_iter(hwnd->text,&itr); msg = g_strdup_vprintf(fmt,args); - gtk_text_buffer_insert(hwnd->text,&itr,msg,strlen(msg)); + + if(g_utf8_validate(msg,strlen(msg),NULL)) + { + gtk_text_buffer_insert(hwnd->text,&itr,msg,strlen(msg)); + } + else + { + gtk_text_buffer_insert(hwnd->text,&itr,"** Invalid UTF8 String **",-1); + } g_free(msg); gtk_text_buffer_get_end_iter(hwnd->text,&itr); -- libgit2 0.21.2