From c0adfdc41bc5bea580f85a29dc073678fcb617e8 Mon Sep 17 00:00:00 2001 From: Linus Torvalds Date: Thu, 22 Sep 2011 16:38:24 -0700 Subject: [PATCH] Fix progress bar during libdivecomputer imports As reported by Mauro Dreissig, the progress bar doesn't work and causes a SIGSEGV due to a missing allocation. The code broke when Dirk separated out the GUI from the core code, and I hadn't tried divecomputer downloads since. Reported-by: Mauro Dreissig Signed-off-by: Linus Torvalds --- gtk-gui.c | 4 ++-- libdivecomputer.c | 2 +- libdivecomputer.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/gtk-gui.c b/gtk-gui.c index 3994387..754a777 100644 --- a/gtk-gui.c +++ b/gtk-gui.c @@ -616,8 +616,8 @@ void import_dialog(GtkWidget *w, gpointer data) hbox = gtk_hbox_new(FALSE, 6); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), hbox, FALSE, TRUE, 3); - devicedata.progress->bar = gtk_progress_bar_new(); - gtk_container_add(GTK_CONTAINER(hbox), devicedata.progress->bar); + devicedata.progress.bar = gtk_progress_bar_new(); + gtk_container_add(GTK_CONTAINER(hbox), devicedata.progress.bar); gtk_widget_show_all(dialog); result = gtk_dialog_run(GTK_DIALOG(dialog)); diff --git a/libdivecomputer.c b/libdivecomputer.c index cf8b048..f645bff 100644 --- a/libdivecomputer.c +++ b/libdivecomputer.c @@ -369,7 +369,7 @@ static void event_cb(device_t *device, device_event_t event, const void *data, v printf("Event: waiting for user action\n"); break; case DEVICE_EVENT_PROGRESS: - update_progressbar(devdata->progress, + update_progressbar(&devdata->progress, (double) progress->current / (double) progress->maximum); break; case DEVICE_EVENT_DEVINFO: diff --git a/libdivecomputer.h b/libdivecomputer.h index 205f28e..abb09e2 100644 --- a/libdivecomputer.h +++ b/libdivecomputer.h @@ -22,7 +22,7 @@ typedef struct device_data_t { device_type_t type; const char *name, *devname; - progressbar_t *progress; + progressbar_t progress; device_devinfo_t devinfo; device_clock_t clock; } device_data_t; -- 2.45.2