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 | 264 | /* Update the model name. */ |
265 | 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 | 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 | 635 | trace("%s: title=%s fmt=%s",__FUNCTION__,"3270 Error",fmt); |
635 | 636 | |
636 | 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 | 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 | 167 | char *r; |
168 | 168 | #if defined(HAVE_VASPRINTF) /*[*/ |
169 | 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 | 172 | return r; |
173 | 173 | #else /*][*/ |
174 | 174 | char buf[16384]; |
... | ... | @@ -1098,7 +1098,7 @@ LIB3270_EXPORT void * lib3270_realloc(void *p, int len) |
1098 | 1098 | { |
1099 | 1099 | p = realloc(p, len); |
1100 | 1100 | if(!p) |
1101 | - Error(NULL,"Out of memory"); | |
1101 | + Error(NULL,"Out of memory in %s",__FUNCTION__); | |
1102 | 1102 | return p; |
1103 | 1103 | } |
1104 | 1104 | |
... | ... | @@ -1114,7 +1114,7 @@ LIB3270_EXPORT void * lib3270_calloc(int elsize, int nelem, void *ptr) |
1114 | 1114 | if(ptr) |
1115 | 1115 | memset(ptr,0,sz); |
1116 | 1116 | else |
1117 | - Error(NULL,"Out of memory"); | |
1117 | + Error(NULL,"Out of memory in %s",__FUNCTION__); | |
1118 | 1118 | |
1119 | 1119 | return ptr; |
1120 | 1120 | } |
... | ... | @@ -1127,7 +1127,7 @@ LIB3270_EXPORT void * lib3270_malloc(int len) |
1127 | 1127 | r = malloc(len); |
1128 | 1128 | if (r == (char *)NULL) |
1129 | 1129 | { |
1130 | - Error(NULL,"Out of memory"); | |
1130 | + Error(NULL,"Out of memory in %s",__FUNCTION__); | |
1131 | 1131 | return 0; |
1132 | 1132 | } |
1133 | 1133 | |
... | ... | @@ -1142,7 +1142,7 @@ void * Calloc(size_t nelem, size_t elsize) |
1142 | 1142 | char * r = malloc(sz); |
1143 | 1143 | |
1144 | 1144 | if(!r) |
1145 | - Error(NULL,"Out of memory"); | |
1145 | + Error(NULL,"Out of memory in %s",__FUNCTION__); | |
1146 | 1146 | |
1147 | 1147 | memset(r, 0, sz); |
1148 | 1148 | return r; | ... | ... |
src/pw3270/common/config.c
... | ... | @@ -330,21 +330,19 @@ gchar * get_last_error_msg(void) |
330 | 330 | #ifdef WIN_REGISTRY_ENABLED |
331 | 331 | |
332 | 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 | 338 | if(!registry_open_key(group,KEY_READ,&key_handle)) |
339 | 339 | return g_strdup(def); |
340 | 340 | |
341 | 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 | 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 | 220 | GtkMessageType msgtype = GTK_MESSAGE_WARNING; |
221 | 221 | GtkButtonsType buttons = GTK_BUTTONS_OK; |
222 | 222 | |
223 | + trace("%s: widget=%p",__FUNCTION__,widget); | |
224 | + | |
223 | 225 | if(widget && GTK_IS_WIDGET(widget)) |
224 | 226 | toplevel = gtk_widget_get_toplevel(GTK_WIDGET(widget)); |
225 | 227 | |
... | ... | @@ -743,6 +745,8 @@ static void v3270_init(v3270 *widget) |
743 | 745 | { |
744 | 746 | widget->host = lib3270_session_new(""); |
745 | 747 | |
748 | + trace("%s",__FUNCTION__); | |
749 | + | |
746 | 750 | if(widget->host->sz != sizeof(H3270)) |
747 | 751 | { |
748 | 752 | g_error( _( "Unexpected signature in H3270 object, possible version mismatch in lib3270") ); |
... | ... | @@ -782,6 +786,7 @@ static void v3270_init(v3270 *widget) |
782 | 786 | // Setup events |
783 | 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 | 792 | GtkWidget * v3270_new(void) |
... | ... | @@ -1133,6 +1138,12 @@ void v3270_set_font_family(GtkWidget *widget, const gchar *name) |
1133 | 1138 | |
1134 | 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 | 1147 | if(terminal->font_family) |
1137 | 1148 | { |
1138 | 1149 | if(!g_strcasecmp(terminal->font_family,name)) |
... | ... | @@ -1141,12 +1152,6 @@ void v3270_set_font_family(GtkWidget *widget, const gchar *name) |
1141 | 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 | 1155 | terminal->font_family = g_strdup(name); |
1151 | 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 | 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 | 136 | if(fmt) |
132 | 137 | { |
133 | 138 | gchar *text = g_strdup_vprintf(fmt,args); |
... | ... | @@ -138,52 +143,6 @@ |
138 | 143 | { |
139 | 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 | 146 | return 0; |
188 | 147 | } |
189 | 148 | |
... | ... | @@ -418,6 +377,7 @@ |
418 | 377 | for(f=0;f<G_N_ELEMENTS(widget_config);f++) |
419 | 378 | { |
420 | 379 | gchar *str = get_string_from_config("terminal",widget_config[f].key,NULL); |
380 | + trace("str=%p strlen=%d",str,strlen(str)); | |
421 | 381 | widget_config[f].set(widget->terminal,str); |
422 | 382 | if(str) |
423 | 383 | g_free(str); | ... | ... |