Commit 9fd81a881469452345d56de8ba28b8794638279c
1 parent
db9535b4
Exists in
master
and in
5 other branches
Corrigindo segfaults aleatorios em windows 64
Showing
5 changed files
with
38 additions
and
69 deletions
Show diff stats
src/lib3270/screen.c
@@ -264,6 +264,7 @@ void update_model_info(H3270 *session, int model, int cols, int rows) | @@ -264,6 +264,7 @@ void update_model_info(H3270 *session, int model, int cols, int rows) | ||
264 | /* Update the model name. */ | 264 | /* Update the model name. */ |
265 | (void) sprintf(session->model_name, "327%c-%d%s",session->m3279 ? '9' : '8',session->model_num,session->extended ? "-E" : ""); | 265 | (void) sprintf(session->model_name, "327%c-%d%s",session->m3279 ? '9' : '8',session->model_num,session->extended ? "-E" : ""); |
266 | 266 | ||
267 | + trace("%s: %p",__FUNCTION__,session->update_model); | ||
267 | session->update_model(session, session->model_name,session->model_num,rows,cols); | 268 | session->update_model(session, session->model_name,session->model_num,rows,cols); |
268 | } | 269 | } |
269 | 270 | ||
@@ -634,7 +635,12 @@ void Error(H3270 *session, const char *fmt, ...) | @@ -634,7 +635,12 @@ void Error(H3270 *session, const char *fmt, ...) | ||
634 | trace("%s: title=%s fmt=%s",__FUNCTION__,"3270 Error",fmt); | 635 | trace("%s: title=%s fmt=%s",__FUNCTION__,"3270 Error",fmt); |
635 | 636 | ||
636 | va_start(arg_ptr, fmt); | 637 | va_start(arg_ptr, fmt); |
637 | - popup_handler(session,session->widget,LIB3270_NOTIFY_ERROR, _( "3270 Error" ),NULL,fmt,arg_ptr); | 638 | + |
639 | + if(session && session->sz == sizeof(H3270)) | ||
640 | + popup_handler(session,session->widget,LIB3270_NOTIFY_ERROR, _( "3270 Error" ),NULL,fmt,arg_ptr); | ||
641 | + else | ||
642 | + popup_handler(NULL,NULL,LIB3270_NOTIFY_ERROR, _( "3270 Error" ),NULL,fmt,arg_ptr); | ||
643 | + | ||
638 | va_end(arg_ptr); | 644 | va_end(arg_ptr); |
639 | 645 | ||
640 | } | 646 | } |
src/lib3270/util.c
@@ -167,8 +167,8 @@ char * xs_vsprintf(const char *fmt, va_list args) | @@ -167,8 +167,8 @@ char * xs_vsprintf(const char *fmt, va_list args) | ||
167 | char *r; | 167 | char *r; |
168 | #if defined(HAVE_VASPRINTF) /*[*/ | 168 | #if defined(HAVE_VASPRINTF) /*[*/ |
169 | (void) vasprintf(&r, fmt, args); | 169 | (void) vasprintf(&r, fmt, args); |
170 | - if (r == CN) | ||
171 | - Error("Out of memory"); | 170 | + if(!r) |
171 | + Error(NULL,"Out of memory in %s",__FUNCTION__); | ||
172 | return r; | 172 | return r; |
173 | #else /*][*/ | 173 | #else /*][*/ |
174 | char buf[16384]; | 174 | char buf[16384]; |
@@ -1098,7 +1098,7 @@ LIB3270_EXPORT void * lib3270_realloc(void *p, int len) | @@ -1098,7 +1098,7 @@ LIB3270_EXPORT void * lib3270_realloc(void *p, int len) | ||
1098 | { | 1098 | { |
1099 | p = realloc(p, len); | 1099 | p = realloc(p, len); |
1100 | if(!p) | 1100 | if(!p) |
1101 | - Error(NULL,"Out of memory"); | 1101 | + Error(NULL,"Out of memory in %s",__FUNCTION__); |
1102 | return p; | 1102 | return p; |
1103 | } | 1103 | } |
1104 | 1104 | ||
@@ -1114,7 +1114,7 @@ LIB3270_EXPORT void * lib3270_calloc(int elsize, int nelem, void *ptr) | @@ -1114,7 +1114,7 @@ LIB3270_EXPORT void * lib3270_calloc(int elsize, int nelem, void *ptr) | ||
1114 | if(ptr) | 1114 | if(ptr) |
1115 | memset(ptr,0,sz); | 1115 | memset(ptr,0,sz); |
1116 | else | 1116 | else |
1117 | - Error(NULL,"Out of memory"); | 1117 | + Error(NULL,"Out of memory in %s",__FUNCTION__); |
1118 | 1118 | ||
1119 | return ptr; | 1119 | return ptr; |
1120 | } | 1120 | } |
@@ -1127,7 +1127,7 @@ LIB3270_EXPORT void * lib3270_malloc(int len) | @@ -1127,7 +1127,7 @@ LIB3270_EXPORT void * lib3270_malloc(int len) | ||
1127 | r = malloc(len); | 1127 | r = malloc(len); |
1128 | if (r == (char *)NULL) | 1128 | if (r == (char *)NULL) |
1129 | { | 1129 | { |
1130 | - Error(NULL,"Out of memory"); | 1130 | + Error(NULL,"Out of memory in %s",__FUNCTION__); |
1131 | return 0; | 1131 | return 0; |
1132 | } | 1132 | } |
1133 | 1133 | ||
@@ -1142,7 +1142,7 @@ void * Calloc(size_t nelem, size_t elsize) | @@ -1142,7 +1142,7 @@ void * Calloc(size_t nelem, size_t elsize) | ||
1142 | char * r = malloc(sz); | 1142 | char * r = malloc(sz); |
1143 | 1143 | ||
1144 | if(!r) | 1144 | if(!r) |
1145 | - Error(NULL,"Out of memory"); | 1145 | + Error(NULL,"Out of memory in %s",__FUNCTION__); |
1146 | 1146 | ||
1147 | memset(r, 0, sz); | 1147 | memset(r, 0, sz); |
1148 | return r; | 1148 | return r; |
src/pw3270/common/config.c
@@ -330,21 +330,19 @@ gchar * get_last_error_msg(void) | @@ -330,21 +330,19 @@ gchar * get_last_error_msg(void) | ||
330 | #ifdef WIN_REGISTRY_ENABLED | 330 | #ifdef WIN_REGISTRY_ENABLED |
331 | 331 | ||
332 | HKEY key_handle; | 332 | HKEY key_handle; |
333 | - BYTE data[4096]; | ||
334 | - unsigned long datatype; | ||
335 | - unsigned long datalen = sizeof(data); | ||
336 | - gchar *ret = NULL; | 333 | + BYTE data[4097]; |
334 | + unsigned long datalen = 4096; | ||
335 | + unsigned long datatype; | ||
336 | + gchar * ret = NULL; | ||
337 | 337 | ||
338 | if(!registry_open_key(group,KEY_READ,&key_handle)) | 338 | if(!registry_open_key(group,KEY_READ,&key_handle)) |
339 | return g_strdup(def); | 339 | return g_strdup(def); |
340 | 340 | ||
341 | if(RegQueryValueExA(key_handle,key,NULL,&datatype,data,&datalen) == ERROR_SUCCESS) | 341 | if(RegQueryValueExA(key_handle,key,NULL,&datatype,data,&datalen) == ERROR_SUCCESS) |
342 | { | 342 | { |
343 | - ret = (char *) malloc(datalen+1); | ||
344 | - | ||
345 | - memcpy(ret,data,datalen); | ||
346 | - ret[datalen+1] = 0; | ||
347 | -// trace("%s\\%s=\"%s\"",group,key,ret); | 343 | + data[datalen+1] = 0; |
344 | + ret = g_strdup(data); | ||
345 | + trace("datalen=%d",datalen); | ||
348 | } | 346 | } |
349 | else if(def) | 347 | else if(def) |
350 | { | 348 | { |
src/pw3270/v3270/widget.c
@@ -220,6 +220,8 @@ void v3270_popup_message(GtkWidget *widget, LIB3270_NOTIFY type , const gchar *t | @@ -220,6 +220,8 @@ void v3270_popup_message(GtkWidget *widget, LIB3270_NOTIFY type , const gchar *t | ||
220 | GtkMessageType msgtype = GTK_MESSAGE_WARNING; | 220 | GtkMessageType msgtype = GTK_MESSAGE_WARNING; |
221 | GtkButtonsType buttons = GTK_BUTTONS_OK; | 221 | GtkButtonsType buttons = GTK_BUTTONS_OK; |
222 | 222 | ||
223 | + trace("%s: widget=%p",__FUNCTION__,widget); | ||
224 | + | ||
223 | if(widget && GTK_IS_WIDGET(widget)) | 225 | if(widget && GTK_IS_WIDGET(widget)) |
224 | toplevel = gtk_widget_get_toplevel(GTK_WIDGET(widget)); | 226 | toplevel = gtk_widget_get_toplevel(GTK_WIDGET(widget)); |
225 | 227 | ||
@@ -743,6 +745,8 @@ static void v3270_init(v3270 *widget) | @@ -743,6 +745,8 @@ static void v3270_init(v3270 *widget) | ||
743 | { | 745 | { |
744 | widget->host = lib3270_session_new(""); | 746 | widget->host = lib3270_session_new(""); |
745 | 747 | ||
748 | + trace("%s",__FUNCTION__); | ||
749 | + | ||
746 | if(widget->host->sz != sizeof(H3270)) | 750 | if(widget->host->sz != sizeof(H3270)) |
747 | { | 751 | { |
748 | g_error( _( "Unexpected signature in H3270 object, possible version mismatch in lib3270") ); | 752 | g_error( _( "Unexpected signature in H3270 object, possible version mismatch in lib3270") ); |
@@ -782,6 +786,7 @@ static void v3270_init(v3270 *widget) | @@ -782,6 +786,7 @@ static void v3270_init(v3270 *widget) | ||
782 | // Setup events | 786 | // Setup events |
783 | gtk_widget_add_events(GTK_WIDGET(widget),GDK_KEY_PRESS_MASK|GDK_KEY_RELEASE_MASK|GDK_BUTTON_PRESS_MASK|GDK_BUTTON_MOTION_MASK|GDK_BUTTON_RELEASE_MASK|GDK_POINTER_MOTION_MASK|GDK_ENTER_NOTIFY_MASK); | 787 | gtk_widget_add_events(GTK_WIDGET(widget),GDK_KEY_PRESS_MASK|GDK_KEY_RELEASE_MASK|GDK_BUTTON_PRESS_MASK|GDK_BUTTON_MOTION_MASK|GDK_BUTTON_RELEASE_MASK|GDK_POINTER_MOTION_MASK|GDK_ENTER_NOTIFY_MASK); |
784 | 788 | ||
789 | + trace("%s",__FUNCTION__); | ||
785 | } | 790 | } |
786 | 791 | ||
787 | GtkWidget * v3270_new(void) | 792 | GtkWidget * v3270_new(void) |
@@ -1133,6 +1138,12 @@ void v3270_set_font_family(GtkWidget *widget, const gchar *name) | @@ -1133,6 +1138,12 @@ void v3270_set_font_family(GtkWidget *widget, const gchar *name) | ||
1133 | 1138 | ||
1134 | terminal = GTK_V3270(widget); | 1139 | terminal = GTK_V3270(widget); |
1135 | 1140 | ||
1141 | + if(!name) | ||
1142 | + { | ||
1143 | + // TODO (perry#3#): Get default font family from currrent style | ||
1144 | + name = "courier new"; | ||
1145 | + } | ||
1146 | + | ||
1136 | if(terminal->font_family) | 1147 | if(terminal->font_family) |
1137 | { | 1148 | { |
1138 | if(!g_strcasecmp(terminal->font_family,name)) | 1149 | if(!g_strcasecmp(terminal->font_family,name)) |
@@ -1141,12 +1152,6 @@ void v3270_set_font_family(GtkWidget *widget, const gchar *name) | @@ -1141,12 +1152,6 @@ void v3270_set_font_family(GtkWidget *widget, const gchar *name) | ||
1141 | terminal->font_family = NULL; | 1152 | terminal->font_family = NULL; |
1142 | } | 1153 | } |
1143 | 1154 | ||
1144 | - if(!name) | ||
1145 | - { | ||
1146 | - // TODO (perry#3#): Get default font family from currrent style | ||
1147 | - name = "courier new"; | ||
1148 | - } | ||
1149 | - | ||
1150 | terminal->font_family = g_strdup(name); | 1155 | terminal->font_family = g_strdup(name); |
1151 | terminal->font_weight = lib3270_get_toggle(terminal->host,LIB3270_TOGGLE_BOLD) ? CAIRO_FONT_WEIGHT_BOLD : CAIRO_FONT_WEIGHT_NORMAL; | 1156 | terminal->font_weight = lib3270_get_toggle(terminal->host,LIB3270_TOGGLE_BOLD) ? CAIRO_FONT_WEIGHT_BOLD : CAIRO_FONT_WEIGHT_NORMAL; |
1152 | 1157 |
src/pw3270/window.c
@@ -126,8 +126,13 @@ | @@ -126,8 +126,13 @@ | ||
126 | return 0; | 126 | return 0; |
127 | } | 127 | } |
128 | 128 | ||
129 | - static int popup_handler(H3270 *session, void *widget, LIB3270_NOTIFY type, const char *title, const char *msg, const char *fmt, va_list args) | 129 | + static int popup_handler(H3270 *session, void *terminal, LIB3270_NOTIFY type, const char *title, const char *msg, const char *fmt, va_list args) |
130 | { | 130 | { |
131 | + GtkWidget *widget = NULL; | ||
132 | + | ||
133 | + if(session && terminal && GTK_IS_V3270(terminal)) | ||
134 | + widget = GTK_WIDGET(terminal); | ||
135 | + | ||
131 | if(fmt) | 136 | if(fmt) |
132 | { | 137 | { |
133 | gchar *text = g_strdup_vprintf(fmt,args); | 138 | gchar *text = g_strdup_vprintf(fmt,args); |
@@ -138,52 +143,6 @@ | @@ -138,52 +143,6 @@ | ||
138 | { | 143 | { |
139 | v3270_popup_message(GTK_WIDGET(widget),type,title,msg,NULL); | 144 | v3270_popup_message(GTK_WIDGET(widget),type,title,msg,NULL); |
140 | } | 145 | } |
141 | -/* | ||
142 | - GtkWidget * dialog; | ||
143 | - GtkWidget * toplevel = NULL; | ||
144 | - GtkMessageType msgtype = GTK_MESSAGE_WARNING; | ||
145 | - GtkButtonsType buttons = GTK_BUTTONS_OK; | ||
146 | - gchar * text = NULL; | ||
147 | - | ||
148 | - if(fmt) | ||
149 | - text = g_strdup_vprintf(fmt,args); | ||
150 | - | ||
151 | - if(widget && GTK_IS_WIDGET(widget)) | ||
152 | - toplevel = gtk_widget_get_toplevel(GTK_WIDGET(widget)); | ||
153 | - | ||
154 | - if(type == LIB3270_NOTIFY_CRITICAL) | ||
155 | - { | ||
156 | - msgtype = GTK_MESSAGE_ERROR; | ||
157 | - buttons = GTK_BUTTONS_CLOSE; | ||
158 | - } | ||
159 | - | ||
160 | - if(!title) | ||
161 | - title = _( "Error" ); | ||
162 | - | ||
163 | - if(msg) | ||
164 | - { | ||
165 | - dialog = gtk_message_dialog_new_with_markup(GTK_WINDOW(toplevel),GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,msgtype,buttons,"%s",msg); | ||
166 | - | ||
167 | - if(text) | ||
168 | - gtk_message_dialog_format_secondary_markup(GTK_MESSAGE_DIALOG(dialog),"%s",text); | ||
169 | - } | ||
170 | - else if(text) | ||
171 | - { | ||
172 | - dialog = gtk_message_dialog_new_with_markup(GTK_WINDOW(toplevel),GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,msgtype,buttons,"%s",text); | ||
173 | - } | ||
174 | - else | ||
175 | - { | ||
176 | - dialog = gtk_message_dialog_new_with_markup(GTK_WINDOW(toplevel),GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,msgtype,buttons,"%s",title); | ||
177 | - } | ||
178 | - | ||
179 | - if(text) | ||
180 | - g_free(text); | ||
181 | - | ||
182 | - gtk_window_set_title(GTK_WINDOW(dialog),title); | ||
183 | - gtk_widget_show_all(dialog); | ||
184 | - gtk_dialog_run(GTK_DIALOG (dialog)); | ||
185 | - gtk_widget_destroy(dialog); | ||
186 | -*/ | ||
187 | return 0; | 146 | return 0; |
188 | } | 147 | } |
189 | 148 | ||
@@ -418,6 +377,7 @@ | @@ -418,6 +377,7 @@ | ||
418 | for(f=0;f<G_N_ELEMENTS(widget_config);f++) | 377 | for(f=0;f<G_N_ELEMENTS(widget_config);f++) |
419 | { | 378 | { |
420 | gchar *str = get_string_from_config("terminal",widget_config[f].key,NULL); | 379 | gchar *str = get_string_from_config("terminal",widget_config[f].key,NULL); |
380 | + trace("str=%p strlen=%d",str,strlen(str)); | ||
421 | widget_config[f].set(widget->terminal,str); | 381 | widget_config[f].set(widget->terminal,str); |
422 | if(str) | 382 | if(str) |
423 | g_free(str); | 383 | g_free(str); |