From 3504b0162e4d43ec56937c809c4107bb36fba171 Mon Sep 17 00:00:00 2001 From: perry.werneck@gmail.com Date: Wed, 28 Mar 2012 02:59:17 +0000 Subject: [PATCH] Corrigindo segfault em windows --- src/gtk/dialog.c | 5 ++++- src/gtk/main.c | 3 ++- src/gtk/print.c | 1 + src/lib3270/selection.c | 19 +++++++++++++++---- 4 files changed, 22 insertions(+), 6 deletions(-) diff --git a/src/gtk/dialog.c b/src/gtk/dialog.c index b63caf9..2340962 100644 --- a/src/gtk/dialog.c +++ b/src/gtk/dialog.c @@ -387,10 +387,13 @@ { gchar *text = v3270_get_text(widget); - trace("Action %s activated on widget %p",gtk_action_get_name(action),widget); + trace("Action %s activated on widget %p text=%p",gtk_action_get_name(action),widget,text); if(!text) + { + g_warning("%s","Buffer contents was NULL"); return; + } save_dialog( action, widget, diff --git a/src/gtk/main.c b/src/gtk/main.c index 0077be6..bd770a9 100644 --- a/src/gtk/main.c +++ b/src/gtk/main.c @@ -102,13 +102,14 @@ static int initialize(void) return EINVAL; } + return 0; } int main (int argc, char *argv[]) { gtk_init(&argc, &argv); - if(!initialize()) + if(initialize()) return -1; configuration_init(); diff --git a/src/gtk/print.c b/src/gtk/print.c index 0419146..b280948 100644 --- a/src/gtk/print.c +++ b/src/gtk/print.c @@ -31,6 +31,7 @@ #include "globals.h" #include "v3270/v3270.h" + #include /*--[ Structs ]--------------------------------------------------------------------------------------*/ diff --git a/src/lib3270/selection.c b/src/lib3270/selection.c index eb3c0f3..f383202 100644 --- a/src/lib3270/selection.c +++ b/src/lib3270/selection.c @@ -317,12 +317,13 @@ static char * get_text(H3270 *hSession,unsigned char all) { int row, col, baddr; char *ret; - size_t sz = 0; + size_t buflen = (hSession->rows * (hSession->cols+1))+1; + size_t sz = 0; if(!lib3270_connected(hSession)) return NULL; - ret = malloc(hSession->rows * (hSession->cols+1)); + ret = malloc(buflen); baddr = 0; for(row=0;row < hSession->rows;row++) @@ -342,9 +343,19 @@ static char * get_text(H3270 *hSession,unsigned char all) if(cr) ret[sz++] = '\n'; } - ret[sz] = 0; - return realloc(ret,sz+1); + if(!sz) + { + free(ret); + return NULL; + } + + ret[sz++] = 0; + + if(sz != buflen) + ret = realloc(ret,sz); + + return ret; } LIB3270_EXPORT char * lib3270_get_text(H3270 *hSession) -- libgit2 0.21.2