]> git.pld-linux.org Git - packages/xsane.git/blob - xsane-0.999-coverity.patch
f6350fe985f0c60d81378644bc760769d0dd84e2
[packages/xsane.git] / xsane-0.999-coverity.patch
1 From 9fe09c0e0746067f9e9774229b3d0beb35c5766b Mon Sep 17 00:00:00 2001
2 From: Nils Philippsen <nils@redhat.com>
3 Date: Wed, 2 Apr 2014 14:54:05 +0200
4 Subject: [PATCH] patch: coverity
5
6 Squashed commit of the following:
7
8 commit e26d784a5217d1609e774678d8abaeb2e1ecdadc
9 Author: Nils Philippsen <nils@redhat.com>
10 Date:   Tue Mar 11 10:28:02 2014 +0100
11
12     ensure loop is run at least once while scaling
13
14 commit e5bf8c8a659a7b03ae3eb130ebfaad292e16816d
15 Author: Nils Philippsen <nils@redhat.com>
16 Date:   Thu Feb 27 15:07:42 2014 +0100
17
18     remove stray semicolon
19
20 commit ad928333ba038051ca0a405470dadeaa0f365b95
21 Author: Nils Philippsen <nils@redhat.com>
22 Date:   Thu Feb 27 15:06:17 2014 +0100
23
24     use actual pointer type in realloc()
25
26 commit 11dfb289d03555218318ce1a284c1165bbc58b22
27 Author: Nils Philippsen <nils@redhat.com>
28 Date:   Tue Feb 25 17:42:54 2014 +0100
29
30     don't overflow size expression for allocation
31
32 commit 5daccfc14f129c632f8409a89903d21c5495dd2f
33 Author: Nils Philippsen <nils@redhat.com>
34 Date:   Tue Feb 25 17:18:58 2014 +0100
35
36     don't leak file descriptors and other resources
37
38 commit 034023d7aaac378b8ab02051d11392c639154842
39 Author: Nils Philippsen <nils@redhat.com>
40 Date:   Tue Feb 25 16:04:28 2014 +0100
41
42     don't overrun buffers
43
44 commit f7454d62b5206e2100e8569e04ff4a6868cbd909
45 Author: Nils Philippsen <nils@redhat.com>
46 Date:   Tue Feb 25 15:56:40 2014 +0100
47
48     check if files actually could be opened
49
50 commit de30cacd285c02382a32dc48cf9fe015223a57f7
51 Author: Nils Philippsen <nils@redhat.com>
52 Date:   Tue Feb 25 15:47:51 2014 +0100
53
54     handle negative return values of some calls
55
56 commit b46a520ba85bda776b1a91de9f842ed96d97fa73
57 Author: Nils Philippsen <nils@redhat.com>
58 Date:   Tue Feb 25 11:54:31 2014 +0100
59
60     only attempt to close successfully opened files
61
62 commit bb6a8ccab418f89fa6fb367874f84aa56195cca0
63 Author: Nils Philippsen <nils@redhat.com>
64 Date:   Tue Feb 25 11:54:15 2014 +0100
65
66     bail out early if memory can't be allocated
67
68 commit 9b1e34c1d099c0a7acf7bd5aec8e3f0c2d2eafa8
69 Author: Nils Philippsen <nils@redhat.com>
70 Date:   Tue Feb 25 11:53:11 2014 +0100
71
72     gtk_entry_get_text() isn't supposed to return NULL
73
74 commit bc7553caaea1955e7fa48f3a2f4c0773d40204c3
75 Author: Nils Philippsen <nils@redhat.com>
76 Date:   Tue Feb 25 11:00:11 2014 +0100
77
78     negate comparison instead of operand
79
80 commit d1d4675a416383d808def730ade4f6b5b1a493b8
81 Author: Nils Philippsen <nils@redhat.com>
82 Date:   Tue Feb 25 10:55:42 2014 +0100
83
84     use int types for fgetc() results
85
86 commit cbdc2df85367c27ff56fb9cdd77a61c6d82be0e1
87 Author: Nils Philippsen <nils@redhat.com>
88 Date:   Tue Feb 25 10:36:53 2014 +0100
89
90     avoid freeing static strings
91
92 commit 0c377b9658daa5dcdbc6c260baa4e31237202f3e
93 Author: Nils Philippsen <nils@redhat.com>
94 Date:   Wed Feb 19 16:10:35 2014 +0100
95
96     use guchar* for PNG profile buffer
97
98 commit 70152131771b891fe04b3087e3b73c42e6d5ebbe
99 Author: Nils Philippsen <nils@redhat.com>
100 Date:   Wed Feb 19 16:09:46 2014 +0100
101
102     cast time_t into long instead of int
103
104 commit 0ac0683bcba7d8cf4e786abc3abe9c3e3c7d60a0
105 Author: Nils Philippsen <nils@redhat.com>
106 Date:   Tue Feb 18 17:55:02 2014 +0100
107
108     use glib macros where ints are transported in pointers
109
110 commit 8e85947fe5a592a3f938ab5bb2dc79488b638515
111 Author: Nils Philippsen <nils@redhat.com>
112 Date:   Mon Feb 17 13:42:13 2014 +0100
113
114     handle return values of some file related system calls
115
116 commit f4ba79f720a9a1e4a3caddc77d0de19a7d2fb75c
117 Author: Nils Philippsen <nils@redhat.com>
118 Date:   Mon Feb 17 12:07:09 2014 +0100
119
120     avoid leaking resources
121 ---
122  src/xsane-back-gtk.c          |  75 +++++++++++++---
123  src/xsane-batch-scan.c        |  41 ++++-----
124  src/xsane-email-project.c     |  83 +++++++++---------
125  src/xsane-fax-project.c       |  14 ++-
126  src/xsane-front-gtk.c         |  42 ++++-----
127  src/xsane-multipage-project.c |   5 ++
128  src/xsane-preview.c           |  34 ++++----
129  src/xsane-save.c              | 166 ++++++++++++++++++++++-------------
130  src/xsane-scan.c              |  17 ++--
131  src/xsane-setup.c             |  70 +++++++--------
132  src/xsane-text.h              |   1 +
133  src/xsane-viewer.c            | 199 +++++++++++++++++++++++-------------------
134  src/xsane.c                   |  65 ++++++++------
135  13 files changed, 478 insertions(+), 334 deletions(-)
136
137 diff --git a/src/xsane-back-gtk.c b/src/xsane-back-gtk.c
138 index 6ef1506..6452f4b 100644
139 --- a/src/xsane-back-gtk.c
140 +++ b/src/xsane-back-gtk.c
141 @@ -40,6 +40,7 @@ SANE_Status xsane_control_option(SANE_Handle handle, SANE_Int option, SANE_Actio
142  const SANE_Option_Descriptor *xsane_get_option_descriptor(SANE_Handle handle, SANE_Int option);
143  const char *xsane_back_gtk_unit_string(SANE_Unit unit);
144  void xsane_back_gtk_set_tooltip(GtkTooltips *tooltips, GtkWidget *widget, const gchar *desc);
145 +static int xsane_back_gtk_ensure_dir(const char *path);
146  int xsane_back_gtk_make_path(size_t buf_size, char *buf, const char *prog_name, const char *dir_name,
147                               const char *prefix, const char *dev_name, const char *postfix, int location);
148  void xsane_back_gtk_set_option(int opt_num, void *val, SANE_Action action);
149 @@ -245,11 +246,47 @@ void xsane_back_gtk_set_tooltip(GtkTooltips *tooltips, GtkWidget *widget, const
150  
151  /* ----------------------------------------------------------------------------------------------------------------- */
152  
153 +static int xsane_back_gtk_ensure_dir(const char *path)
154 +{
155 +  struct stat statbuf;
156 +
157 +  if (stat(path, &statbuf) < 0)
158 +  {
159 +    if (errno != ENOENT)
160 +    {
161 +      /* stat() failed and it wasn't because the file doesn't exist */
162 +      return -1;
163 +    }
164 +    else
165 +    {
166 +      /* if path doesn't exist, create directory */
167 +      if (mkdir(path, 0777) < 0)
168 +      {
169 +        /* mkdir() failed */
170 +        return -2;
171 +      }
172 +      else
173 +      {
174 +        return 0;
175 +      }
176 +    }
177 +  }
178 +
179 +  if (S_ISDIR(statbuf.st_mode))
180 +  {
181 +    return 0;
182 +  }
183 +
184 +  /* path exists and isn't a directory */
185 +  return -3;
186 +}
187 +
188  int xsane_back_gtk_make_path(size_t buf_size, char *buf, const char *prog_name, const char *dir_name,
189                               const char *prefix, const char *dev_name, const char *postfix, int location)
190  {
191   size_t len, extra;
192   int i;
193 + char msgbuf[TEXTBUFSIZE];
194  
195    DBG(DBG_proc, "xsane_back_gtk_make_path\n");
196  
197 @@ -263,7 +300,10 @@ int xsane_back_gtk_make_path(size_t buf_size, char *buf, const char *prog_name,
198      {
199        snprintf(buf, buf_size-2, "%s", STRINGIFY(XSANE_FIXED_APPDATA_DIR));
200      }
201 -    mkdir(buf, 0777);  /* ensure ~/.sane directory exists */
202 +    if (xsane_back_gtk_ensure_dir(buf))
203 +    {
204 +      goto dir_failed;
205 +    }
206    }
207    else if (location == XSANE_PATH_SYSTEM) /* make path to system file */
208    {
209 @@ -290,7 +330,10 @@ int xsane_back_gtk_make_path(size_t buf_size, char *buf, const char *prog_name,
210      len += extra;
211  
212      buf[len] = '\0';
213 -    mkdir(buf, 0777);  /* ensure ~/.sane/PROG_NAME directory exists */
214 +    if (xsane_back_gtk_ensure_dir(buf))
215 +    {
216 +      goto dir_failed;
217 +    }
218  
219      buf[len++] = SLASH; /* OS/2 does not like slash at end of mktemp-path */
220    }
221 @@ -314,7 +357,10 @@ int xsane_back_gtk_make_path(size_t buf_size, char *buf, const char *prog_name,
222      buf[len++] = SLASH;
223  
224      buf[len] = '\0';
225 -    mkdir(buf, 0777);  /* ensure DIR_NAME directory exists */
226 +    if (xsane_back_gtk_ensure_dir(buf))
227 +    {
228 +      goto dir_failed;
229 +    }
230    }
231  
232    if (len >= buf_size)
233 @@ -454,6 +500,12 @@ filename_too_long:
234    xsane_back_gtk_error(ERR_FILENAME_TOO_LONG, FALSE);
235    errno = E2BIG;
236   return -1;
237 +
238 +dir_failed:
239 +  snprintf(msgbuf, sizeof(msgbuf), "%s %s.", ERR_FAILED_CREATE_ENSURE_DIR,
240 +           strerror(errno));
241 +  xsane_back_gtk_error(msgbuf, FALSE);
242 +  return -1;
243  }
244  
245  /* ----------------------------------------------------------------------------------------------------------------- */
246 @@ -784,11 +836,15 @@ gint xsane_back_gtk_decision(gchar *title, gchar **xpm_d,  gchar *message, gchar
247  void xsane_back_gtk_ipc_dialog_callback(gpointer data, gint source, GdkInputCondition cond)
248  {
249   char message[TEXTBUFSIZE];
250 - size_t bytes;
251 + ssize_t bytes;
252  
253    DBG(DBG_proc, "xsane_back_gtk_message\n");
254  
255 -  bytes = read(xsane.ipc_pipefd[0], message, sizeof(message)-1);
256 +  if ((bytes = read(xsane.ipc_pipefd[0], message, sizeof(message)-1)) < 0)
257 +  {
258 +    DBG(DBG_error, "xsane_back_gtk_message(): can't read from pipe\n");
259 +    return;
260 +  }
261    message[bytes] = 0;
262  
263    xsane_back_gtk_decision(ERR_HEADER_CHILD_PROCESS_ERROR, (gchar **) error_xpm, message, BUTTON_CLOSE, 0 /* no reject text */, FALSE);
264 @@ -1980,7 +2036,7 @@ static void xsane_back_gtk_value_update(GtkAdjustment *adj_data, DialogElement *
265  static void xsane_back_gtk_range_display_value_right_callback(GtkAdjustment *adjust, gpointer data)
266  {
267   gchar buf[TEXTBUFSIZE];
268 - int digits = (int) data;
269 + int digits = GPOINTER_TO_INT(data);
270   GtkLabel *label;
271   
272    snprintf(buf, sizeof(buf), "%1.*f", digits, adjust->value);
273 @@ -2028,7 +2084,7 @@ void xsane_back_gtk_range_new(GtkWidget *parent, const char *name, gfloat val,
274      gtk_widget_set_size_request(value_label, 45, -1);
275      gtk_box_pack_end(GTK_BOX(hbox), value_label, FALSE, FALSE, 1);
276   
277 -    g_signal_connect(elem->data, "value_changed", (GtkSignalFunc) xsane_back_gtk_range_display_value_right_callback, (void *) digits);
278 +    g_signal_connect(elem->data, "value_changed", (GtkSignalFunc) xsane_back_gtk_range_display_value_right_callback, GINT_TO_POINTER(digits));
279      gtk_object_set_data(GTK_OBJECT(elem->data), "value-label", value_label);
280      g_signal_emit_by_name(GTK_OBJECT(elem->data), "value_changed"); /* update value */
281      gtk_widget_show(value_label);
282 @@ -2318,10 +2374,7 @@ static void xsane_back_gtk_text_entry_callback(GtkWidget *w, gpointer data)
283    buf[0] = '\0';
284  
285    text = gtk_entry_get_text(GTK_ENTRY(elem->widget));
286 -  if (text)
287 -  {
288 -    strncpy(buf, text, opt->size);
289 -  }
290 +  strncpy(buf, text, opt->size);
291    buf[opt->size - 1] = '\0';
292  
293    xsane_back_gtk_set_option(opt_num, buf, SANE_ACTION_SET_VALUE);
294 diff --git a/src/xsane-batch-scan.c b/src/xsane-batch-scan.c
295 index 90cc0e0..12eb1b2 100644
296 --- a/src/xsane-batch-scan.c
297 +++ b/src/xsane-batch-scan.c
298 @@ -291,7 +291,7 @@ int xsane_batch_scan_load_list_from_file(char *filename)
299  
300    fd = open(filename, O_RDONLY);
301  
302 -  if (fd > 0)
303 +  if (fd >= 0)
304    {
305      w.io.fd = fd;
306      w.io.read = read;
307 @@ -396,11 +396,11 @@ static void xsane_batch_scan_save_list(void)
308    sprintf(windowname, "%s %s %s", xsane.prog_name, WINDOW_SAVE_BATCH_LIST, xsane.device_text);
309    xsane_back_gtk_make_path(sizeof(filename), filename, "xsane", "batch-lists", 0, "default", ".xbl", XSANE_PATH_LOCAL_SANE);
310  
311 -  if (!xsane_back_gtk_get_filename(windowname, filename, sizeof(filename), filename, NULL, NULL, XSANE_FILE_CHOOSER_ACTION_SAVE, XSANE_GET_FILENAME_SHOW_NOTHING, XSANE_FILE_FILTER_ALL | XSANE_FILE_FILTER_BATCHLIST, XSANE_FILE_FILTER_BATCHLIST));
312 +  if (!xsane_back_gtk_get_filename(windowname, filename, sizeof(filename), filename, NULL, NULL, XSANE_FILE_CHOOSER_ACTION_SAVE, XSANE_GET_FILENAME_SHOW_NOTHING, XSANE_FILE_FILTER_ALL | XSANE_FILE_FILTER_BATCHLIST, XSANE_FILE_FILTER_BATCHLIST))
313    {
314      fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC, 0600);
315  
316 -    if (fd > 0)
317 +    if (fd >= 0)
318      {
319        w.io.fd = fd;
320        w.io.read = read;
321 @@ -680,7 +680,6 @@ static GtkWidget *xsane_batch_scan_create_list_entry(Batch_Scan_Parameters *para
322   GtkWidget *list_item;
323   GtkWidget *hbox;
324   int size = 120;
325 - char *data;
326  
327    list_item = gtk_list_item_new();
328  
329 @@ -688,8 +687,6 @@ static GtkWidget *xsane_batch_scan_create_list_entry(Batch_Scan_Parameters *para
330    gtk_container_add(GTK_CONTAINER(list_item), hbox);
331    gtk_widget_show(hbox);
332  
333 -  data = calloc(size, size);
334 -
335    parameters->gtk_preview = gtk_preview_new(GTK_PREVIEW_COLOR);
336    gtk_preview_size(GTK_PREVIEW(parameters->gtk_preview), size, size);
337    gtk_box_pack_start(GTK_BOX(hbox), parameters->gtk_preview, FALSE, FALSE, 0);
338 @@ -725,13 +722,17 @@ void xsane_batch_scan_add()
339  
340    parameters = calloc(1, sizeof(Batch_Scan_Parameters));
341  
342 -  if (parameters)
343 +  if (!parameters)
344    {
345 -    xsane_batch_scan_get_parameters(parameters);
346 -
347 -    parameters->name = strdup(TEXT_BATCH_AREA_DEFAULT_NAME);
348 +    DBG(DBG_error, "xsane_batch_scan_add(): couldn't allocate memory for "
349 +                   "parameters\n");
350 +    return;
351    }
352  
353 +  xsane_batch_scan_get_parameters(parameters);
354 +
355 +  parameters->name = strdup(TEXT_BATCH_AREA_DEFAULT_NAME);
356 +
357    list_item = xsane_batch_scan_create_list_entry(parameters);
358  
359    /* scroll list to end */
360 @@ -796,7 +797,7 @@ static void xsane_batch_scan_rotate_mirror(GtkWidget *widget, gpointer data)
361   GList *select;
362   GtkObject *list_item;
363   Batch_Scan_Parameters *parameters = NULL;
364 - int rotate_info = (int) data;
365 + int rotate_info = GPOINTER_TO_INT(data);
366   int rotate, mirror;
367  
368    DBG(DBG_proc, "xsane_batch_scan_rotate_mirror\n");
369 @@ -834,7 +835,7 @@ static void xsane_batch_scan_rename_button_callback(GtkWidget *widget, gpointer
370  {
371    DBG(DBG_proc, "xsane_batch_scan_rename\n");
372  
373 -  xsane_batch_scan_rename = (int) data;
374 +  xsane_batch_scan_rename = GPOINTER_TO_INT(data);
375  }
376  
377  
378 @@ -881,7 +882,7 @@ static void xsane_batch_scan_rename_callback(GtkWidget *widget, gpointer data)
379        gtk_window_set_resizable(GTK_WINDOW(rename_dialog), FALSE);
380        snprintf(buf, sizeof(buf), "%s %s", xsane.prog_name, WINDOW_BATCH_RENAME);
381        gtk_window_set_title(GTK_WINDOW(rename_dialog), buf);
382 -      g_signal_connect(GTK_OBJECT(rename_dialog), "delete_event", (GtkSignalFunc) xsane_batch_scan_rename_button_callback,(void *) -1);
383 +      g_signal_connect(GTK_OBJECT(rename_dialog), "delete_event", (GtkSignalFunc) xsane_batch_scan_rename_button_callback, GINT_TO_POINTER(-1));
384        gtk_widget_show(rename_dialog);
385  
386        text = gtk_entry_new();
387 @@ -898,7 +899,7 @@ static void xsane_batch_scan_rename_callback(GtkWidget *widget, gpointer data)
388  #else
389        button = gtk_button_new_with_label(BUTTON_CANCEL);
390  #endif
391 -      g_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc) xsane_batch_scan_rename_button_callback, (void *) -1);
392 +      g_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc) xsane_batch_scan_rename_button_callback, GINT_TO_POINTER(-1));
393        gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 0);
394        gtk_widget_show(button);
395  
396 @@ -909,7 +910,7 @@ static void xsane_batch_scan_rename_callback(GtkWidget *widget, gpointer data)
397        button = gtk_button_new_with_label(BUTTON_OK);
398  #endif
399        GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
400 -      g_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc) xsane_batch_scan_rename_button_callback, (void *) 1);
401 +      g_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc) xsane_batch_scan_rename_button_callback, GINT_TO_POINTER(1));
402        gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 0);
403        gtk_widget_grab_default(button);
404        gtk_widget_show(button);
405 @@ -1000,11 +1001,11 @@ void xsane_create_batch_scan_dialog(const char *devicetext)
406    xsane_button_new_with_pixmap(xsane.batch_scan_dialog->window, xsane.batch_scan_button_box, del_batch_xpm,   DESC_BATCH_DEL, (GtkSignalFunc) xsane_batch_scan_delete, NULL);
407  
408    xsane_button_new_with_pixmap(xsane.batch_scan_dialog->window, xsane.batch_scan_button_box, ascii_xpm,       DESC_BATCH_RENAME, (GtkSignalFunc) xsane_batch_scan_rename_callback, NULL);
409 -  xsane_button_new_with_pixmap(xsane.batch_scan_dialog->window, xsane.batch_scan_button_box, rotate90_xpm,    DESC_ROTATE90,     (GtkSignalFunc) xsane_batch_scan_rotate_mirror, (void *) 1);
410 -  xsane_button_new_with_pixmap(xsane.batch_scan_dialog->window, xsane.batch_scan_button_box, rotate180_xpm,   DESC_ROTATE180,    (GtkSignalFunc) xsane_batch_scan_rotate_mirror, (void *) 2);
411 -  xsane_button_new_with_pixmap(xsane.batch_scan_dialog->window, xsane.batch_scan_button_box, rotate270_xpm,   DESC_ROTATE270,    (GtkSignalFunc) xsane_batch_scan_rotate_mirror, (void *) 3);
412 -  xsane_button_new_with_pixmap(xsane.batch_scan_dialog->window, xsane.batch_scan_button_box, mirror_x_xpm,    DESC_MIRROR_X,     (GtkSignalFunc) xsane_batch_scan_rotate_mirror, (void *) 4);
413 -  xsane_button_new_with_pixmap(xsane.batch_scan_dialog->window, xsane.batch_scan_button_box, mirror_y_xpm,    DESC_MIRROR_Y,     (GtkSignalFunc) xsane_batch_scan_rotate_mirror, (void *) 6);
414 +  xsane_button_new_with_pixmap(xsane.batch_scan_dialog->window, xsane.batch_scan_button_box, rotate90_xpm,    DESC_ROTATE90,     (GtkSignalFunc) xsane_batch_scan_rotate_mirror, GINT_TO_POINTER(1));
415 +  xsane_button_new_with_pixmap(xsane.batch_scan_dialog->window, xsane.batch_scan_button_box, rotate180_xpm,   DESC_ROTATE180,    (GtkSignalFunc) xsane_batch_scan_rotate_mirror, GINT_TO_POINTER(2));
416 +  xsane_button_new_with_pixmap(xsane.batch_scan_dialog->window, xsane.batch_scan_button_box, rotate270_xpm,   DESC_ROTATE270,    (GtkSignalFunc) xsane_batch_scan_rotate_mirror, GINT_TO_POINTER(3));
417 +  xsane_button_new_with_pixmap(xsane.batch_scan_dialog->window, xsane.batch_scan_button_box, mirror_x_xpm,    DESC_MIRROR_X,     (GtkSignalFunc) xsane_batch_scan_rotate_mirror, GINT_TO_POINTER(4));
418 +  xsane_button_new_with_pixmap(xsane.batch_scan_dialog->window, xsane.batch_scan_button_box, mirror_y_xpm,    DESC_MIRROR_Y,     (GtkSignalFunc) xsane_batch_scan_rotate_mirror, GINT_TO_POINTER(6));
419  
420  
421    /* the scolled window with the list */
422 diff --git a/src/xsane-email-project.c b/src/xsane-email-project.c
423 index 23fc942..413e3f7 100644
424 --- a/src/xsane-email-project.c
425 +++ b/src/xsane-email-project.c
426 @@ -895,6 +895,11 @@ static void xsane_email_project_update_project_status()
427  
428    snprintf(filename, sizeof(filename), "%s/xsane-mail-list", preferences.email_project);
429    projectfile = fopen(filename, "r+b"); /* r+ = read and write, position = start of file */
430 +  if (!projectfile)
431 +  {
432 +    DBG(DBG_error, "Could not open project file '%s'.\n", filename);
433 +    return;
434 +  }
435  
436    snprintf(buf, 32, "%s@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@", xsane.email_status); /* fill 32 characters status line */
437    fprintf(projectfile, "%s\n", buf); /* first line is status of email */
438 @@ -931,6 +936,11 @@ void xsane_email_project_save()
439    }
440  
441    projectfile = fopen(filename, "wb"); /* write binary (b for win32) */
442 +  if (! projectfile)
443 +  {
444 +    DBG(DBG_error, "Could not open project file '%s'.\n", filename);
445 +    return;
446 +  }
447  
448    if (xsane.email_status)
449    {
450 @@ -1271,7 +1281,7 @@ static void xsane_email_entry_rename_button_callback(GtkWidget *widget, gpointer
451  {
452    DBG(DBG_proc, "xsane_email_entry_rename\n");
453  
454 -  xsane_email_entry_rename = (int) data;
455 +  xsane_email_entry_rename = GPOINTER_TO_INT(data);
456  }
457  
458  /* ---------------------------------------------------------------------------------------------------------------------- */
459 @@ -1322,7 +1332,7 @@ static void xsane_email_entry_rename_callback(GtkWidget *widget, gpointer list)
460      gtk_window_set_resizable(GTK_WINDOW(rename_dialog), FALSE);
461      snprintf(filename, sizeof(filename), "%s %s", xsane.prog_name, WINDOW_EMAIL_RENAME);
462      gtk_window_set_title(GTK_WINDOW(rename_dialog), filename);
463 -    g_signal_connect(GTK_OBJECT(rename_dialog), "delete_event", (GtkSignalFunc) xsane_email_entry_rename_button_callback, (void *) -1);
464 +    g_signal_connect(GTK_OBJECT(rename_dialog), "delete_event", (GtkSignalFunc) xsane_email_entry_rename_button_callback, GINT_TO_POINTER(-1));
465      gtk_widget_show(rename_dialog);
466  
467      text = gtk_entry_new();
468 @@ -1339,7 +1349,7 @@ static void xsane_email_entry_rename_callback(GtkWidget *widget, gpointer list)
469  #else
470    button = gtk_button_new_with_label(BUTTON_CANCEL);
471  #endif
472 -    g_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc) xsane_email_entry_rename_button_callback,(void *) -1);
473 +    g_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc) xsane_email_entry_rename_button_callback, GINT_TO_POINTER(-1));
474      gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 0);
475      gtk_widget_show(button);
476  
477 @@ -1348,7 +1358,7 @@ static void xsane_email_entry_rename_callback(GtkWidget *widget, gpointer list)
478  #else
479      button = gtk_button_new_with_label(BUTTON_OK);
480  #endif
481 -    g_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc) xsane_email_entry_rename_button_callback, (void *) 1);
482 +    g_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc) xsane_email_entry_rename_button_callback, GINT_TO_POINTER(1));
483      gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 0);
484      gtk_widget_show(button);
485  
486 @@ -1526,6 +1536,11 @@ static void xsane_create_email(int fd)
487    {
488      DBG(DBG_error, "could not open email project file %s\n", filename);
489  
490 +    if (projectfile)
491 +    {
492 +      fclose(projectfile);
493 +    }
494 +
495      if (xsane.email_status)
496      {
497        free(xsane.email_status);
498 @@ -1766,7 +1781,7 @@ static void xsane_create_email(int fd)
499  
500  static void xsane_email_send_process()
501  {
502 - int fd_socket;
503 + int fd_socket = -1;
504   int status;
505   char *password;
506   int i;
507 @@ -1787,36 +1802,20 @@ static void xsane_email_send_process()
508  
509      if (fd_socket < 0) /* could not open socket */
510      {
511 -      if (xsane.email_status)
512 -      {
513 -        free(xsane.email_status);
514 -      }
515        xsane.email_status = strdup(TEXT_EMAIL_STATUS_POP3_CONNECTION_FAILED);
516 -      xsane.email_progress_val = 0.0;
517 -      xsane_front_gtk_email_project_update_lockfile_status();
518 -
519 -      free(password);
520 -
521 -     return;
522 +      status = -1;
523 +      goto out;
524      }
525  
526      status = pop3_login(fd_socket, preferences.email_auth_user, password);
527  
528      close(fd_socket);
529 +    fd_socket = -1;
530  
531      if (status == -1)
532      {
533 -      if (xsane.email_status)
534 -      {
535 -        free(xsane.email_status);
536 -      }
537        xsane.email_status = strdup(TEXT_EMAIL_STATUS_POP3_LOGIN_FAILED);
538 -      xsane.email_progress_val = 0.0;
539 -      xsane_front_gtk_email_project_update_lockfile_status();
540 -
541 -      free(password);
542 -
543 -     return;
544 +      goto out;
545      }
546  
547      DBG(DBG_info, "POP3 authentication done\n");
548 @@ -1829,17 +1828,9 @@ static void xsane_email_send_process()
549  
550    if (fd_socket < 0) /* could not open socket */
551    {
552 -    if (xsane.email_status)
553 -    {
554 -      free(xsane.email_status);
555 -    }
556      xsane.email_status = strdup(TEXT_EMAIL_STATUS_SMTP_CONNECTION_FAILED);
557 -    xsane.email_progress_val = 0.0;
558 -    xsane_front_gtk_email_project_update_lockfile_status();
559 -
560 -    free(password);
561 -
562 -   return;
563 +    status = -1;
564 +    goto out;
565    }
566  
567  
568 @@ -1847,7 +1838,8 @@ static void xsane_email_send_process()
569                               preferences.email_authentication, preferences.email_auth_user, password);
570    if (status == -1)
571    {
572 -   return;
573 +    xsane.email_status = strdup(TEXT_EMAIL_STATUS_SMTP_ERR_DATA);
574 +    goto out;
575    }
576  
577  
578 @@ -1855,19 +1847,30 @@ static void xsane_email_send_process()
579  
580    write_smtp_footer(fd_socket);
581  
582 -  close(fd_socket);
583 +out:
584 +  if (fd_socket >= 0)
585 +  {
586 +    close(fd_socket);
587 +  }
588  
589    if (xsane.email_status)
590    {
591      free(xsane.email_status);
592    }
593 -  xsane.email_status = strdup(TEXT_EMAIL_STATUS_SENT);
594 -  xsane.email_progress_val = 1.0;
595 +  if (status != -1)
596 +  {
597 +    xsane.email_status = strdup(TEXT_EMAIL_STATUS_SENT);
598 +    xsane.email_progress_val = 1.0;
599 +  }
600 +  else
601 +  {
602 +    xsane.email_progress_val = 0.0;
603 +  }
604    xsane_front_gtk_email_project_update_lockfile_status();
605  
606    free(password);
607  
608 -  _exit(0);
609 +  _exit(status);
610  }
611  
612  /* ---------------------------------------------------------------------------------------------------------------------- */
613 diff --git a/src/xsane-fax-project.c b/src/xsane-fax-project.c
614 index 5750b55..c08af59 100644
615 --- a/src/xsane-fax-project.c
616 +++ b/src/xsane-fax-project.c
617 @@ -452,6 +452,12 @@ static void xsane_fax_project_update_project_status()
618    snprintf(filename, sizeof(filename), "%s/xsane-fax-list", preferences.fax_project);
619    projectfile = fopen(filename, "r+b"); /* r+ = read and write, position = start of file */
620  
621 +  if (! projectfile)
622 +  {
623 +    DBG(DBG_error, "Could not open project file '%s'.\n", filename);
624 +    return;
625 +  }
626 +
627    snprintf(buf, 32, "%s@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@", xsane.fax_status); /* fill 32 characters status line */
628    fprintf(projectfile, "%s\n", buf); /* first line is status of mail */
629  
630 @@ -754,7 +760,7 @@ static void xsane_fax_entry_rename_button_callback(GtkWidget *widget, gpointer d
631  {
632    DBG(DBG_proc, "xsane_fax_entry_rename\n");
633  
634 -  xsane_fax_entry_rename = (int) data;
635 +  xsane_fax_entry_rename = GPOINTER_TO_INT(data);
636  }
637  
638  /* ---------------------------------------------------------------------------------------------------------------------- */
639 @@ -805,7 +811,7 @@ static void xsane_fax_entry_rename_callback(GtkWidget *widget, gpointer list)
640      gtk_window_set_resizable(GTK_WINDOW(rename_dialog), FALSE);
641      snprintf(filename, sizeof(filename), "%s %s", xsane.prog_name, WINDOW_FAX_RENAME);
642      gtk_window_set_title(GTK_WINDOW(rename_dialog), filename);
643 -    g_signal_connect(GTK_OBJECT(rename_dialog), "delete_event", (GtkSignalFunc) xsane_fax_entry_rename_button_callback,(void *) -1);
644 +    g_signal_connect(GTK_OBJECT(rename_dialog), "delete_event", (GtkSignalFunc) xsane_fax_entry_rename_button_callback, GINT_TO_POINTER(-1));
645      gtk_widget_show(rename_dialog);
646  
647      text = gtk_entry_new();
648 @@ -822,7 +828,7 @@ static void xsane_fax_entry_rename_callback(GtkWidget *widget, gpointer list)
649  #else
650    button = gtk_button_new_with_label(BUTTON_CANCEL);
651  #endif
652 -    g_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc) xsane_fax_entry_rename_button_callback, (void *) -1);
653 +    g_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc) xsane_fax_entry_rename_button_callback, GINT_TO_POINTER(-1));
654      gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 0);
655      gtk_widget_show(button);
656  
657 @@ -832,7 +838,7 @@ static void xsane_fax_entry_rename_callback(GtkWidget *widget, gpointer list)
658  #else
659      button = gtk_button_new_with_label(BUTTON_OK);
660  #endif
661 -    g_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc) xsane_fax_entry_rename_button_callback, (void *) 1);
662 +    g_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc) xsane_fax_entry_rename_button_callback, GINT_TO_POINTER(1));
663      gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 0);
664      gtk_widget_show(button);
665  
666 diff --git a/src/xsane-front-gtk.c b/src/xsane-front-gtk.c
667 index 7bb49b0..84452f2 100644
668 --- a/src/xsane-front-gtk.c
669 +++ b/src/xsane-front-gtk.c
670 @@ -598,7 +598,7 @@ gint xsane_authorization_callback(SANE_String_Const resource,
671      authorize_dialog = gtk_window_new(GTK_WINDOW_TOPLEVEL);
672      gtk_window_set_position(GTK_WINDOW(authorize_dialog), GTK_WIN_POS_CENTER);
673      gtk_window_set_resizable(GTK_WINDOW(authorize_dialog), FALSE);
674 -    g_signal_connect(GTK_OBJECT(authorize_dialog), "delete_event", GTK_SIGNAL_FUNC(xsane_authorization_button_callback), (void *) -1); /* -1 = cancel */
675 +    g_signal_connect(GTK_OBJECT(authorize_dialog), "delete_event", GTK_SIGNAL_FUNC(xsane_authorization_button_callback), GINT_TO_POINTER(-1)); /* -1 = cancel */
676      snprintf(buf, sizeof(buf), "%s %s", xsane.prog_name, WINDOW_AUTHORIZE);
677      gtk_window_set_title(GTK_WINDOW(authorize_dialog), buf);
678      xsane_set_window_icon(authorize_dialog, 0);
679 @@ -667,7 +667,7 @@ gint xsane_authorization_callback(SANE_String_Const resource,
680  #else
681      button = gtk_button_new_with_label(BUTTON_CANCEL);
682  #endif
683 -    g_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(xsane_authorization_button_callback), (void *) -1);
684 +    g_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(xsane_authorization_button_callback), GINT_TO_POINTER(-1));
685      gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 10); /* x-space around cancel-button */
686      gtk_widget_show(button);
687  
688 @@ -677,7 +677,7 @@ gint xsane_authorization_callback(SANE_String_Const resource,
689      button = gtk_button_new_with_label(BUTTON_OK);
690  #endif
691      GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
692 -    g_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(xsane_authorization_button_callback), (void *) 1);
693 +    g_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(xsane_authorization_button_callback), GINT_TO_POINTER(1));
694      gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 10); /* x-space around OK-button */
695      gtk_widget_grab_default(button);
696      gtk_widget_show(button);
697 @@ -1107,7 +1107,7 @@ void xsane_option_menu_new_with_pixmap(GdkWindow *window, GtkBox *parent, const
698  static void xsane_range_display_value_right_callback(GtkAdjustment *adjust, gpointer data)
699  {
700   gchar buf[TEXTBUFSIZE];
701 - int digits = (int) data;
702 + int digits = GPOINTER_TO_INT(data);
703   GtkLabel *label;
704  
705    snprintf(buf, sizeof(buf), "%1.*f", digits, adjust->value);
706 @@ -1144,7 +1144,7 @@ void xsane_range_new(GtkBox *parent, char *labeltext, const char *desc,
707      gtk_widget_set_size_request(value_label, 35, -1);
708      gtk_box_pack_end(GTK_BOX(hbox), value_label, FALSE, FALSE, 1);
709      
710 -    g_signal_connect(*data, "value_changed", (GtkSignalFunc) xsane_range_display_value_right_callback, (void *) digits);
711 +    g_signal_connect(*data, "value_changed", (GtkSignalFunc) xsane_range_display_value_right_callback, GINT_TO_POINTER(digits));
712      gtk_object_set_data(GTK_OBJECT(*data), "value-label", value_label); 
713      g_signal_emit_by_name(GTK_OBJECT(*data), "value_changed"); /* update value */
714      gtk_widget_show(value_label);
715 @@ -1236,7 +1236,7 @@ void xsane_range_new_with_pixmap(GdkWindow *window, GtkBox *parent, const char *
716      gtk_widget_set_size_request(value_label, 35, -1);
717      gtk_box_pack_end(GTK_BOX(hbox), value_label, FALSE, FALSE, 1);
718      
719 -    g_signal_connect(*data, "value_changed", (GtkSignalFunc) xsane_range_display_value_right_callback, (void *) digits);
720 +    g_signal_connect(*data, "value_changed", (GtkSignalFunc) xsane_range_display_value_right_callback, GINT_TO_POINTER(digits));
721      gtk_object_set_data(GTK_OBJECT(*data), "value-label", value_label); 
722      g_signal_emit_by_name(GTK_OBJECT(*data), "value_changed"); /* update value */
723      gtk_widget_show(value_label);
724 @@ -1383,7 +1383,7 @@ static void xsane_filename_counter_step_callback(GtkWidget *widget, gpointer dat
725  {
726    DBG(DBG_proc, "xsane_filename_counter_step_callback\n");
727   
728 -  preferences.filename_counter_step = (int) data;
729 +  preferences.filename_counter_step = GPOINTER_TO_INT(data);
730  }
731  
732  /* ---------------------------------------------------------------------------------------------------------------------- */
733 @@ -1528,7 +1528,7 @@ void xsane_outputfilename_new(GtkWidget *vbox)
734      snprintf(buf, sizeof(buf), "%+d", j);
735      xsane_filename_counter_step_item = gtk_menu_item_new_with_label(buf);
736      gtk_container_add(GTK_CONTAINER(xsane_filename_counter_step_menu), xsane_filename_counter_step_item);
737 -    g_signal_connect(GTK_OBJECT(xsane_filename_counter_step_item), "activate", (GtkSignalFunc) xsane_filename_counter_step_callback, (void *) j);
738 +    g_signal_connect(GTK_OBJECT(xsane_filename_counter_step_item), "activate", (GtkSignalFunc) xsane_filename_counter_step_callback, GINT_TO_POINTER(j));
739      gtk_widget_show(xsane_filename_counter_step_item);
740      if (preferences.filename_counter_step == j++)
741      {
742 @@ -1895,7 +1895,7 @@ static GtkWidget *eula_dialog = NULL;
743  
744  static gboolean xsane_eula_delete_event(GtkWidget *widget, GdkEvent *event, gpointer data)
745  {
746 -  eula_accept_flag = (int) data;
747 +  eula_accept_flag = GPOINTER_TO_INT(data);
748  
749    DBG(DBG_proc ,"xsane_eula_delete_event(%d)\n", eula_accept_flag);
750    eula_dialog = NULL;
751 @@ -1907,7 +1907,7 @@ static gboolean xsane_eula_delete_event(GtkWidget *widget, GdkEvent *event, gpoi
752  
753  static void xsane_eula_button_callback(GtkWidget *widget, gpointer data)
754  {
755 -  eula_accept_flag = (int) data;
756 +  eula_accept_flag = GPOINTER_TO_INT(data);
757  
758    DBG(DBG_proc ,"xsane_eula_button_callback(%d)\n", eula_accept_flag);
759  
760 @@ -1937,7 +1937,7 @@ int xsane_display_eula(int ask_for_accept)
761    gtk_widget_set_size_request(eula_dialog, 550, 580);
762    gtk_window_set_position(GTK_WINDOW(eula_dialog), GTK_WIN_POS_CENTER);
763    gtk_window_set_resizable(GTK_WINDOW(eula_dialog), TRUE);
764 -  g_signal_connect(GTK_OBJECT(eula_dialog), "delete_event", GTK_SIGNAL_FUNC(xsane_eula_delete_event), (void *) -1); /* -1 = cancel */
765 +  g_signal_connect(GTK_OBJECT(eula_dialog), "delete_event", GTK_SIGNAL_FUNC(xsane_eula_delete_event), GINT_TO_POINTER(-1)); /* -1 = cancel */
766    snprintf(buf, sizeof(buf), "%s %s", xsane.prog_name, WINDOW_EULA);
767    gtk_window_set_title(GTK_WINDOW(eula_dialog), buf);
768    accelerator_group = gtk_accel_group_new();
769 @@ -2090,13 +2090,13 @@ int xsane_display_eula(int ask_for_accept)
770      button = gtk_button_new_with_label(BUTTON_NOT_ACCEPT);
771      gtk_widget_add_accelerator(button, "clicked", accelerator_group, GDK_Escape, 0, DEF_GTK_ACCEL_LOCKED);
772      GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
773 -    g_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc) xsane_eula_button_callback, (void *) 1 /* not accept */);
774 +    g_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc) xsane_eula_button_callback, GINT_TO_POINTER(1) /* not accept */);
775      gtk_container_add(GTK_CONTAINER(hbox), button);
776      gtk_widget_grab_default(button);
777      gtk_widget_show(button);
778  
779      button = gtk_button_new_with_label(BUTTON_ACCEPT);
780 -    g_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc) xsane_eula_button_callback, (void *) 0 /* accept */);
781 +    g_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc) xsane_eula_button_callback, GINT_TO_POINTER(0) /* accept */);
782      gtk_container_add(GTK_CONTAINER(hbox), button);
783      gtk_widget_show(button);
784    }
785 @@ -2109,7 +2109,7 @@ int xsane_display_eula(int ask_for_accept)
786  #endif
787      gtk_widget_add_accelerator(button, "clicked", accelerator_group, GDK_Escape, 0, DEF_GTK_ACCEL_LOCKED);
788      GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
789 -    g_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc) xsane_eula_button_callback, (void *) 0 /* ok = accept */);
790 +    g_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc) xsane_eula_button_callback, GINT_TO_POINTER(0) /* ok = accept */);
791      gtk_container_add(GTK_CONTAINER(hbox), button);
792      gtk_widget_grab_default(button);
793      gtk_widget_show(button);
794 @@ -2336,7 +2336,7 @@ void xsane_display_gpl(void)
795  #endif
796    gtk_widget_add_accelerator(button, "clicked", accelerator_group, GDK_Escape, 0, DEF_GTK_ACCEL_LOCKED);
797    GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
798 -  g_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc) xsane_close_license_dialog_callback, (void *) 0 /* ok = accept */);
799 +  g_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc) xsane_close_license_dialog_callback, GINT_TO_POINTER(0) /* ok = accept */);
800    gtk_container_add(GTK_CONTAINER(hbox), button);
801    gtk_widget_grab_default(button);
802    gtk_widget_show(button);
803 @@ -2414,7 +2414,7 @@ static void xsane_front_gtk_getname_button_callback(GtkWidget *widget, gpointer
804  {
805    DBG(DBG_proc, "xsane_front_gtk_getname_button_callback\n");
806                                                                                                                                   
807 -  xsane_front_gtk_getname_button = (int) data;
808 +  xsane_front_gtk_getname_button = GPOINTER_TO_INT(data);
809  }
810                                                                                                                                   
811  /* ---------------------------------------------------------------------------------------------------------------------- */
812 @@ -2438,7 +2438,7 @@ int xsane_front_gtk_getname_dialog(const char *dialog_title, const char *desc_te
813    gtk_window_set_resizable(GTK_WINDOW(getname_dialog), FALSE);
814    snprintf(buf, sizeof(buf), "%s %s", xsane.prog_name, dialog_title);
815    gtk_window_set_title(GTK_WINDOW(getname_dialog), buf);
816 -  g_signal_connect(GTK_OBJECT(getname_dialog), "delete_event", (GtkSignalFunc) xsane_front_gtk_getname_button_callback, (void *) -1);
817 +  g_signal_connect(GTK_OBJECT(getname_dialog), "delete_event", (GtkSignalFunc) xsane_front_gtk_getname_button_callback, GINT_TO_POINTER(-1));
818    gtk_widget_show(getname_dialog);
819                                                                                                                                   
820    /* set the main vbox */
821 @@ -2469,7 +2469,7 @@ int xsane_front_gtk_getname_dialog(const char *dialog_title, const char *desc_te
822  #else
823    button = gtk_button_new_with_label(BUTTON_CANCEL);
824  #endif
825 -  g_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc) xsane_front_gtk_getname_button_callback, (void *) -1);
826 +  g_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc) xsane_front_gtk_getname_button_callback, GINT_TO_POINTER(-1));
827    gtk_widget_add_accelerator(button, "clicked", accelerator_group, GDK_Escape, 0, DEF_GTK_ACCEL_LOCKED); /* ESC */
828    gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 0);
829    gtk_widget_show(button);
830 @@ -2479,7 +2479,7 @@ int xsane_front_gtk_getname_dialog(const char *dialog_title, const char *desc_te
831  #else
832    button = gtk_button_new_with_label(BUTTON_OK);
833  #endif
834 -  g_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc) xsane_front_gtk_getname_button_callback, (void *) 1);
835 +  g_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc) xsane_front_gtk_getname_button_callback, GINT_TO_POINTER(1));
836    GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
837    gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 0);
838    gtk_widget_show(button);
839 @@ -2580,9 +2580,9 @@ void xsane_front_gtk_email_project_update_lockfile_status()
840    {
841      fprintf(lockfile, "%s\n", xsane.email_status); /* first line is status of mail */
842      fprintf(lockfile, "%3d\n", (int) (xsane.email_progress_val * 100));
843 -  }
844  
845 -  fclose(lockfile);
846 +    fclose(lockfile);
847 +  }
848  }
849  #endif
850  /* ---------------------------------------------------------------------------------------------------------------------- */
851 diff --git a/src/xsane-multipage-project.c b/src/xsane-multipage-project.c
852 index f23e5f8..af3c6cc 100644
853 --- a/src/xsane-multipage-project.c
854 +++ b/src/xsane-multipage-project.c
855 @@ -517,6 +517,11 @@ void xsane_multipage_project_save()
856    }
857  
858    projectfile = fopen(filename, "wb"); /* write binary (b for win32) */
859 +  if (!projectfile)
860 +  {
861 +    DBG(DBG_error, "Could not open project file '%s'.\n", filename);
862 +    return;
863 +  }
864  
865    if (xsane.multipage_status)
866    {
867 diff --git a/src/xsane-preview.c b/src/xsane-preview.c
868 index 6eaf687..ef26098 100644
869 --- a/src/xsane-preview.c
870 +++ b/src/xsane-preview.c
871 @@ -4112,7 +4112,7 @@ static void preview_create_preset_area_menu(Preview *p, int selection)
872      gtk_container_add(GTK_CONTAINER(preset_area_menu), preset_area_item);
873      g_signal_connect(GTK_OBJECT(preset_area_item), "button_press_event", (GtkSignalFunc) preview_preset_area_context_menu_callback, p);
874      g_signal_connect(GTK_OBJECT(preset_area_item), "activate", (GtkSignalFunc) preview_preset_area_callback, p);
875 -    gtk_object_set_data(GTK_OBJECT(preset_area_item), "Selection", (void *) i);  
876 +    gtk_object_set_data(GTK_OBJECT(preset_area_item), "Selection", GINT_TO_POINTER(i));
877      gtk_object_set_data(GTK_OBJECT(preset_area_item), "Preview", (void *) p);  
878  
879      gtk_widget_show(preset_area_item);
880 @@ -4468,7 +4468,7 @@ Preview *preview_new(void)
881      rotation_item = gtk_menu_item_new_with_label(buf);
882      gtk_container_add(GTK_CONTAINER(rotation_menu), rotation_item);
883      g_signal_connect(GTK_OBJECT(rotation_item), "activate", (GtkSignalFunc) preview_rotation_callback, p);
884 -    gtk_object_set_data(GTK_OBJECT(rotation_item), "Selection", (void *) rot);  
885 +    gtk_object_set_data(GTK_OBJECT(rotation_item), "Selection", GINT_TO_POINTER(rot));
886  
887      gtk_widget_show(rotation_item);
888    }                  
889 @@ -5145,11 +5145,11 @@ static void preview_save_image_file(Preview *p, FILE *out)
890      /* always save it as a 16 bit PPM image: */
891      fprintf(out, "P6\n"
892                   "# surface: %g %g %g %g %u %u\n"
893 -                 "# time: %d\n"
894 +                 "# time: %ld\n"
895                   "%d %d\n65535\n",
896                   dsurface[0], dsurface[1], dsurface[2], dsurface[3],
897                   p->surface_type, p->surface_unit,
898 -                 (int) time(NULL),
899 +                 (long) time(NULL),
900                   p->image_width, p->image_height);
901  
902      fwrite(p->image_data_raw, 6, p->image_width*p->image_height, out);
903 @@ -5711,14 +5711,14 @@ static gint preview_preset_area_rename_callback(GtkWidget *widget, GtkWidget *pr
904  
905    DBG(DBG_proc, "preview_preset_area_rename_callback\n");
906  
907 -  selection = (int) gtk_object_get_data(GTK_OBJECT(preset_area_widget), "Selection");
908 +  selection = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(preset_area_widget), "Selection"));
909    p = (Preview *) gtk_object_get_data(GTK_OBJECT(preset_area_widget), "Preview"); 
910  
911    DBG(DBG_info ,"rename %s\n", preferences.preset_area[selection]->name);
912  
913    /* set menu in correct state, is a bit strange this way but I do not have a better idea */
914    old_preset_area_menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(p->preset_area_option_menu));
915 -  old_selection = (int) gtk_object_get_data(GTK_OBJECT(gtk_menu_get_active(GTK_MENU(old_preset_area_menu))), "Selection");  
916 +  old_selection = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(gtk_menu_get_active(GTK_MENU(old_preset_area_menu))), "Selection"));
917    gtk_menu_popdown(GTK_MENU(old_preset_area_menu));
918    gtk_option_menu_set_history(GTK_OPTION_MENU(p->preset_area_option_menu), old_selection);
919  
920 @@ -5761,12 +5761,12 @@ static gint preview_preset_area_add_callback(GtkWidget *widget, GtkWidget *prese
921  
922    DBG(DBG_proc, "preview_preset_area_add_callback\n");
923  
924 -  selection = (int) gtk_object_get_data(GTK_OBJECT(preset_area_widget), "Selection");
925 +  selection = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(preset_area_widget), "Selection"));
926    p = (Preview *) gtk_object_get_data(GTK_OBJECT(preset_area_widget), "Preview"); 
927  
928    /* set menu in correct state, is a bit strange this way but I do not have a better idea */
929    old_preset_area_menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(p->preset_area_option_menu));
930 -  old_selection = (int) gtk_object_get_data(GTK_OBJECT(gtk_menu_get_active(GTK_MENU(old_preset_area_menu))), "Selection");  
931 +  old_selection = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(gtk_menu_get_active(GTK_MENU(old_preset_area_menu))), "Selection"));
932    gtk_menu_popdown(GTK_MENU(old_preset_area_menu));
933    gtk_option_menu_set_history(GTK_OPTION_MENU(p->preset_area_option_menu), old_selection);
934  
935 @@ -5812,7 +5812,7 @@ static gint preview_preset_area_delete_callback(GtkWidget *widget, GtkWidget *pr
936  
937    DBG(DBG_proc, "preview_preset_area_delete_callback\n");
938  
939 -  selection = (int) gtk_object_get_data(GTK_OBJECT(preset_area_widget), "Selection");
940 +  selection = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(preset_area_widget), "Selection"));
941    p = (Preview *) gtk_object_get_data(GTK_OBJECT(preset_area_widget), "Preview"); 
942  
943  
944 @@ -5832,7 +5832,7 @@ static gint preview_preset_area_delete_callback(GtkWidget *widget, GtkWidget *pr
945      old_preset_area_menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(p->preset_area_option_menu));
946  
947      gtk_option_menu_remove_menu(GTK_OPTION_MENU(p->preset_area_option_menu));
948 -    old_selection = (int) gtk_object_get_data(GTK_OBJECT(gtk_menu_get_active(GTK_MENU(old_preset_area_menu))), "Selection");  
949 +    old_selection = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(gtk_menu_get_active(GTK_MENU(old_preset_area_menu))), "Selection"));
950  
951      if (old_selection == selection) /* we are deleting the selected surface */
952      {
953 @@ -5861,7 +5861,7 @@ static gint preview_preset_area_move_up_callback(GtkWidget *widget, GtkWidget *p
954  
955    DBG(DBG_proc, "preview_preset_area_move_up_callback\n");
956  
957 -  selection = (int) gtk_object_get_data(GTK_OBJECT(preset_area_widget), "Selection");
958 +  selection = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(preset_area_widget), "Selection"));
959    p = (Preview *) gtk_object_get_data(GTK_OBJECT(preset_area_widget), "Preview"); 
960  
961    if (selection > 1) /* make sure "full area" stays at top */
962 @@ -5877,7 +5877,7 @@ static gint preview_preset_area_move_up_callback(GtkWidget *widget, GtkWidget *p
963      old_preset_area_menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(p->preset_area_option_menu));
964  
965      gtk_option_menu_remove_menu(GTK_OPTION_MENU(p->preset_area_option_menu));
966 -    old_selection = (int) gtk_object_get_data(GTK_OBJECT(gtk_menu_get_active(GTK_MENU(old_preset_area_menu))), "Selection");  
967 +    old_selection = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(gtk_menu_get_active(GTK_MENU(old_preset_area_menu))), "Selection"));
968  
969      if (old_selection == selection)
970      {
971 @@ -5906,7 +5906,7 @@ static gint preview_preset_area_move_down_callback(GtkWidget *widget, GtkWidget
972  
973    DBG(DBG_proc, "preview_preset_area_move_down_callback\n");
974  
975 -  selection = (int) gtk_object_get_data(GTK_OBJECT(preset_area_widget), "Selection");
976 +  selection = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(preset_area_widget), "Selection"));
977    p = (Preview *) gtk_object_get_data(GTK_OBJECT(preset_area_widget), "Preview"); 
978  
979    /* full size can not moved down */
980 @@ -5923,7 +5923,7 @@ static gint preview_preset_area_move_down_callback(GtkWidget *widget, GtkWidget
981      old_preset_area_menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(p->preset_area_option_menu));
982  
983      gtk_option_menu_remove_menu(GTK_OPTION_MENU(p->preset_area_option_menu));
984 -    old_selection = (int) gtk_object_get_data(GTK_OBJECT(gtk_menu_get_active(GTK_MENU(old_preset_area_menu))), "Selection");  
985 +    old_selection = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(gtk_menu_get_active(GTK_MENU(old_preset_area_menu))), "Selection"));
986  
987      if (old_selection == selection)
988      {
989 @@ -5954,7 +5954,7 @@ static gint preview_preset_area_context_menu_callback(GtkWidget *widget, GdkEven
990  
991    DBG(DBG_proc, "preview_preset_area_context_menu_callback\n");
992  
993 -  selection = (int) gtk_object_get_data(GTK_OBJECT(widget), "Selection");
994 +  selection = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(widget), "Selection"));
995  
996    if (event->type == GDK_BUTTON_PRESS)
997    {
998 @@ -6031,7 +6031,7 @@ static void preview_preset_area_callback(GtkWidget *widget, gpointer data)
999  
1000    DBG(DBG_proc, "preview_preset_area_callback\n");
1001  
1002 -  selection = (int) gtk_object_get_data(GTK_OBJECT(widget), "Selection");
1003 +  selection = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(widget), "Selection"));
1004  
1005    p->preset_surface[0] = preferences.preset_area[selection]->xoffset;
1006    p->preset_surface[1] = preferences.preset_area[selection]->yoffset;
1007 @@ -6055,7 +6055,7 @@ static void preview_rotation_callback(GtkWidget *widget, gpointer data)
1008  
1009    DBG(DBG_proc, "preview_rotation_callback\n");
1010  
1011 -  rot = (int) gtk_object_get_data(GTK_OBJECT(widget), "Selection");
1012 +  rot = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(widget), "Selection"));
1013  
1014    switch (rot)
1015    {
1016 diff --git a/src/xsane-save.c b/src/xsane-save.c
1017 index 2d0e44b..31825d8 100644
1018 --- a/src/xsane-save.c
1019 +++ b/src/xsane-save.c
1020 @@ -28,6 +28,8 @@
1021  #include "xsane-save.h"
1022  #include <time.h>
1023  #include <sys/wait.h> 
1024 +#include <string.h>
1025 +#include <errno.h>
1026  
1027  #include <glib.h>
1028  
1029 @@ -138,7 +140,7 @@ int xsane_create_secure_file(const char *filename)
1030    fd = open(filename, O_WRONLY | O_CREAT | O_EXCL, 0666);
1031    umask(XSANE_DEFAULT_UMASK); /* define new file permissions */   
1032  
1033 -  if (fd > 0)
1034 +  if (fd >= 0)
1035    {
1036      DBG(DBG_info, "file %s is created and secure\n", filename);
1037      close(fd);
1038 @@ -261,22 +263,27 @@ int xsane_get_filesize(char *filename)
1039  {
1040   FILE *infile;
1041   int pos;
1042 - int size;
1043 + int size = -1;
1044  
1045    infile = fopen(filename, "rb"); /* read binary (b for win32) */
1046    if (infile == NULL)
1047    {
1048 -   return 0;
1049 +    return 0;
1050    }
1051  
1052 -  pos = ftell(infile);
1053 +  if ((pos = ftell(infile)) < 0)
1054 +  {
1055 +    DBG(DBG_error, "xsane_get_filesize(): can't get file position\n");
1056 +    goto out;
1057 +  }
1058    fseek(infile, 0, SEEK_END); /* get size */
1059    size = ftell(infile);
1060    fseek(infile, pos, SEEK_SET); /* go to previous position */
1061  
1062 +out:
1063    fclose(infile);
1064  
1065 - return size;
1066 +  return size;
1067  }
1068  
1069  /* ---------------------------------------------------------------------------------------------------------------------- */
1070 @@ -959,7 +966,8 @@ cmsHTRANSFORM xsane_create_cms_transform(Image_info *image_info, int cms_functio
1071  int xsane_save_grayscale_image_as_lineart(FILE *outfile, FILE *imagefile, Image_info *image_info, GtkProgressBar *progress_bar, int *cancel_save)
1072  {
1073   int x, y, bit;
1074 - u_char bitval, packed;
1075 + int bitval;
1076 + u_char packed;
1077  
1078    *cancel_save = 0;
1079  
1080 @@ -1107,7 +1115,7 @@ int xsane_save_scaled_image(FILE *outfile, FILE *imagefile, Image_info *image_in
1081    y_factor = 1.0;
1082    y = 0.0;
1083  
1084 -  while (y < original_image_height)
1085 +  do
1086    {
1087      DBG(DBG_info2, "xsane_save_scaled_image: original line %d, new line %d\n", (int) y, y_new);
1088  
1089 @@ -1233,6 +1241,7 @@ int xsane_save_scaled_image(FILE *outfile, FILE *imagefile, Image_info *image_in
1090      y += y_factor;
1091      read_line = (oldy != (int) y);
1092    }
1093 +  while (y < original_image_height);
1094  
1095    if (read_line) /* we have to write one more line */
1096    {
1097 @@ -3784,7 +3793,8 @@ int xsane_save_ps(FILE *outfile, FILE *imagefile, Image_info *image_info, float
1098  static int xsane_embed_pdf_icm_profile(FILE *outfile, struct pdf_xref *xref, char *icm_filename, int flatedecode, int icc_object)
1099  {
1100   FILE *icm_profile;
1101 - size_t size, embed_len;
1102 + ssize_t size;
1103 + size_t embed_len;
1104   unsigned char *embed_buffer;
1105   int ret;
1106  
1107 @@ -3798,7 +3808,12 @@ static int xsane_embed_pdf_icm_profile(FILE *outfile, struct pdf_xref *xref, cha
1108    }
1109  
1110    fseek(icm_profile, 0, SEEK_END);
1111 -  size = ftell(icm_profile);
1112 +  if ((size = ftell(icm_profile)) < 0)
1113 +  {
1114 +    DBG(DBG_error, "Could not determine size of ICM profile file.");
1115 +    fclose(icm_profile);
1116 +    return -1;
1117 +  }
1118    fseek(icm_profile, 0, SEEK_SET);
1119    
1120    embed_buffer = malloc(size + 1);
1121 @@ -4374,7 +4389,8 @@ static void xsane_jpeg_write_icm_profile(j_compress_ptr cinfo_ptr, const JOCTET
1122  static void xsane_jpeg_embed_scanner_icm_profile(j_compress_ptr cinfo_ptr, const char *icm_filename)
1123  {
1124   FILE *icm_profile;
1125 - size_t size, embed_len;
1126 + ssize_t size;
1127 + size_t embed_len;
1128   cmsUInt8Number *embed_buffer;
1129  
1130    DBG(DBG_proc, "xsane_jpeg_embed_scanner_icm_profile(%s)\n", icm_filename);
1131 @@ -4385,15 +4401,19 @@ static void xsane_jpeg_embed_scanner_icm_profile(j_compress_ptr cinfo_ptr, const
1132      return;
1133    }
1134  
1135 -  fseek(icm_profile, 0, SEEK_END);
1136 -  size = ftell(icm_profile);
1137 -  fseek(icm_profile, 0, SEEK_SET);
1138 +  if ((fseek(icm_profile, 0, SEEK_END) < 0) ||
1139 +      ((size = ftell(icm_profile)) < 0) ||
1140 +      (fseek(icm_profile, 0, SEEK_SET) < 0))
1141 +  {
1142 +    DBG(DBG_error, "Can't determine size of ICM profile file '%s': '%s'",
1143 +        icm_filename, strerror(errno));
1144 +    goto out;
1145 +  }
1146  
1147    embed_buffer = (cmsUInt8Number *) malloc(size + 1);
1148    if (embed_buffer)
1149    {
1150      embed_len = fread(embed_buffer, 1, size, icm_profile);
1151 -    fclose(icm_profile);
1152      embed_buffer[embed_len] = 0;
1153  
1154      xsane_jpeg_write_icm_profile(cinfo_ptr, embed_buffer, embed_len);
1155 @@ -4401,6 +4421,9 @@ static void xsane_jpeg_embed_scanner_icm_profile(j_compress_ptr cinfo_ptr, const
1156  
1157      DBG(DBG_info, "ICM profile %s has been embedded to jpeg file\n", icm_filename);
1158    }
1159 +
1160 +out:
1161 +  fclose(icm_profile);
1162  }
1163  #endif
1164  
1165 @@ -4606,15 +4629,20 @@ int xsane_save_jpeg(FILE *outfile, int quality, FILE *imagefile, Image_info *ima
1166  static void xsane_tiff_embed_scanner_icm_profile(TIFF *tiffile, const char *icm_filename)
1167  {
1168   FILE *icm_profile;
1169 - size_t size;
1170 + ssize_t size;
1171   char *icm_profile_buffer;
1172  
1173    DBG(DBG_proc, "xsane_tiff_embed_scanner_icm_profile(%s)\n", icm_filename);
1174    if((icm_profile = fopen(icm_filename, "rb")))
1175    {
1176 -    fseek(icm_profile, 0, SEEK_END);
1177 -    size = ftell(icm_profile);
1178 -    fseek(icm_profile, 0, SEEK_SET);
1179 +    if ((fseek(icm_profile, 0, SEEK_END) < 0) ||
1180 +        ((size = ftell(icm_profile)) < 0) ||
1181 +        (fseek(icm_profile, 0, SEEK_SET) < 0))
1182 +    {
1183 +      DBG(DBG_error, "Can't determine size of ICM profile file '%s': '%s'",
1184 +          icm_filename, strerror(errno));
1185 +      goto out;
1186 +    }
1187  
1188      icm_profile_buffer = (char *) malloc(size + 1);
1189  
1190 @@ -4638,7 +4666,7 @@ static void xsane_tiff_embed_scanner_icm_profile(TIFF *tiffile, const char *icm_
1191        DBG(DBG_error, "Can not get enogh memory for ICM profile\n");
1192      }
1193  
1194 -
1195 +out:
1196      fclose(icm_profile);
1197    }
1198    else
1199 @@ -4869,17 +4897,22 @@ int xsane_save_tiff_page(TIFF *tiffile, int page, int pages, int quality, FILE *
1200  static void xsane_png_embed_scanner_icm_profile(png_structp png_ptr, png_infop png_info_ptr, const char *icm_filename)
1201  {
1202   FILE *icm_profile;
1203 - gchar *profile_buffer;
1204 - size_t size;
1205 + guchar *profile_buffer;
1206 + ssize_t size;
1207  
1208    DBG(DBG_proc, "xsane_png_embed_scanner_icm_profile(%s)\n", icm_filename);
1209    icm_profile = fopen(icm_filename, "rb");
1210  
1211    if (icm_profile)
1212    {
1213 -    fseek(icm_profile, 0, SEEK_END);
1214 -    size = ftell(icm_profile);
1215 -    fseek(icm_profile, 0, SEEK_SET);
1216 +    if ((fseek(icm_profile, 0, SEEK_END) < 0) ||
1217 +        ((size = ftell(icm_profile)) < 0) ||
1218 +        (fseek(icm_profile, 0, SEEK_SET) < 0))
1219 +    {
1220 +      DBG(DBG_error, "Can't determine size of ICM profile file '%s': '%s'",
1221 +          icm_filename, strerror(errno));
1222 +      goto out;
1223 +    }
1224  
1225      profile_buffer = malloc(size);
1226  
1227 @@ -4901,6 +4934,7 @@ static void xsane_png_embed_scanner_icm_profile(png_structp png_ptr, png_infop p
1228        DBG(DBG_error, "can not allocate profile_buffer\n");
1229      }
1230  
1231 +out:
1232      fclose(icm_profile);
1233    }
1234    else
1235 @@ -5416,7 +5450,7 @@ static int xsane_save_pnm_16_ascii_color(FILE *outfile, FILE *imagefile, Image_i
1236    *cancel_save = 0;
1237  
1238  
1239 -  data = malloc(image_info->image_width * 6);
1240 +  data = malloc((guint32)image_info->image_width * 6);
1241  
1242    if (!data)
1243    {
1244 @@ -5432,7 +5466,7 @@ static int xsane_save_pnm_16_ascii_color(FILE *outfile, FILE *imagefile, Image_i
1245    {
1246      DBG(DBG_info, "Doing CMS color conversion\n");
1247  
1248 -    data_raw = malloc(image_info->image_width * 6);
1249 +    data_raw = malloc((guint32)image_info->image_width * 6);
1250  
1251      if (!data_raw)
1252      {
1253 @@ -5622,7 +5656,7 @@ static int xsane_save_pnm_16_binary_color(FILE *outfile, FILE *imagefile, Image_
1254  
1255    *cancel_save = 0;
1256  
1257 -  data = malloc(image_info->image_width * 6);
1258 +  data = malloc((guint32)image_info->image_width * 6);
1259  
1260    if (!data)
1261    {
1262 @@ -5638,7 +5672,7 @@ static int xsane_save_pnm_16_binary_color(FILE *outfile, FILE *imagefile, Image_
1263    {
1264      DBG(DBG_info, "Doing CMS color conversion\n");
1265  
1266 -    data_raw = malloc(image_info->image_width * 6);
1267 +    data_raw = malloc((guint32)image_info->image_width * 6);
1268  
1269      if (!data_raw)
1270      {
1271 @@ -6159,6 +6193,8 @@ int xsane_save_image_as_text(char *output_filename, char *input_filename, GtkPro
1272   
1273      gtk_progress_set_format_string(GTK_PROGRESS(progress_bar), "");
1274      xsane_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress_bar), 0.0);
1275 +
1276 +    fclose(ocr_progress); /* close reading end of pipe */
1277    }
1278    else /* no pipe available */
1279    {
1280 @@ -6178,11 +6214,6 @@ int xsane_save_image_as_text(char *output_filename, char *input_filename, GtkPro
1281        }
1282      }
1283    }
1284
1285 -  if (pipefd[0])
1286 -  {
1287 -    fclose(ocr_progress); /* close reading end of pipe */
1288 -  }
1289  
1290   return (*cancel_save);
1291  }                                                                                                                                                      
1292 @@ -6784,11 +6815,12 @@ int xsane_transfer_to_gimp(char *input_filename, int apply_ICM_profile, int cms_
1293   unsigned tile_offset;
1294   int i, x, y;
1295   Image_info image_info;
1296 - FILE *imagefile;
1297 + FILE *imagefile = NULL;
1298   int bytes;
1299   unsigned char *data = NULL;
1300   guint16 *data16 = NULL;
1301   size_t bytes_read;
1302 + int retval = 0;
1303  #ifdef HAVE_LIBLCMS
1304   unsigned char *data_raw = NULL;
1305   cmsHTRANSFORM hTransform = NULL;
1306 @@ -6799,13 +6831,13 @@ int xsane_transfer_to_gimp(char *input_filename, int apply_ICM_profile, int cms_
1307    *cancel_save = 0;
1308  
1309    imagefile = fopen(input_filename, "rb"); /* read binary (b for win32) */
1310 -  if (imagefile == 0)
1311 +  if (!imagefile)
1312    {
1313     char buf[TEXTBUFSIZE];
1314      snprintf(buf, sizeof(buf), "%s `%s': %s", ERR_OPEN_FAILED, input_filename, strerror(errno));
1315      xsane_back_gtk_error(buf, TRUE);     
1316 -
1317 -   return -1;
1318 +    retval = -1;
1319 +    goto out;
1320    }
1321  
1322    xsane_read_pnm_header(imagefile, &image_info);
1323 @@ -6828,7 +6860,8 @@ int xsane_transfer_to_gimp(char *input_filename, int apply_ICM_profile, int cms_
1324  
1325      snprintf(buf, sizeof(buf), "%s %s", ERR_DURING_SAVE, ERR_NO_MEM);
1326      xsane_back_gtk_error(buf, TRUE);
1327 -   return -1; /* error */
1328 +    retval = -1; /* error */
1329 +    goto out;
1330    }
1331  
1332  #ifdef HAVE_LIBLCMS
1333 @@ -6847,11 +6880,10 @@ int xsane_transfer_to_gimp(char *input_filename, int apply_ICM_profile, int cms_
1334      {
1335       char buf[TEXTBUFSIZE];
1336  
1337 -      free(data);
1338 -
1339        snprintf(buf, sizeof(buf), "%s %s", ERR_DURING_SAVE, ERR_NO_MEM);
1340        xsane_back_gtk_error(buf, TRUE);
1341 -     return -1; /* error */
1342 +      retval = -1; /* error */
1343 +      goto out;
1344      }
1345    }
1346  #endif
1347 @@ -6892,6 +6924,11 @@ int xsane_transfer_to_gimp(char *input_filename, int apply_ICM_profile, int cms_
1348      {
1349        fseek(icm_profile, 0, SEEK_END);
1350        size = ftell(icm_profile);
1351 +      if (size < 0)
1352 +      {
1353 +        DBG(DBG_error, "xsane_transfer_to_gimp(): can't tell file position");
1354 +        goto out;
1355 +      }
1356        fseek(icm_profile, 0, SEEK_SET);
1357  
1358        profile_buffer = malloc(size);
1359 @@ -6949,7 +6986,7 @@ int xsane_transfer_to_gimp(char *input_filename, int apply_ICM_profile, int cms_
1360        case 1: /* 1 bit gray => conversion to 8 bit gray */
1361          for (i = 0; i < ( (image_info.image_width + 7) / 8) * image_info.image_height; ++i)
1362          {
1363 -         u_char mask;
1364 +         int mask;
1365           int j;
1366  
1367            mask = fgetc(imagefile);
1368 @@ -7219,7 +7256,7 @@ int xsane_transfer_to_gimp(char *input_filename, int apply_ICM_profile, int cms_
1369    g_free(tile);
1370    tile = 0;
1371  
1372 -  fclose(imagefile);
1373 +out:
1374  
1375  #ifdef HAVE_LIBLCMS
1376    if (hTransform != NULL)
1377 @@ -7232,9 +7269,18 @@ int xsane_transfer_to_gimp(char *input_filename, int apply_ICM_profile, int cms_
1378      free(data_raw);
1379    }
1380  #endif
1381 -  free(data);
1382  
1383 - return 0;
1384 +  if (imagefile)
1385 +  {
1386 +    fclose(imagefile);
1387 +  }
1388 +
1389 +  if (data)
1390 +  {
1391 +    free(data);
1392 +  }
1393 +
1394 +  return retval;
1395  }
1396  #endif /* HAVE_ANY_GIMP */ 
1397  
1398 @@ -7617,7 +7663,7 @@ int pop3_login(int fd_socket, char *user, char *passwd)
1399   int len;
1400   ssize_t bytes_written;
1401  
1402 -  len = read(fd_socket, buf, sizeof(buf));
1403 +  len = read(fd_socket, buf, sizeof(buf) - 1);
1404    if (len >= 0)
1405    {
1406      buf[len] = 0;
1407 @@ -7627,7 +7673,7 @@ int pop3_login(int fd_socket, char *user, char *passwd)
1408    snprintf(buf, sizeof(buf), "USER %s\r\n", user);
1409    DBG(DBG_info2, "> USER xxx\n");
1410    bytes_written = write(fd_socket, buf, strlen(buf));
1411 -  len = read(fd_socket, buf, sizeof(buf));
1412 +  len = read(fd_socket, buf, sizeof(buf) - 1);
1413    if (len >= 0)
1414    {
1415      buf[len] = 0;
1416 @@ -7641,7 +7687,7 @@ int pop3_login(int fd_socket, char *user, char *passwd)
1417    snprintf(buf, sizeof(buf), "PASS %s\r\n", passwd);
1418    DBG(DBG_info2, "> PASS xxx\n");
1419    bytes_written = write(fd_socket, buf, strlen(buf));
1420 -  len = read(fd_socket, buf, sizeof(buf));
1421 +  len = read(fd_socket, buf, sizeof(buf) - 1);
1422    if (len >= 0)
1423    {
1424      buf[len] = 0;
1425 @@ -7655,7 +7701,7 @@ int pop3_login(int fd_socket, char *user, char *passwd)
1426    snprintf(buf, sizeof(buf), "QUIT\r\n");
1427    DBG(DBG_info2, "> QUIT\n");
1428    bytes_written = write(fd_socket, buf, strlen(buf));
1429 -  len = read(fd_socket, buf, sizeof(buf));
1430 +  len = read(fd_socket, buf, sizeof(buf) - 1);
1431    if (len >= 0)
1432    {
1433      buf[len] = 0;
1434 @@ -7683,7 +7729,7 @@ int asmtp_authentication(int fd_socket, int auth_type, char *user, char *passwd)
1435        bytes_written = write(fd_socket, buf, strlen(buf));
1436        snprintf(buf, sizeof(buf), "%c%s%c%s", 0, user, 0, passwd);
1437        write_string_base64(fd_socket, buf, strlen(user)+strlen(passwd)+2);
1438 -      len = read(fd_socket, buf, sizeof(buf));
1439 +      len = read(fd_socket, buf, sizeof(buf) - 1);
1440        if (len >= 0)
1441        {
1442          buf[len] = 0;
1443 @@ -7695,7 +7741,7 @@ int asmtp_authentication(int fd_socket, int auth_type, char *user, char *passwd)
1444        snprintf(buf, sizeof(buf), "AUTH LOGIN\r\n");
1445        DBG(DBG_info2, "> %s", buf);
1446        bytes_written = write(fd_socket, buf, strlen(buf));
1447 -      len = read(fd_socket, buf, sizeof(buf));
1448 +      len = read(fd_socket, buf, sizeof(buf) - 1);
1449        if (len >= 0)
1450        {
1451          buf[len] = 0;
1452 @@ -7710,7 +7756,7 @@ int asmtp_authentication(int fd_socket, int auth_type, char *user, char *passwd)
1453        DBG(DBG_info2, "> (USERNAME)\n");
1454        write_string_base64(fd_socket, user, strlen(user));
1455  
1456 -      len = read(fd_socket, buf, sizeof(buf));
1457 +      len = read(fd_socket, buf, sizeof(buf) - 1);
1458        if (len >= 0)
1459        {
1460          buf[len] = 0;
1461 @@ -7725,7 +7771,7 @@ int asmtp_authentication(int fd_socket, int auth_type, char *user, char *passwd)
1462        DBG(DBG_info2, "> (PASSWORD)\n");
1463        write_string_base64(fd_socket, passwd, strlen(passwd));
1464  
1465 -      len = read(fd_socket, buf, sizeof(buf));
1466 +      len = read(fd_socket, buf, sizeof(buf) - 1);
1467        if (len >= 0)
1468        {
1469          buf[len] = 0;
1470 @@ -7743,7 +7789,7 @@ int asmtp_authentication(int fd_socket, int auth_type, char *user, char *passwd)
1471        snprintf(buf, sizeof(buf), "AUTH CRAM-MD5\r\n");
1472        DBG(DBG_info2, "> %s", buf);
1473        bytes_written = write(fd_socket, buf, strlen(buf));
1474 -      len = read(fd_socket, buf, sizeof(buf));
1475 +      len = read(fd_socket, buf, sizeof(buf) - 1);
1476        if (len >= 0)
1477        {
1478          buf[len] = 0;
1479 @@ -7773,7 +7819,7 @@ int write_smtp_header(int fd_socket, char *from, char *to, int auth_type, char *
1480   char *pos = NULL;
1481   ssize_t bytes_written;
1482  
1483 -  len = read(fd_socket, buf, sizeof(buf));
1484 +  len = read(fd_socket, buf, sizeof(buf) - 1);
1485    if (len >= 0)
1486    {
1487      buf[len] = 0;
1488 @@ -7790,7 +7836,7 @@ int write_smtp_header(int fd_socket, char *from, char *to, int auth_type, char *
1489    }
1490    DBG(DBG_info2, "> %s", buf);
1491    bytes_written = write(fd_socket, buf, strlen(buf));
1492 -  len = read(fd_socket, buf, sizeof(buf));
1493 +  len = read(fd_socket, buf, sizeof(buf) - 1);
1494    if (len >= 0)
1495    {
1496      buf[len] = 0;
1497 @@ -7824,7 +7870,7 @@ int write_smtp_header(int fd_socket, char *from, char *to, int auth_type, char *
1498    snprintf(buf, sizeof(buf), "MAIL FROM: <%s>\r\n", from);
1499    DBG(DBG_info2, "> %s", buf);
1500    bytes_written = write(fd_socket, buf, strlen(buf));
1501 -  len = read(fd_socket, buf, sizeof(buf));
1502 +  len = read(fd_socket, buf, sizeof(buf) - 1);
1503    if (len >= 0)
1504    {
1505      buf[len] = 0;
1506 @@ -7864,7 +7910,7 @@ int write_smtp_header(int fd_socket, char *from, char *to, int auth_type, char *
1507  
1508      DBG(DBG_info2, "> %s", buf);
1509      bytes_written = write(fd_socket, buf, strlen(buf));
1510 -    len = read(fd_socket, buf, sizeof(buf));
1511 +    len = read(fd_socket, buf, sizeof(buf) - 1);
1512      if (len >= 0)
1513      {
1514        buf[len] = 0;
1515 @@ -7897,7 +7943,7 @@ int write_smtp_header(int fd_socket, char *from, char *to, int auth_type, char *
1516    snprintf(buf, sizeof(buf), "DATA\r\n");
1517    DBG(DBG_info2, "> %s", buf);
1518    bytes_written = write(fd_socket, buf, strlen(buf));
1519 -  len = read(fd_socket, buf, sizeof(buf));
1520 +  len = read(fd_socket, buf, sizeof(buf) - 1);
1521    if (len >= 0)
1522    {
1523      buf[len] = 0;
1524 @@ -7932,7 +7978,7 @@ int write_smtp_footer(int fd_socket)
1525    snprintf(buf, sizeof(buf), "\r\n.\r\n");
1526    DBG(DBG_info2, "> %s", buf);
1527    bytes_written = write(fd_socket, buf, strlen(buf));
1528 -  len = read(fd_socket, buf, sizeof(buf));
1529 +  len = read(fd_socket, buf, sizeof(buf) - 1);
1530    if (len >= 0)
1531    {
1532      buf[len] = 0;
1533 diff --git a/src/xsane-scan.c b/src/xsane-scan.c
1534 index 88f954a..b6a66d6 100644
1535 --- a/src/xsane-scan.c
1536 +++ b/src/xsane-scan.c
1537 @@ -394,6 +394,13 @@ static void xsane_read_image_data(gpointer data, gint source, GdkInputCondition
1538                {
1539                 long fpos = ftell(xsane.out);
1540  
1541 +                if (fpos < 0)
1542 +                {
1543 +                  DBG(DBG_error, "xsane_read_image_data(): can't tell file "
1544 +                                 "position");
1545 +                  return;
1546 +                }
1547 +
1548                  fseek(xsane.out, 0, SEEK_CUR); /* sync between write and read */
1549                  bytes_read = fread(rgbbuf, 1, bytes - 1, xsane.out);
1550                  fseek(xsane.out, fpos, SEEK_SET);
1551 @@ -1173,6 +1180,8 @@ void xsane_scan_done(SANE_Status status)
1552              {
1553                abort = 1;
1554              }
1555 +
1556 +            fclose(outfile);
1557            }
1558            else
1559            {
1560 @@ -1182,8 +1191,6 @@ void xsane_scan_done(SANE_Status status)
1561              xsane_back_gtk_error(buf, TRUE);
1562              abort = 1;
1563            }
1564 -
1565 -          fclose(outfile);
1566          }
1567  
1568          fclose(infile);
1569 @@ -1452,7 +1459,7 @@ void xsane_scan_done(SANE_Status status)
1570        }
1571        else
1572        {
1573 -        type = "";
1574 +        type = strdup("");
1575        }
1576  
1577        list_item = gtk_list_item_new_with_label(page);
1578 @@ -1493,7 +1500,7 @@ void xsane_scan_done(SANE_Status status)
1579        }
1580        else
1581        {
1582 -        type = "";
1583 +        type = strdup("");
1584        }
1585  
1586        list_item = gtk_list_item_new_with_label(page);
1587 @@ -1535,7 +1542,7 @@ void xsane_scan_done(SANE_Status status)
1588        }
1589        else
1590        {
1591 -        type = "";
1592 +        type = strdup("");
1593        }
1594  
1595        list_item = gtk_list_item_new_with_label(page);
1596 diff --git a/src/xsane-setup.c b/src/xsane-setup.c
1597 index a61833a..413a343 100644
1598 --- a/src/xsane-setup.c
1599 +++ b/src/xsane-setup.c
1600 @@ -111,7 +111,7 @@ void xsane_new_printer(void)
1601  
1602    DBG(DBG_proc, "xsane_new_printer\n");
1603  
1604 -  newprinters = realloc(preferences.printer, (preferences.printerdefinitions+1) * sizeof(void *));
1605 +  newprinters = realloc(preferences.printer, (preferences.printerdefinitions+1) * sizeof(Preferences_printer_t *));
1606  
1607    if (newprinters) /* realloc returns NULL if failed, in this case the old memory keeps alive */
1608    {
1609 @@ -309,7 +309,7 @@ static void xsane_setup_printer_callback(GtkWidget *widget, gpointer data)
1610  {
1611    DBG(DBG_proc, "xsane_setup_printer_callback\n");
1612  
1613 -  preferences.printernr = (int) data;
1614 +  preferences.printernr = GPOINTER_TO_INT(data);
1615    xsane_setup_printer_update();
1616  }
1617  
1618 @@ -328,7 +328,7 @@ static void xsane_setup_printer_menu_build(GtkWidget *option_menu)
1619    {
1620      printer_item = gtk_menu_item_new_with_label(preferences.printer[i]->name);
1621      gtk_container_add(GTK_CONTAINER(printer_menu), printer_item);
1622 -    g_signal_connect(GTK_OBJECT(printer_item), "activate", (GtkSignalFunc) xsane_setup_printer_callback, (void *) i);
1623 +    g_signal_connect(GTK_OBJECT(printer_item), "activate", (GtkSignalFunc) xsane_setup_printer_callback, GINT_TO_POINTER(i));
1624      gtk_widget_show(printer_item);
1625    }
1626  
1627 @@ -454,7 +454,7 @@ static void xsane_setup_filename_counter_len_callback(GtkWidget *widget, gpointe
1628  {
1629    DBG(DBG_proc, "xsane_setup_filename_counter_len_callback\n");
1630  
1631 -  xsane_setup.filename_counter_len = (int) data;
1632 +  xsane_setup.filename_counter_len = GPOINTER_TO_INT(data);
1633  }
1634  
1635  /* ---------------------------------------------------------------------------------------------------------------------- */
1636 @@ -464,7 +464,7 @@ static void xsane_setup_tiff_compression16_callback(GtkWidget *widget, gpointer
1637  {
1638    DBG(DBG_proc, "xsane_setup_tiff_compression16_callback\n");
1639  
1640 -  xsane_setup.tiff_compression16_nr = (int) data;
1641 +  xsane_setup.tiff_compression16_nr = GPOINTER_TO_INT(data);
1642  }
1643  
1644  /* -------------------------------------- */
1645 @@ -473,7 +473,7 @@ static void xsane_setup_tiff_compression8_callback(GtkWidget *widget, gpointer d
1646  {
1647    DBG(DBG_proc, "xsane_setup_tiff_compression8_callback\n");
1648  
1649 -  xsane_setup.tiff_compression8_nr = (int) data;
1650 +  xsane_setup.tiff_compression8_nr = GPOINTER_TO_INT(data);
1651  }
1652  
1653  /* -------------------------------------- */
1654 @@ -481,7 +481,7 @@ static void xsane_setup_tiff_compression8_callback(GtkWidget *widget, gpointer d
1655  static void xsane_setup_tiff_compression1_callback(GtkWidget *widget, gpointer data)
1656  {
1657    DBG(DBG_proc, "xsane_setup_tiff_compression1_callback\n");
1658 -  xsane_setup.tiff_compression1_nr = (int) data;
1659 +  xsane_setup.tiff_compression1_nr = GPOINTER_TO_INT(data);
1660  }
1661  #endif
1662  
1663 @@ -569,7 +569,7 @@ static void xsane_setup_color_management_apply_changes(GtkWidget *widget, gpoint
1664  {
1665    DBG(DBG_proc, "xsane_setup_colormagaement_apply_changes\n");
1666  
1667 -  preferences.cms_intent = (int) gtk_object_get_data(GTK_OBJECT(gtk_menu_get_active(GTK_MENU(gtk_option_menu_get_menu(GTK_OPTION_MENU(xsane_setup.cms_intent_option_menu))))), "Selection");
1668 +  preferences.cms_intent = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(gtk_menu_get_active(GTK_MENU(gtk_option_menu_get_menu(GTK_OPTION_MENU(xsane_setup.cms_intent_option_menu))))), "Selection"));
1669    xsane_update_bool(xsane_setup.cms_bpc_button, &preferences.cms_bpc);
1670  
1671    if (xsane.scanner_default_color_icm_profile)
1672 @@ -843,7 +843,7 @@ void xsane_close_setup_dialog_callback(GtkWidget *widget, gpointer data)
1673  
1674  static void xsane_permission_toggled(GtkWidget *widget, gpointer data)
1675  {
1676 - int mask = (int) data;
1677 + int mask = GPOINTER_TO_INT(data);
1678   int *permission = 0;
1679   const gchar *name = gtk_widget_get_name(widget);
1680  
1681 @@ -912,7 +912,7 @@ static void xsane_permission_box(GtkWidget *parent, gchar *name, gchar *descript
1682    xsane_back_gtk_set_tooltip(xsane.tooltips, button, DESC_PERMISSION_READ);
1683    gtk_widget_set_size_request(button, 26, -1);
1684    gtk_widget_set_name(button, name);
1685 -  g_signal_connect(GTK_OBJECT(button), "toggled", (GtkSignalFunc) xsane_permission_toggled, (void *) 256);
1686 +  g_signal_connect(GTK_OBJECT(button), "toggled", (GtkSignalFunc) xsane_permission_toggled, GINT_TO_POINTER(256));
1687    gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 1);
1688    gtk_widget_show(button);
1689    gtk_widget_set_sensitive(button, user_sensitivity);
1690 @@ -922,7 +922,7 @@ static void xsane_permission_box(GtkWidget *parent, gchar *name, gchar *descript
1691    xsane_back_gtk_set_tooltip(xsane.tooltips, button, DESC_PERMISSION_WRITE);
1692    gtk_widget_set_size_request(button, 26, -1);
1693    gtk_widget_set_name(button, name);
1694 -  g_signal_connect(GTK_OBJECT(button), "toggled", (GtkSignalFunc) xsane_permission_toggled, (void *) 128);
1695 +  g_signal_connect(GTK_OBJECT(button), "toggled", (GtkSignalFunc) xsane_permission_toggled, GINT_TO_POINTER(128));
1696    gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 1);
1697    gtk_widget_show(button);
1698    gtk_widget_set_sensitive(button, user_sensitivity);
1699 @@ -932,7 +932,7 @@ static void xsane_permission_box(GtkWidget *parent, gchar *name, gchar *descript
1700    xsane_back_gtk_set_tooltip(xsane.tooltips, button, DESC_PERMISSION_SEARCH);
1701    gtk_widget_set_size_request(button, 26, -1);
1702    gtk_widget_set_name(button, name);
1703 -  g_signal_connect(GTK_OBJECT(button), "toggled", (GtkSignalFunc) xsane_permission_toggled, (void *) 64);
1704 +  g_signal_connect(GTK_OBJECT(button), "toggled", (GtkSignalFunc) xsane_permission_toggled, GINT_TO_POINTER(64));
1705    gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 1);
1706    gtk_widget_show(button);
1707    gtk_widget_set_sensitive(button, x_sensitivity & user_sensitivity);
1708 @@ -950,7 +950,7 @@ static void xsane_permission_box(GtkWidget *parent, gchar *name, gchar *descript
1709    xsane_back_gtk_set_tooltip(xsane.tooltips, button, DESC_PERMISSION_READ);
1710    gtk_widget_set_size_request(button, 26, -1);
1711    gtk_widget_set_name(button, name);
1712 -  g_signal_connect(GTK_OBJECT(button), "toggled", (GtkSignalFunc) xsane_permission_toggled, (void *) 32);
1713 +  g_signal_connect(GTK_OBJECT(button), "toggled", (GtkSignalFunc) xsane_permission_toggled, GINT_TO_POINTER(32));
1714    gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 1);
1715    gtk_widget_show(button);
1716  
1717 @@ -959,7 +959,7 @@ static void xsane_permission_box(GtkWidget *parent, gchar *name, gchar *descript
1718    xsane_back_gtk_set_tooltip(xsane.tooltips, button, DESC_PERMISSION_WRITE);
1719    gtk_widget_set_size_request(button, 26, -1);
1720    gtk_widget_set_name(button, name);
1721 -  g_signal_connect(GTK_OBJECT(button), "toggled", (GtkSignalFunc) xsane_permission_toggled, (void *) 16);
1722 +  g_signal_connect(GTK_OBJECT(button), "toggled", (GtkSignalFunc) xsane_permission_toggled, GINT_TO_POINTER(16));
1723    gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 1);
1724    gtk_widget_show(button);
1725  
1726 @@ -968,7 +968,7 @@ static void xsane_permission_box(GtkWidget *parent, gchar *name, gchar *descript
1727    xsane_back_gtk_set_tooltip(xsane.tooltips, button, DESC_PERMISSION_SEARCH);
1728    gtk_widget_set_size_request(button, 26, -1);
1729    gtk_widget_set_name(button, name);
1730 -  g_signal_connect(GTK_OBJECT(button), "toggled", (GtkSignalFunc) xsane_permission_toggled, (void *) 8);
1731 +  g_signal_connect(GTK_OBJECT(button), "toggled", (GtkSignalFunc) xsane_permission_toggled, GINT_TO_POINTER(8));
1732    gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 1);
1733    gtk_widget_show(button);
1734    gtk_widget_set_sensitive(button, x_sensitivity);
1735 @@ -986,7 +986,7 @@ static void xsane_permission_box(GtkWidget *parent, gchar *name, gchar *descript
1736    xsane_back_gtk_set_tooltip(xsane.tooltips, button, DESC_PERMISSION_READ);
1737    gtk_widget_set_size_request(button, 26, -1);
1738    gtk_widget_set_name(button, name);
1739 -  g_signal_connect(GTK_OBJECT(button), "toggled", (GtkSignalFunc) xsane_permission_toggled, (void *) 4);
1740 +  g_signal_connect(GTK_OBJECT(button), "toggled", (GtkSignalFunc) xsane_permission_toggled, GINT_TO_POINTER(4));
1741    gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 1);
1742    gtk_widget_show(button);
1743  
1744 @@ -995,7 +995,7 @@ static void xsane_permission_box(GtkWidget *parent, gchar *name, gchar *descript
1745    xsane_back_gtk_set_tooltip(xsane.tooltips, button, DESC_PERMISSION_WRITE);
1746    gtk_widget_set_size_request(button, 26, -1);
1747    gtk_widget_set_name(button, name);
1748 -  g_signal_connect(GTK_OBJECT(button), "toggled", (GtkSignalFunc) xsane_permission_toggled, (void *) 2);
1749 +  g_signal_connect(GTK_OBJECT(button), "toggled", (GtkSignalFunc) xsane_permission_toggled, GINT_TO_POINTER(2));
1750    gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 1);
1751    gtk_widget_show(button);
1752  
1753 @@ -1004,7 +1004,7 @@ static void xsane_permission_box(GtkWidget *parent, gchar *name, gchar *descript
1754    xsane_back_gtk_set_tooltip(xsane.tooltips, button, DESC_PERMISSION_SEARCH);
1755    gtk_widget_set_size_request(button, 26, -1);
1756    gtk_widget_set_name(button, name);
1757 -  g_signal_connect(GTK_OBJECT(button), "toggled", (GtkSignalFunc) xsane_permission_toggled, (void *) 1);
1758 +  g_signal_connect(GTK_OBJECT(button), "toggled", (GtkSignalFunc) xsane_permission_toggled, GINT_TO_POINTER(1));
1759    gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 1);
1760    gtk_widget_show(button);
1761    gtk_widget_set_sensitive(button, x_sensitivity);
1762 @@ -1750,7 +1750,7 @@ static void xsane_saving_notebook(GtkWidget *notebook)
1763      }
1764      filename_counter_len_item = gtk_menu_item_new_with_label(buf);
1765      gtk_container_add(GTK_CONTAINER(filename_counter_len_menu), filename_counter_len_item);
1766 -    g_signal_connect(GTK_OBJECT(filename_counter_len_item), "activate", (GtkSignalFunc) xsane_setup_filename_counter_len_callback, (void *) i);
1767 +    g_signal_connect(GTK_OBJECT(filename_counter_len_item), "activate", (GtkSignalFunc) xsane_setup_filename_counter_len_callback, GINT_TO_POINTER(i));
1768      gtk_widget_show(filename_counter_len_item);
1769      if (preferences.filename_counter_len == i)
1770      {
1771 @@ -1983,7 +1983,7 @@ static void xsane_filetype_notebook(GtkWidget *notebook)
1772    {
1773      tiff_compression_item = gtk_menu_item_new_with_label(tiff_compression16_strings[i-1].name);
1774      gtk_container_add(GTK_CONTAINER(tiff_compression_menu), tiff_compression_item);
1775 -    g_signal_connect(GTK_OBJECT(tiff_compression_item), "activate", (GtkSignalFunc) xsane_setup_tiff_compression16_callback, (void *) tiff_compression16_strings[i-1].number);
1776 +    g_signal_connect(GTK_OBJECT(tiff_compression_item), "activate", (GtkSignalFunc) xsane_setup_tiff_compression16_callback, GINT_TO_POINTER(tiff_compression16_strings[i-1].number));
1777      gtk_widget_show(tiff_compression_item);
1778      if (tiff_compression16_strings[i-1].number == preferences.tiff_compression16_nr)
1779      {
1780 @@ -2019,7 +2019,7 @@ static void xsane_filetype_notebook(GtkWidget *notebook)
1781    {
1782      tiff_compression_item = gtk_menu_item_new_with_label(tiff_compression8_strings[i-1].name);
1783      gtk_container_add(GTK_CONTAINER(tiff_compression_menu), tiff_compression_item);
1784 -    g_signal_connect(GTK_OBJECT(tiff_compression_item), "activate", (GtkSignalFunc) xsane_setup_tiff_compression8_callback, (void *) tiff_compression8_strings[i-1].number);
1785 +    g_signal_connect(GTK_OBJECT(tiff_compression_item), "activate", (GtkSignalFunc) xsane_setup_tiff_compression8_callback, GINT_TO_POINTER(tiff_compression8_strings[i-1].number));
1786      gtk_widget_show(tiff_compression_item);
1787      if (tiff_compression8_strings[i-1].number == preferences.tiff_compression8_nr)
1788      {
1789 @@ -2056,7 +2056,7 @@ static void xsane_filetype_notebook(GtkWidget *notebook)
1790    {
1791      tiff_compression_item = gtk_menu_item_new_with_label(tiff_compression1_strings[i-1].name);
1792      gtk_container_add(GTK_CONTAINER(tiff_compression_menu), tiff_compression_item);
1793 -    g_signal_connect(GTK_OBJECT(tiff_compression_item), "activate", (GtkSignalFunc) xsane_setup_tiff_compression1_callback, (void *) tiff_compression1_strings[i-1].number);
1794 +    g_signal_connect(GTK_OBJECT(tiff_compression_item), "activate", (GtkSignalFunc) xsane_setup_tiff_compression1_callback, GINT_TO_POINTER(tiff_compression1_strings[i-1].number));
1795      gtk_widget_show(tiff_compression_item);
1796      if (tiff_compression1_strings[i-1].number == preferences.tiff_compression1_nr)
1797      {
1798 @@ -2251,7 +2251,7 @@ static void xsane_fax_notebook(GtkWidget *notebook)
1799    for (i=0; i < sizeof(fax_program)/sizeof(fax_program_options_type); i++)
1800    {
1801      button = gtk_button_new_with_label(fax_program[i].identifier);
1802 -    g_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc) xsane_fax_notebook_set_faxprogram_default_callback, (void *) i);
1803 +    g_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc) xsane_fax_notebook_set_faxprogram_default_callback, GINT_TO_POINTER(i));
1804      gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 10);
1805      gtk_widget_show(button);
1806    }
1807 @@ -2557,7 +2557,7 @@ static void xsane_email_notebook(GtkWidget *notebook)
1808    {
1809      authentication_menu_item = gtk_menu_item_new_with_label(authentication_strings[i-1].name);
1810      gtk_container_add(GTK_CONTAINER(authentication_menu), authentication_menu_item);
1811 -    g_signal_connect(GTK_OBJECT(authentication_menu_item), "activate", (GtkSignalFunc) xsane_setup_authentication_type_callback, (void *) authentication_strings[i-1].number);
1812 +    g_signal_connect(GTK_OBJECT(authentication_menu_item), "activate", (GtkSignalFunc) xsane_setup_authentication_type_callback, GINT_TO_POINTER(authentication_strings[i-1].number));
1813      gtk_widget_show(authentication_menu_item);
1814      if (authentication_strings[i-1].number == preferences.email_authentication)
1815      {
1816 @@ -2926,7 +2926,7 @@ static void xsane_display_notebook(GtkWidget *notebook)
1817    {
1818      show_range_mode_item = gtk_menu_item_new_with_label(show_range_mode_strings[i-1].name);
1819      gtk_container_add(GTK_CONTAINER(show_range_mode_menu), show_range_mode_item);
1820 -    g_signal_connect(GTK_OBJECT(show_range_mode_item), "activate", (GtkSignalFunc) xsane_setup_show_range_mode_callback, (void *) show_range_mode_strings[i-1].number);
1821 +    g_signal_connect(GTK_OBJECT(show_range_mode_item), "activate", (GtkSignalFunc) xsane_setup_show_range_mode_callback, GINT_TO_POINTER(show_range_mode_strings[i-1].number));
1822      gtk_widget_show(show_range_mode_item);
1823      if (show_range_mode_strings[i-1].number == preferences.show_range_mode)
1824      {
1825 @@ -3129,7 +3129,7 @@ static void xsane_enhance_notebook_sensitivity(int lineart_mode)
1826  
1827  static void xsane_setup_authentication_type_callback(GtkWidget *widget, gpointer data)
1828  {
1829 -  xsane_setup.email_authentication = (int) data;
1830 +  xsane_setup.email_authentication = GPOINTER_TO_INT(data);
1831  
1832    gtk_widget_set_sensitive(xsane_setup.pop3_vbox, (xsane_setup.email_authentication == EMAIL_AUTH_POP3));
1833  }
1834 @@ -3138,14 +3138,14 @@ static void xsane_setup_authentication_type_callback(GtkWidget *widget, gpointer
1835  
1836  static void xsane_setup_show_range_mode_callback(GtkWidget *widget, gpointer data)
1837  {
1838 -  xsane_setup.show_range_mode = (int) data;
1839 +  xsane_setup.show_range_mode = GPOINTER_TO_INT(data);
1840  }
1841  
1842  /* ---------------------------------------------------------------------------------------------------------------------- */
1843  
1844  static void xsane_setup_lineart_mode_callback(GtkWidget *widget, gpointer data)
1845  {
1846 -  xsane_setup.lineart_mode = (int) data;
1847 +  xsane_setup.lineart_mode = GPOINTER_TO_INT(data);
1848    xsane_enhance_notebook_sensitivity(xsane_setup.lineart_mode);
1849  }
1850  
1851 @@ -3168,7 +3168,7 @@ static void xsane_setup_preview_pipette_range_callback(GtkWidget *widget, gpoint
1852  {
1853    DBG(DBG_proc, "xsane_setup_preview_pipette_range_callback\n");
1854  
1855 -  xsane_setup.preview_pipette_range = (int) data;
1856 +  xsane_setup.preview_pipette_range = GPOINTER_TO_INT(data);
1857  }
1858  
1859  /* ---------------------------------------------------------------------------------------------------------------------- */
1860 @@ -3237,7 +3237,7 @@ static void xsane_enhance_notebook(GtkWidget *notebook)
1861    {
1862      lineart_mode_item = gtk_menu_item_new_with_label(lineart_mode_strings[i-1].name);
1863      gtk_container_add(GTK_CONTAINER(lineart_mode_menu), lineart_mode_item);
1864 -    g_signal_connect(GTK_OBJECT(lineart_mode_item), "activate", (GtkSignalFunc) xsane_setup_lineart_mode_callback, (void *) lineart_mode_strings[i-1].number);
1865 +    g_signal_connect(GTK_OBJECT(lineart_mode_item), "activate", (GtkSignalFunc) xsane_setup_lineart_mode_callback, GINT_TO_POINTER(lineart_mode_strings[i-1].number));
1866      gtk_widget_show(lineart_mode_item);
1867      if (lineart_mode_strings[i-1].number == xsane.lineart_mode)
1868      {
1869 @@ -3461,7 +3461,7 @@ static void xsane_enhance_notebook(GtkWidget *notebook)
1870      snprintf(buf, sizeof(buf), "%d x %d pixel", j, j);
1871      preview_pipette_range_item = gtk_menu_item_new_with_label(buf);
1872      gtk_container_add(GTK_CONTAINER(preview_pipette_range_menu), preview_pipette_range_item);
1873 -    g_signal_connect(GTK_OBJECT(preview_pipette_range_item), "activate", (GtkSignalFunc) xsane_setup_preview_pipette_range_callback, (void *) j);
1874 +    g_signal_connect(GTK_OBJECT(preview_pipette_range_item), "activate", (GtkSignalFunc) xsane_setup_preview_pipette_range_callback, GINT_TO_POINTER(j));
1875      gtk_widget_show(preview_pipette_range_item);
1876      if (preferences.preview_pipette_range == j)
1877      {
1878 @@ -3555,22 +3555,22 @@ static void xsane_color_management_notebook(GtkWidget *notebook)
1879    menu = gtk_menu_new();
1880  
1881    menu_item = gtk_menu_item_new_with_label(SUBMENU_ITEM_CMS_INTENT_PERCEPTUAL);
1882 -  gtk_object_set_data(GTK_OBJECT(menu_item), "Selection", (void *) INTENT_PERCEPTUAL);
1883 +  gtk_object_set_data(GTK_OBJECT(menu_item), "Selection", GINT_TO_POINTER(INTENT_PERCEPTUAL));
1884    gtk_container_add(GTK_CONTAINER(menu), menu_item);
1885    gtk_widget_show(menu_item);
1886  
1887    menu_item = gtk_menu_item_new_with_label(SUBMENU_ITEM_CMS_INTENT_RELATIVE_COLORIMETRIC);
1888 -  gtk_object_set_data(GTK_OBJECT(menu_item), "Selection", (void *) INTENT_RELATIVE_COLORIMETRIC);
1889 +  gtk_object_set_data(GTK_OBJECT(menu_item), "Selection", GINT_TO_POINTER(INTENT_RELATIVE_COLORIMETRIC));
1890    gtk_container_add(GTK_CONTAINER(menu), menu_item);
1891    gtk_widget_show(menu_item);
1892  
1893    menu_item = gtk_menu_item_new_with_label(SUBMENU_ITEM_CMS_INTENT_ABSOLUTE_COLORIMETRIC);
1894 -  gtk_object_set_data(GTK_OBJECT(menu_item), "Selection", (void *) INTENT_ABSOLUTE_COLORIMETRIC);
1895 +  gtk_object_set_data(GTK_OBJECT(menu_item), "Selection", GINT_TO_POINTER(INTENT_ABSOLUTE_COLORIMETRIC));
1896    gtk_container_add(GTK_CONTAINER(menu), menu_item);
1897    gtk_widget_show(menu_item);
1898  
1899    menu_item = gtk_menu_item_new_with_label(SUBMENU_ITEM_CMS_INTENT_SATURATION);
1900 -  gtk_object_set_data(GTK_OBJECT(menu_item), "Selection", (void *) INTENT_SATURATION);
1901 +  gtk_object_set_data(GTK_OBJECT(menu_item), "Selection", GINT_TO_POINTER(INTENT_SATURATION));
1902    gtk_container_add(GTK_CONTAINER(menu), menu_item);
1903    gtk_widget_show(menu_item);
1904  
1905 diff --git a/src/xsane-text.h b/src/xsane-text.h
1906 index ee4a222..44659b9 100644
1907 --- a/src/xsane-text.h
1908 +++ b/src/xsane-text.h
1909 @@ -803,6 +803,7 @@ YOU ARE ALONE!\
1910  #define ERR_HEADER_CHILD_PROCESS_ERROR _("Child process error")
1911  
1912  #define ERR_FAILED_CREATE_FILE         _("Failed to create file:")
1913 +#define ERR_FAILED_CREATE_ENSURE_DIR   _("Failed to ensure path is a directory, or to create as one:")
1914  #define ERR_LOAD_DEVICE_SETTINGS       _("Error while loading device settings:")
1915  #define ERR_NO_DRC_FILE                        _("is not a device-rc-file !!!")
1916  #define ERR_NETSCAPE_EXECUTE_FAIL      _("Failed to execute netscape!")
1917 diff --git a/src/xsane-viewer.c b/src/xsane-viewer.c
1918 index 844c077..6786e96 100644
1919 --- a/src/xsane-viewer.c
1920 +++ b/src/xsane-viewer.c
1921 @@ -32,6 +32,8 @@
1922  #include "xsane-save.h"
1923  #include <gdk/gdkkeysyms.h>
1924  #include <sys/wait.h>
1925 +#include <string.h>
1926 +#include <errno.h>
1927  
1928  #ifndef PATH_MAX
1929  # define PATH_MAX       1024
1930 @@ -506,8 +508,8 @@ static void xsane_viewer_scale_set_scale_value_and_adjustments(GtkAdjustment *ad
1931  
1932    *scale_val = adj_data->value;
1933  
1934 -  image_width  = (int) gtk_object_get_data(GTK_OBJECT(adj_data), "image_width");
1935 -  image_height = (int) gtk_object_get_data(GTK_OBJECT(adj_data), "image_height");
1936 +  image_width  = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(adj_data), "image_width"));
1937 +  image_height = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(adj_data), "image_height"));
1938  
1939    adj = (GtkAdjustment*) gtk_object_get_data(GTK_OBJECT(adj_data), "size-x-adjustment");
1940    if ((adj) && (image_width))
1941 @@ -529,8 +531,8 @@ static void xsane_viewer_scale_set_size_x_value_and_adjustments(GtkAdjustment *a
1942   GtkAdjustment *adj;
1943   int image_width, image_height;
1944  
1945 -  image_width  = (int) gtk_object_get_data(GTK_OBJECT(adj_data), "image_width");
1946 -  image_height = (int) gtk_object_get_data(GTK_OBJECT(adj_data), "image_height");
1947 +  image_width  = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(adj_data), "image_width"));
1948 +  image_height = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(adj_data), "image_height"));
1949  
1950    if (!image_width)
1951    {
1952 @@ -553,8 +555,8 @@ static void xsane_viewer_scale_set_size_y_value_and_adjustments(GtkAdjustment *a
1953   GtkAdjustment *adj;
1954   int image_width, image_height;
1955  
1956 -  image_width  = (int) gtk_object_get_data(GTK_OBJECT(adj_data), "image_width");
1957 -  image_height = (int) gtk_object_get_data(GTK_OBJECT(adj_data), "image_height");
1958 +  image_width  = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(adj_data), "image_width"));
1959 +  image_height = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(adj_data), "image_height"));
1960  
1961    if (!image_height)
1962    {
1963 @@ -663,7 +665,7 @@ static void xsane_viewer_scale_callback(GtkWidget *window, gpointer data)
1964    button = gtk_check_button_new_with_label(BUTTON_SCALE_BIND);
1965    gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 5);
1966    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), v->bind_scale);
1967 -  g_signal_connect(GTK_OBJECT(button), "toggled", (GtkSignalFunc) xsane_viewer_button_changed, (void *) &v->bind_scale);
1968 +  g_signal_connect(GTK_OBJECT(button), "toggled", (GtkSignalFunc) xsane_viewer_button_changed, GINT_TO_POINTER(&v->bind_scale));
1969    g_signal_connect_after(GTK_OBJECT(button), "toggled", (GtkSignalFunc) xsane_viewer_scale_callback, (void *) v);
1970    gtk_widget_show(button);
1971  
1972 @@ -715,20 +717,20 @@ static void xsane_viewer_scale_callback(GtkWidget *window, gpointer data)
1973      gtk_widget_show(spinbutton);
1974      xsane_back_gtk_set_tooltip(xsane.tooltips, spinbutton, DESC_SCALE_HEIGHT); 
1975  
1976 -    gtk_object_set_data(GTK_OBJECT(scale_widget), "size-x-adjustment", (void *) adjustment_size_x);
1977 -    gtk_object_set_data(GTK_OBJECT(scale_widget), "size-y-adjustment", (void *) adjustment_size_y);
1978 -    gtk_object_set_data(GTK_OBJECT(scale_widget), "image_width",       (void *) image_info.image_width);
1979 -    gtk_object_set_data(GTK_OBJECT(scale_widget), "image_height",      (void *) image_info.image_height);
1980 +    gtk_object_set_data(GTK_OBJECT(scale_widget), "size-x-adjustment", GINT_TO_POINTER(adjustment_size_x));
1981 +    gtk_object_set_data(GTK_OBJECT(scale_widget), "size-y-adjustment", GINT_TO_POINTER(adjustment_size_y));
1982 +    gtk_object_set_data(GTK_OBJECT(scale_widget), "image_width",       GINT_TO_POINTER(image_info.image_width));
1983 +    gtk_object_set_data(GTK_OBJECT(scale_widget), "image_height",      GINT_TO_POINTER(image_info.image_height));
1984  
1985 -    gtk_object_set_data(GTK_OBJECT(adjustment_size_x), "scale-adjustment",   (void *) scale_widget);
1986 -    gtk_object_set_data(GTK_OBJECT(adjustment_size_x), "size-y-adjustment",  (void *) adjustment_size_y);
1987 -    gtk_object_set_data(GTK_OBJECT(adjustment_size_x), "image_width",        (void *) image_info.image_width);
1988 -    gtk_object_set_data(GTK_OBJECT(adjustment_size_x), "image_height",       (void *) image_info.image_height);
1989 +    gtk_object_set_data(GTK_OBJECT(adjustment_size_x), "scale-adjustment",   GINT_TO_POINTER(scale_widget));
1990 +    gtk_object_set_data(GTK_OBJECT(adjustment_size_x), "size-y-adjustment",  GINT_TO_POINTER(adjustment_size_y));
1991 +    gtk_object_set_data(GTK_OBJECT(adjustment_size_x), "image_width",        GINT_TO_POINTER(image_info.image_width));
1992 +    gtk_object_set_data(GTK_OBJECT(adjustment_size_x), "image_height",       GINT_TO_POINTER(image_info.image_height));
1993  
1994 -    gtk_object_set_data(GTK_OBJECT(adjustment_size_y), "scale-adjustment",   (void *) scale_widget);
1995 -    gtk_object_set_data(GTK_OBJECT(adjustment_size_y), "size-x-adjustment",  (void *) adjustment_size_x);
1996 -    gtk_object_set_data(GTK_OBJECT(adjustment_size_y), "image_width",        (void *) image_info.image_width);
1997 -    gtk_object_set_data(GTK_OBJECT(adjustment_size_y), "image_height",       (void *) image_info.image_height);
1998 +    gtk_object_set_data(GTK_OBJECT(adjustment_size_y), "scale-adjustment",   GINT_TO_POINTER(scale_widget));
1999 +    gtk_object_set_data(GTK_OBJECT(adjustment_size_y), "size-x-adjustment",  GINT_TO_POINTER(adjustment_size_x));
2000 +    gtk_object_set_data(GTK_OBJECT(adjustment_size_y), "image_width",        GINT_TO_POINTER(image_info.image_width));
2001 +    gtk_object_set_data(GTK_OBJECT(adjustment_size_y), "image_height",       GINT_TO_POINTER(image_info.image_height));
2002    }
2003    else
2004    {
2005 @@ -763,12 +765,12 @@ static void xsane_viewer_scale_callback(GtkWidget *window, gpointer data)
2006      xsane_back_gtk_set_tooltip(xsane.tooltips, spinbutton, DESC_SCALE_WIDTH); 
2007  
2008      gtk_object_set_data(GTK_OBJECT(scalex_widget), "size-x-adjustment",  (void *) adjustment_size_x);
2009 -    gtk_object_set_data(GTK_OBJECT(scalex_widget), "image_width",        (void *) image_info.image_width);
2010 -    gtk_object_set_data(GTK_OBJECT(scalex_widget), "image_height",       (void *) image_info.image_height);
2011 +    gtk_object_set_data(GTK_OBJECT(scalex_widget), "image_width",        GINT_TO_POINTER(image_info.image_width));
2012 +    gtk_object_set_data(GTK_OBJECT(scalex_widget), "image_height",       GINT_TO_POINTER(image_info.image_height));
2013  
2014      gtk_object_set_data(GTK_OBJECT(adjustment_size_x), "scale-adjustment",   (void *) scalex_widget);
2015 -    gtk_object_set_data(GTK_OBJECT(adjustment_size_x), "image_width",        (void *) image_info.image_width);
2016 -    gtk_object_set_data(GTK_OBJECT(adjustment_size_x), "image_height",       (void *) image_info.image_height);
2017 +    gtk_object_set_data(GTK_OBJECT(adjustment_size_x), "image_width",        GINT_TO_POINTER(image_info.image_width));
2018 +    gtk_object_set_data(GTK_OBJECT(adjustment_size_x), "image_height",       GINT_TO_POINTER(image_info.image_height));
2019  
2020  
2021      /* Y */
2022 @@ -802,12 +804,12 @@ static void xsane_viewer_scale_callback(GtkWidget *window, gpointer data)
2023      xsane_back_gtk_set_tooltip(xsane.tooltips, spinbutton, DESC_SCALE_HEIGHT); 
2024  
2025      gtk_object_set_data(GTK_OBJECT(scaley_widget), "size-y-adjustment", (void *) adjustment_size_y);
2026 -    gtk_object_set_data(GTK_OBJECT(scaley_widget), "image_width",       (void *) image_info.image_width);
2027 -    gtk_object_set_data(GTK_OBJECT(scaley_widget), "image_height",      (void *) image_info.image_height);
2028 +    gtk_object_set_data(GTK_OBJECT(scaley_widget), "image_width",       GINT_TO_POINTER(image_info.image_width));
2029 +    gtk_object_set_data(GTK_OBJECT(scaley_widget), "image_height",      GINT_TO_POINTER(image_info.image_height));
2030  
2031      gtk_object_set_data(GTK_OBJECT(adjustment_size_y), "scale-adjustment",   (void *) scaley_widget);
2032 -    gtk_object_set_data(GTK_OBJECT(adjustment_size_y), "image_width",        (void *) image_info.image_width);
2033 -    gtk_object_set_data(GTK_OBJECT(adjustment_size_y), "image_height",       (void *) image_info.image_height);
2034 +    gtk_object_set_data(GTK_OBJECT(adjustment_size_y), "image_width",        GINT_TO_POINTER(image_info.image_width));
2035 +    gtk_object_set_data(GTK_OBJECT(adjustment_size_y), "image_height",       GINT_TO_POINTER(image_info.image_height));
2036    }
2037  
2038    /* Apply Cancel */
2039 @@ -1094,6 +1096,7 @@ static void xsane_viewer_scale_image(GtkWidget *window, gpointer data)
2040    {
2041      DBG(DBG_error, "could not save file %s\n", outfilename);
2042      xsane_viewer_set_sensitivity(v, TRUE);
2043 +    fclose(infile);
2044     return;
2045    }
2046  
2047 @@ -1176,6 +1179,7 @@ static void xsane_viewer_despeckle_image(GtkWidget *window, gpointer data)
2048    {
2049      DBG(DBG_error, "could not save file %s\n", outfilename);
2050      xsane_viewer_set_sensitivity(v, TRUE);
2051 +    fclose(infile);
2052     return;
2053    }
2054  
2055 @@ -1253,6 +1257,7 @@ static void xsane_viewer_blur_image(GtkWidget *window, gpointer data)
2056    {
2057      DBG(DBG_error, "could not save file %s\n", outfilename);
2058      xsane_viewer_set_sensitivity(v, TRUE);
2059 +    fclose(infile);
2060     return;
2061    }
2062  
2063 @@ -1335,6 +1340,7 @@ static void xsane_viewer_rotate(Viewer *v, int rotation)
2064    {
2065      DBG(DBG_error, "could not save file %s\n", outfilename);
2066      xsane_viewer_set_sensitivity(v, TRUE);
2067 +    fclose(infile);
2068  
2069     return;
2070    }
2071 @@ -1444,7 +1450,7 @@ static void xsane_viewer_zoom_callback(GtkWidget *widget, gpointer data)
2072  
2073    DBG(DBG_proc, "xsane_viewer_zoom_callback\n");
2074  
2075 -  val = (int) gtk_object_get_data(GTK_OBJECT(widget), "Selection");
2076 +  val = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(widget), "Selection"));
2077    v->zoom = (float) val / 100;
2078    DBG(DBG_info, "setting zoom factor to %f\n", v->zoom);
2079    xsane_viewer_read_image(v);
2080 @@ -1721,7 +1727,7 @@ static void xsane_viewer_set_cms_proofing_callback(GtkWidget *widget, gpointer d
2081    g_signal_handlers_block_by_func(GTK_OBJECT(v->cms_proofing_widget[1]), (GtkSignalFunc) xsane_viewer_set_cms_proofing_callback, v);
2082    g_signal_handlers_block_by_func(GTK_OBJECT(v->cms_proofing_widget[2]), (GtkSignalFunc) xsane_viewer_set_cms_proofing_callback, v);
2083  
2084 -  val = (int) gtk_object_get_data(GTK_OBJECT(widget), "Selection");
2085 +  val = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(widget), "Selection"));
2086  
2087    DBG(DBG_proc, "xsane_viewer_set_cms_proofing_callback (%d)\n", val);
2088  
2089 @@ -1748,7 +1754,7 @@ static void xsane_viewer_set_cms_intent_callback(GtkWidget *widget, gpointer dat
2090    g_signal_handlers_block_by_func(GTK_OBJECT(v->cms_intent_widget[2]), (GtkSignalFunc) xsane_viewer_set_cms_intent_callback, v);
2091    g_signal_handlers_block_by_func(GTK_OBJECT(v->cms_intent_widget[3]), (GtkSignalFunc) xsane_viewer_set_cms_intent_callback, v);
2092  
2093 -  val = (int) gtk_object_get_data(GTK_OBJECT(widget), "Selection");
2094 +  val = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(widget), "Selection"));
2095  
2096    DBG(DBG_proc, "xsane_viewer_set_cms_intent_callback (%d)\n", val);
2097  
2098 @@ -1774,7 +1780,7 @@ static void xsane_viewer_set_cms_proofing_intent_callback(GtkWidget *widget, gpo
2099    g_signal_handlers_block_by_func(GTK_OBJECT(v->cms_proofing_intent_widget[0]), (GtkSignalFunc) xsane_viewer_set_cms_proofing_intent_callback, v);
2100    g_signal_handlers_block_by_func(GTK_OBJECT(v->cms_proofing_intent_widget[1]), (GtkSignalFunc) xsane_viewer_set_cms_proofing_intent_callback, v);
2101  
2102 -  val = (int) gtk_object_get_data(GTK_OBJECT(widget), "Selection");
2103 +  val = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(widget), "Selection"));
2104  
2105    DBG(DBG_proc, "xsane_viewer_set_cms_proofing_intent_callback (%d)\n", val);
2106  
2107 @@ -1806,7 +1812,7 @@ static void xsane_viewer_set_cms_gamut_alarm_color_callback(GtkWidget *widget, g
2108    g_signal_handlers_block_by_func(GTK_OBJECT(v->cms_gamut_alarm_color_widget[4]), (GtkSignalFunc) xsane_viewer_set_cms_gamut_alarm_color_callback, v);
2109    g_signal_handlers_block_by_func(GTK_OBJECT(v->cms_gamut_alarm_color_widget[5]), (GtkSignalFunc) xsane_viewer_set_cms_gamut_alarm_color_callback, v);
2110  
2111 -  val = (int) gtk_object_get_data(GTK_OBJECT(widget), "Selection");
2112 +  val = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(widget), "Selection"));
2113  
2114    DBG(DBG_proc, "xsane_viewer_set_cms_gamut_alarm_color_callback (%d)\n", val);
2115  
2116 @@ -1942,7 +1948,7 @@ static GtkWidget *xsane_viewer_color_management_build_menu(Viewer *v)
2117      gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(subitem), TRUE);
2118    }
2119    g_signal_connect(GTK_OBJECT(subitem), "toggled", (GtkSignalFunc) xsane_viewer_set_cms_proofing_callback, v);
2120 -  gtk_object_set_data(GTK_OBJECT(subitem), "Selection", (void *) 0);
2121 +  gtk_object_set_data(GTK_OBJECT(subitem), "Selection", GINT_TO_POINTER(0));
2122    gtk_widget_show(subitem);
2123    v->cms_proofing_widget[0] = subitem;
2124  
2125 @@ -1953,7 +1959,7 @@ static GtkWidget *xsane_viewer_color_management_build_menu(Viewer *v)
2126      gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(subitem), TRUE);
2127    }
2128    g_signal_connect(GTK_OBJECT(subitem), "toggled", (GtkSignalFunc) xsane_viewer_set_cms_proofing_callback, v);
2129 -  gtk_object_set_data(GTK_OBJECT(subitem), "Selection", (void *) 1);
2130 +  gtk_object_set_data(GTK_OBJECT(subitem), "Selection", GINT_TO_POINTER(1));
2131    gtk_widget_show(subitem);
2132    v->cms_proofing_widget[1] = subitem;
2133  
2134 @@ -1964,7 +1970,7 @@ static GtkWidget *xsane_viewer_color_management_build_menu(Viewer *v)
2135      gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(subitem), TRUE);
2136    }
2137    g_signal_connect(GTK_OBJECT(subitem), "toggled", (GtkSignalFunc) xsane_viewer_set_cms_proofing_callback, v);
2138 -  gtk_object_set_data(GTK_OBJECT(subitem), "Selection", (void *) 2);
2139 +  gtk_object_set_data(GTK_OBJECT(subitem), "Selection", GINT_TO_POINTER(2));
2140    gtk_widget_show(subitem);
2141    v->cms_proofing_widget[2] = subitem;
2142  
2143 @@ -1985,7 +1991,7 @@ static GtkWidget *xsane_viewer_color_management_build_menu(Viewer *v)
2144      gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(subitem), TRUE);
2145    }
2146    g_signal_connect(GTK_OBJECT(subitem), "toggled", (GtkSignalFunc) xsane_viewer_set_cms_intent_callback, v);
2147 -  gtk_object_set_data(GTK_OBJECT(subitem), "Selection", (void *) INTENT_PERCEPTUAL);
2148 +  gtk_object_set_data(GTK_OBJECT(subitem), "Selection", GINT_TO_POINTER(INTENT_PERCEPTUAL));
2149    gtk_widget_show(subitem);
2150    v->cms_intent_widget[INTENT_PERCEPTUAL] = subitem;
2151  
2152 @@ -1996,7 +2002,7 @@ static GtkWidget *xsane_viewer_color_management_build_menu(Viewer *v)
2153      gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(subitem), TRUE);
2154    }
2155    g_signal_connect(GTK_OBJECT(subitem), "toggled", (GtkSignalFunc) xsane_viewer_set_cms_intent_callback, v);
2156 -  gtk_object_set_data(GTK_OBJECT(subitem), "Selection", (void *) INTENT_RELATIVE_COLORIMETRIC);
2157 +  gtk_object_set_data(GTK_OBJECT(subitem), "Selection", GINT_TO_POINTER(INTENT_RELATIVE_COLORIMETRIC));
2158    gtk_widget_show(subitem);
2159    v->cms_intent_widget[INTENT_RELATIVE_COLORIMETRIC] = subitem;
2160  
2161 @@ -2007,7 +2013,7 @@ static GtkWidget *xsane_viewer_color_management_build_menu(Viewer *v)
2162      gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(subitem), TRUE);
2163    }
2164    g_signal_connect(GTK_OBJECT(subitem), "toggled", (GtkSignalFunc) xsane_viewer_set_cms_intent_callback, v);
2165 -  gtk_object_set_data(GTK_OBJECT(subitem), "Selection", (void *) INTENT_ABSOLUTE_COLORIMETRIC);
2166 +  gtk_object_set_data(GTK_OBJECT(subitem), "Selection", GINT_TO_POINTER(INTENT_ABSOLUTE_COLORIMETRIC));
2167    gtk_widget_show(subitem);
2168    v->cms_intent_widget[INTENT_ABSOLUTE_COLORIMETRIC] = subitem;
2169  
2170 @@ -2018,7 +2024,7 @@ static GtkWidget *xsane_viewer_color_management_build_menu(Viewer *v)
2171      gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(subitem), TRUE);
2172    }
2173    g_signal_connect(GTK_OBJECT(subitem), "toggled", (GtkSignalFunc) xsane_viewer_set_cms_intent_callback, v);
2174 -  gtk_object_set_data(GTK_OBJECT(subitem), "Selection", (void *) INTENT_SATURATION);
2175 +  gtk_object_set_data(GTK_OBJECT(subitem), "Selection", GINT_TO_POINTER(INTENT_SATURATION));
2176    gtk_widget_show(subitem);
2177    v->cms_intent_widget[INTENT_SATURATION] = subitem;
2178  
2179 @@ -2039,7 +2045,7 @@ static GtkWidget *xsane_viewer_color_management_build_menu(Viewer *v)
2180      gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(subitem), TRUE);
2181    }
2182    g_signal_connect(GTK_OBJECT(subitem), "toggled", (GtkSignalFunc) xsane_viewer_set_cms_proofing_intent_callback, v);
2183 -  gtk_object_set_data(GTK_OBJECT(subitem), "Selection", (void *) INTENT_RELATIVE_COLORIMETRIC);
2184 +  gtk_object_set_data(GTK_OBJECT(subitem), "Selection", GINT_TO_POINTER(INTENT_RELATIVE_COLORIMETRIC));
2185    gtk_widget_show(subitem);
2186    v->cms_proofing_intent_widget[0] = subitem;
2187  
2188 @@ -2050,7 +2056,7 @@ static GtkWidget *xsane_viewer_color_management_build_menu(Viewer *v)
2189      gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(subitem), TRUE);
2190    }
2191    g_signal_connect(GTK_OBJECT(subitem), "toggled", (GtkSignalFunc) xsane_viewer_set_cms_proofing_intent_callback, v);
2192 -  gtk_object_set_data(GTK_OBJECT(subitem), "Selection", (void *) INTENT_ABSOLUTE_COLORIMETRIC);
2193 +  gtk_object_set_data(GTK_OBJECT(subitem), "Selection", GINT_TO_POINTER(INTENT_ABSOLUTE_COLORIMETRIC));
2194    gtk_widget_show(subitem);
2195    v->cms_proofing_intent_widget[1] = subitem;
2196  
2197 @@ -2078,7 +2084,7 @@ static GtkWidget *xsane_viewer_color_management_build_menu(Viewer *v)
2198      gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(subitem), TRUE);
2199    }
2200    g_signal_connect(GTK_OBJECT(subitem), "toggled", (GtkSignalFunc) xsane_viewer_set_cms_gamut_alarm_color_callback, v);
2201 -  gtk_object_set_data(GTK_OBJECT(subitem), "Selection", (void *) 0);
2202 +  gtk_object_set_data(GTK_OBJECT(subitem), "Selection", GINT_TO_POINTER(0));
2203    gtk_widget_show(subitem);
2204    v->cms_gamut_alarm_color_widget[0] = subitem;
2205  
2206 @@ -2089,7 +2095,7 @@ static GtkWidget *xsane_viewer_color_management_build_menu(Viewer *v)
2207      gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(subitem), TRUE);
2208    }
2209    g_signal_connect(GTK_OBJECT(subitem), "toggled", (GtkSignalFunc) xsane_viewer_set_cms_gamut_alarm_color_callback, v);
2210 -  gtk_object_set_data(GTK_OBJECT(subitem), "Selection", (void *) 1);
2211 +  gtk_object_set_data(GTK_OBJECT(subitem), "Selection", GINT_TO_POINTER(1));
2212    gtk_widget_show(subitem);
2213    v->cms_gamut_alarm_color_widget[1] = subitem;
2214  
2215 @@ -2100,7 +2106,7 @@ static GtkWidget *xsane_viewer_color_management_build_menu(Viewer *v)
2216      gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(subitem), TRUE);
2217    }
2218    g_signal_connect(GTK_OBJECT(subitem), "toggled", (GtkSignalFunc) xsane_viewer_set_cms_gamut_alarm_color_callback, v);
2219 -  gtk_object_set_data(GTK_OBJECT(subitem), "Selection", (void *) 2);
2220 +  gtk_object_set_data(GTK_OBJECT(subitem), "Selection", GINT_TO_POINTER(2));
2221    gtk_widget_show(subitem);
2222    v->cms_gamut_alarm_color_widget[2] = subitem;
2223  
2224 @@ -2111,7 +2117,7 @@ static GtkWidget *xsane_viewer_color_management_build_menu(Viewer *v)
2225      gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(subitem), TRUE);
2226    }
2227    g_signal_connect(GTK_OBJECT(subitem), "toggled", (GtkSignalFunc) xsane_viewer_set_cms_gamut_alarm_color_callback, v);
2228 -  gtk_object_set_data(GTK_OBJECT(subitem), "Selection", (void *) 3);
2229 +  gtk_object_set_data(GTK_OBJECT(subitem), "Selection", GINT_TO_POINTER(3));
2230    gtk_widget_show(subitem);
2231    v->cms_gamut_alarm_color_widget[3] = subitem;
2232  
2233 @@ -2122,7 +2128,7 @@ static GtkWidget *xsane_viewer_color_management_build_menu(Viewer *v)
2234      gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(subitem), TRUE);
2235    }
2236    g_signal_connect(GTK_OBJECT(subitem), "toggled", (GtkSignalFunc) xsane_viewer_set_cms_gamut_alarm_color_callback, v);
2237 -  gtk_object_set_data(GTK_OBJECT(subitem), "Selection", (void *) 4);
2238 +  gtk_object_set_data(GTK_OBJECT(subitem), "Selection", GINT_TO_POINTER(4));
2239    gtk_widget_show(subitem);
2240    v->cms_gamut_alarm_color_widget[4] = subitem;
2241  
2242 @@ -2133,7 +2139,7 @@ static GtkWidget *xsane_viewer_color_management_build_menu(Viewer *v)
2243      gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(subitem), TRUE);
2244    }
2245    g_signal_connect(GTK_OBJECT(subitem), "toggled", (GtkSignalFunc) xsane_viewer_set_cms_gamut_alarm_color_callback, v);
2246 -  gtk_object_set_data(GTK_OBJECT(subitem), "Selection", (void *) 5);
2247 +  gtk_object_set_data(GTK_OBJECT(subitem), "Selection", GINT_TO_POINTER(5));
2248    gtk_widget_show(subitem);
2249    v->cms_gamut_alarm_color_widget[5] = subitem;
2250  
2251 @@ -2158,7 +2164,7 @@ static int xsane_viewer_read_image_header(Viewer *v)
2252    if (!infile)
2253    {
2254      DBG(DBG_error, "could not load file %s\n", v->filename);
2255 -   return -1;
2256 +    return -1;
2257    }
2258  
2259    xsane_read_pnm_header(infile, &image_info);
2260 @@ -2200,7 +2206,7 @@ static int xsane_viewer_read_image_header(Viewer *v)
2261  
2262  static int xsane_viewer_read_image(Viewer *v)
2263  {
2264 - unsigned char *cms_row, *row, *src_row;
2265 + unsigned char *cms_row, *row = NULL, *src_row = NULL;
2266   int x, y;
2267   int last_y;
2268   int nread;
2269 @@ -2211,6 +2217,7 @@ static int xsane_viewer_read_image(Viewer *v)
2270   float size;
2271   char *size_unit;
2272   int width, height;
2273 + int retval = 0;
2274  
2275  #ifdef HAVE_LIBLCMS
2276   cmsHPROFILE hInProfile = NULL;
2277 @@ -2311,7 +2318,8 @@ static int xsane_viewer_read_image(Viewer *v)
2278  
2279        snprintf(buf, sizeof(buf), "%s\n%s %s: %s\n", ERR_CMS_CONVERSION, ERR_CMS_OPEN_ICM_FILE, CMS_SCANNER_ICM, image_info.icm_profile);
2280        xsane_back_gtk_error(buf, TRUE);
2281 -     return -1;
2282 +      retval = -1;
2283 +      goto out;
2284      }
2285  
2286      hOutProfile = cmsOpenProfileFromFile(preferences.display_icm_profile, "r");
2287 @@ -2323,7 +2331,8 @@ static int xsane_viewer_read_image(Viewer *v)
2288  
2289        snprintf(buf, sizeof(buf), "%s\n%s %s: %s\n", ERR_CMS_CONVERSION, ERR_CMS_OPEN_ICM_FILE, CMS_DISPLAY_ICM, preferences.display_icm_profile);
2290        xsane_back_gtk_error(buf, TRUE);
2291 -     return -1;
2292 +      retval = -1;
2293 +      goto out;
2294      }
2295        
2296  
2297 @@ -2352,7 +2361,8 @@ static int xsane_viewer_read_image(Viewer *v)
2298  
2299          snprintf(buf, sizeof(buf), "%s\n%s %s: %s\n", ERR_CMS_CONVERSION, ERR_CMS_OPEN_ICM_FILE, CMS_PROOF_ICM, cms_proof_icm_profile);
2300          xsane_back_gtk_error(buf, TRUE);
2301 -       return -1;
2302 +        retval = -1;
2303 +        goto out;
2304        }
2305  
2306        hTransform = cmsCreateProofingTransform(hInProfile, cms_input_format,
2307 @@ -2374,7 +2384,8 @@ static int xsane_viewer_read_image(Viewer *v)
2308  
2309        snprintf(buf, sizeof(buf), "%s\n%s\n", ERR_CMS_CONVERSION, ERR_CMS_CREATE_TRANSFORM);
2310        xsane_back_gtk_error(buf, TRUE);
2311 -     return -1;
2312 +      retval = -1;
2313 +      goto out;
2314      }
2315    }
2316  #endif
2317 @@ -2414,39 +2425,11 @@ static int xsane_viewer_read_image(Viewer *v)
2318      row     = malloc(((int) image_info.image_width * v->zoom) * image_info.channels);
2319    }
2320  
2321 -#ifdef HAVE_LIBLCMS
2322 -  if ((v->enable_color_management) && (v->cms_enable))
2323 -  {
2324 -    cms_row = malloc(((int) image_info.image_width * v->zoom) * image_info.channels);
2325 -  }
2326 -  else
2327 -#endif
2328 +  if (!row || !src_row)
2329    {
2330 -    cms_row = row;
2331 -  }
2332 -
2333 -  if (!row || !src_row || !cms_row)
2334 -  {
2335 -    if (src_row)
2336 -    {
2337 -      free(src_row);
2338 -    }
2339 -
2340 -    if (row)
2341 -    {
2342 -      free(row);
2343 -    }
2344 -
2345 -#ifdef HAVE_LIBLCMS
2346 -    if ((cms_row) && (v->enable_color_management) && (v->cms_enable))
2347 -    {
2348 -      free(cms_row);
2349 -    }
2350 -#endif
2351 -
2352 -    fclose(infile);
2353 -    DBG(DBG_error, "could not allocate memory\n");
2354 -   return -1;
2355 +   DBG(DBG_error, "could not allocate memory\n");
2356 +   retval = -1;
2357 +   goto out;
2358    }
2359  
2360  
2361 @@ -2514,7 +2497,13 @@ static int xsane_viewer_read_image(Viewer *v)
2362         guint16 *src_row16 = (guint16 *) src_row;
2363         guint16 *dst_row16 = (guint16 *) row;
2364  
2365 -        fseek(infile, pos0 + (((int) (y / v->zoom)) * image_info.image_width) * image_info.channels * 2, SEEK_SET);
2366 +        if (fseek(infile, pos0 + (((int) (y / v->zoom)) * image_info.image_width) * image_info.channels * 2, SEEK_SET))
2367 +        {
2368 +          DBG(DBG_error, "could not seek in file '%s': '%s'\n", v->filename,
2369 +              strerror(errno));
2370 +          retval = -1;
2371 +          goto out;
2372 +        }
2373          nread = fread(src_row, 2 * image_info.channels, image_info.image_width, infile);
2374  
2375          if (image_info.channels > 1)
2376 @@ -2541,10 +2530,22 @@ static int xsane_viewer_read_image(Viewer *v)
2377  #ifdef HAVE_LIBLCMS
2378      if ((v->enable_color_management) && (v->cms_enable))
2379      {
2380 +      cms_row = malloc(((int) image_info.image_width * v->zoom) * image_info.channels);
2381 +      if (! cms_row)
2382 +      {
2383 +        DBG(DBG_error, "could not allocate memory\n");
2384 +        retval = -1;
2385 +        goto out;
2386 +      }
2387        cmsDoTransform(hTransform, row, cms_row, image_info.image_width * v->zoom);
2388 +      gtk_preview_draw_row(GTK_PREVIEW(v->window), cms_row, 0, y, image_info.image_width * v->zoom);
2389 +      free(cms_row);
2390      }
2391 +    else
2392  #endif
2393 -    gtk_preview_draw_row(GTK_PREVIEW(v->window), cms_row, 0, y, image_info.image_width * v->zoom);
2394 +    {
2395 +      gtk_preview_draw_row(GTK_PREVIEW(v->window), row, 0, y, image_info.image_width * v->zoom);
2396 +    }
2397    }
2398  
2399    gtk_preview_put(GTK_PREVIEW(v->window), v->window->window, v->window->style->black_gc, 0, 0, 0, 0, 
2400 @@ -2610,9 +2611,23 @@ static int xsane_viewer_read_image(Viewer *v)
2401      gtk_window_set_default_size(GTK_WINDOW(v->top), width, height);
2402    }
2403  
2404 -  free(row);
2405 -  free(src_row);
2406 -  fclose(infile);
2407 +out:
2408 +  if (row)
2409 +  {
2410 +    free(row);
2411 +  }
2412 +
2413 +  if (src_row)
2414 +  {
2415 +    free(src_row);
2416 +  }
2417 +
2418 +  /* cms_row is freed directly after use */
2419 +
2420 +  if (infile)
2421 +  {
2422 +    fclose(infile);
2423 +  }
2424  
2425  #ifdef HAVE_LIBLCMS
2426    if ((v->enable_color_management) && (v->cms_enable))
2427 @@ -2621,7 +2636,7 @@ static int xsane_viewer_read_image(Viewer *v)
2428    }
2429  #endif
2430  
2431 - return 0;
2432 +  return retval;
2433  }
2434  
2435  #if 0 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
2436 @@ -3066,7 +3081,7 @@ Viewer *xsane_viewer_new(char *filename, char *selection_filetype, int allow_red
2437      zoom_menu_item = gtk_menu_item_new_with_label(buf);
2438      gtk_menu_append(GTK_MENU(zoom_menu), zoom_menu_item);
2439      g_signal_connect(GTK_OBJECT(zoom_menu_item), "activate", (GtkSignalFunc) xsane_viewer_zoom_callback, v);
2440 -    gtk_object_set_data(GTK_OBJECT(zoom_menu_item), "Selection", (void *) xsane_viewer_zoom[i]);
2441 +    gtk_object_set_data(GTK_OBJECT(zoom_menu_item), "Selection", GINT_TO_POINTER(xsane_viewer_zoom[i]));
2442      gtk_widget_show(zoom_menu_item);
2443      if (v->zoom*100 == xsane_viewer_zoom[i])
2444      {
2445 diff --git a/src/xsane.c b/src/xsane.c
2446 index 02b4da4..a4a3f1e 100644
2447 --- a/src/xsane.c
2448 +++ b/src/xsane.c
2449 @@ -585,7 +585,7 @@ static void xsane_show_batch_scan_callback(GtkWidget * widget)
2450  
2451  static void xsane_paper_orientation_callback(GtkWidget *widget, gpointer data)
2452  {
2453 - int pos = (int) data;
2454 + int pos = GPOINTER_TO_INT(data);
2455  
2456    DBG(DBG_proc, "xsane_paper_orientation_callback\n");
2457  
2458 @@ -601,7 +601,7 @@ static void xsane_printer_callback(GtkWidget *widget, gpointer data)
2459  
2460    DBG(DBG_proc, "xsane_printer_callback\n");
2461  
2462 -  preferences.printernr = (int) data;
2463 +  preferences.printernr = GPOINTER_TO_INT(data);
2464  
2465    switch (xsane.param.format)
2466    {
2467 @@ -1165,7 +1165,7 @@ static void xsane_scanmode_menu_callback(GtkWidget *widget, gpointer data)
2468  
2469  static void xsane_cms_function_menu_callback(GtkWidget *widget, gpointer data)
2470  {
2471 -  preferences.cms_function = (int) data;
2472 +  preferences.cms_function = GPOINTER_TO_INT(data);
2473    DBG(DBG_proc, "xsane_cms_function_menu_callback(%d)\n", preferences.cms_function);
2474  }
2475  
2476 @@ -1402,7 +1402,7 @@ GtkWidget *xsane_update_xsane_callback() /* creates the XSane option window */
2477  
2478  
2479        gtk_container_add(GTK_CONTAINER(paper_orientation_menu), paper_orientation_item);
2480 -      g_signal_connect(GTK_OBJECT(paper_orientation_item), "activate", (GtkSignalFunc) xsane_paper_orientation_callback, (void *) i);
2481 +      g_signal_connect(GTK_OBJECT(paper_orientation_item), "activate", (GtkSignalFunc) xsane_paper_orientation_callback, GINT_TO_POINTER(i));
2482  
2483        gtk_widget_show(paper_orientation_item);
2484      }
2485 @@ -1436,7 +1436,7 @@ GtkWidget *xsane_update_xsane_callback() /* creates the XSane option window */
2486                                     GDK_F1+i, GDK_SHIFT_MASK,  DEF_GTK_MENU_ACCEL_VISIBLE | DEF_GTK_ACCEL_LOCKED);
2487        }
2488        gtk_container_add(GTK_CONTAINER(xsane_printer_menu), xsane_printer_item);
2489 -      g_signal_connect(GTK_OBJECT(xsane_printer_item), "activate", (GtkSignalFunc) xsane_printer_callback, (void *) i);
2490 +      g_signal_connect(GTK_OBJECT(xsane_printer_item), "activate", (GtkSignalFunc) xsane_printer_callback, GINT_TO_POINTER(i));
2491        gtk_widget_show(xsane_printer_item);
2492      }
2493  
2494 @@ -1584,9 +1584,9 @@ GtkWidget *xsane_update_xsane_callback() /* creates the XSane option window */
2495      {
2496        xsane_medium_item = gtk_menu_item_new_with_label(preferences.medium[i]->name);
2497        gtk_menu_append(GTK_MENU(xsane_medium_menu), xsane_medium_item);
2498 -      g_signal_connect(GTK_OBJECT(xsane_medium_item), "button_press_event", (GtkSignalFunc) xsane_medium_context_menu_callback, (void *) i);
2499 -      g_signal_connect(GTK_OBJECT(xsane_medium_item), "activate", (GtkSignalFunc) xsane_set_medium_callback, (void *) i);
2500 -      gtk_object_set_data(GTK_OBJECT(xsane_medium_item), "Selection", (void *) i);
2501 +      g_signal_connect(GTK_OBJECT(xsane_medium_item), "button_press_event", (GtkSignalFunc) xsane_medium_context_menu_callback, GINT_TO_POINTER(i));
2502 +      g_signal_connect(GTK_OBJECT(xsane_medium_item), "activate", (GtkSignalFunc) xsane_set_medium_callback, GINT_TO_POINTER(i));
2503 +      gtk_object_set_data(GTK_OBJECT(xsane_medium_item), "Selection", GINT_TO_POINTER(i));
2504  
2505        gtk_widget_show(xsane_medium_item);
2506      }
2507 @@ -2697,7 +2697,7 @@ static gint xsane_medium_move_up_callback(GtkWidget *widget, GtkWidget *medium_w
2508    
2509    DBG(DBG_proc, "xsane_medium_move_up_callback\n");
2510    
2511 -  selection = (int) gtk_object_get_data(GTK_OBJECT(medium_widget), "Selection");
2512 +  selection = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(medium_widget), "Selection"));
2513  
2514    if (selection > 1) /* make sure "full range" stays at top */
2515    {
2516 @@ -2732,7 +2732,7 @@ static gint xsane_medium_move_down_callback(GtkWidget *widget, GtkWidget *medium
2517    
2518    DBG(DBG_proc, "xsane_medium_move_up_callback\n");
2519    
2520 -  selection = (int) gtk_object_get_data(GTK_OBJECT(medium_widget), "Selection");
2521 +  selection = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(medium_widget), "Selection"));
2522  
2523    if ((selection) && (selection < preferences.medium_definitions-1))
2524    {
2525 @@ -2771,7 +2771,7 @@ static gint xsane_medium_rename_callback(GtkWidget *widget, GtkWidget *medium_wi
2526  
2527    DBG(DBG_proc, "xsane_medium_rename_callback\n");
2528  
2529 -  selection = (int) gtk_object_get_data(GTK_OBJECT(medium_widget), "Selection");
2530 +  selection = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(medium_widget), "Selection"));
2531  
2532    oldname = strdup(preferences.medium[selection]->name);
2533  
2534 @@ -2779,7 +2779,7 @@ static gint xsane_medium_rename_callback(GtkWidget *widget, GtkWidget *medium_wi
2535  
2536    /* set menu in correct state, is a bit strange this way but I do not have a better idea */
2537    old_medium_menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(xsane.medium_widget));
2538 -  old_selection = (int) gtk_object_get_data(GTK_OBJECT(gtk_menu_get_active(GTK_MENU(old_medium_menu))), "Selection");
2539 +  old_selection = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(gtk_menu_get_active(GTK_MENU(old_medium_menu))), "Selection"));
2540    gtk_menu_popdown(GTK_MENU(old_medium_menu));
2541    gtk_option_menu_set_history(GTK_OPTION_MENU(xsane.medium_widget), old_selection);
2542  
2543 @@ -2814,13 +2814,13 @@ static gint xsane_medium_add_callback(GtkWidget *widget, GtkWidget *medium_widge
2544    DBG(DBG_proc, "xsane_medium_add_callback\n");
2545  
2546    /* add new item after selected item */
2547 -  selection = 1 + (int) gtk_object_get_data(GTK_OBJECT(medium_widget), "Selection");
2548 +  selection = 1 + GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(medium_widget), "Selection"));
2549  
2550    oldname = strdup(TEXT_NEW_MEDIA_NAME);
2551  
2552    /* set menu in correct state, is a bit strange this way but I do not have a better idea */
2553    old_medium_menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(xsane.medium_widget));
2554 -  old_selection = (int) gtk_object_get_data(GTK_OBJECT(gtk_menu_get_active(GTK_MENU(old_medium_menu))), "Selection");
2555 +  old_selection = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(gtk_menu_get_active(GTK_MENU(old_medium_menu))), "Selection"));
2556    gtk_menu_popdown(GTK_MENU(old_medium_menu));
2557    gtk_option_menu_set_history(GTK_OPTION_MENU(xsane.medium_widget), old_selection);
2558  
2559 @@ -2895,7 +2895,7 @@ static gint xsane_medium_delete_callback(GtkWidget *widget, GtkWidget *medium_wi
2560  
2561    DBG(DBG_proc, "xsane_medium_delete_callback\n");
2562  
2563 -  selection = (int) gtk_object_get_data(GTK_OBJECT(medium_widget), "Selection");
2564 +  selection = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(medium_widget), "Selection"));
2565  
2566    if (selection) /* full range can not be deleted */
2567    {
2568 @@ -2951,7 +2951,7 @@ static gint xsane_medium_context_menu_callback(GtkWidget *widget, GdkEvent *even
2569                                                                                                  
2570    DBG(DBG_proc, "xsane_medium_context_menu_callback\n");
2571                                                                                                  
2572 -  selection = (int) gtk_object_get_data(GTK_OBJECT(widget), "Selection");
2573 +  selection = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(widget), "Selection"));
2574                                                                                                  
2575    if (event->type == GDK_BUTTON_PRESS)
2576    {
2577 @@ -3022,7 +3022,7 @@ static gint xsane_medium_context_menu_callback(GtkWidget *widget, GdkEvent *even
2578  
2579  static void xsane_set_medium_callback(GtkWidget *widget, gpointer data)
2580  {
2581 - int medium_nr = (int) data;
2582 + int medium_nr = GPOINTER_TO_INT(data);
2583  
2584    if (medium_nr != preferences.medium_nr)
2585    {
2586 @@ -3205,11 +3205,11 @@ static void xsane_set_update_policy_callback(GtkWidget *widget, gpointer data)
2587    DBG(DBG_proc, "xsane_set_update_policy_callback\n");
2588  
2589    g_signal_handlers_block_by_func(GTK_OBJECT(xsane.update_policy_continu), (GtkSignalFunc) xsane_set_update_policy_callback,
2590 -                                   (void *) GTK_UPDATE_CONTINUOUS);
2591 +                                   GINT_TO_POINTER(GTK_UPDATE_CONTINUOUS));
2592    g_signal_handlers_block_by_func(GTK_OBJECT(xsane.update_policy_discont), (GtkSignalFunc) xsane_set_update_policy_callback,
2593 -                                   (void *) GTK_UPDATE_DISCONTINUOUS);
2594 +                                   GINT_TO_POINTER(GTK_UPDATE_DISCONTINUOUS));
2595    g_signal_handlers_block_by_func(GTK_OBJECT(xsane.update_policy_delayed), (GtkSignalFunc) xsane_set_update_policy_callback,
2596 -                                   (void *) GTK_UPDATE_DELAYED);
2597 +                                   GINT_TO_POINTER(GTK_UPDATE_DELAYED));
2598  
2599    if (policy == GTK_UPDATE_CONTINUOUS)
2600    {
2601 @@ -3231,11 +3231,11 @@ static void xsane_set_update_policy_callback(GtkWidget *widget, gpointer data)
2602    }
2603  
2604    g_signal_handlers_unblock_by_func(GTK_OBJECT(xsane.update_policy_continu), (GtkSignalFunc) xsane_set_update_policy_callback,
2605 -                                     (void *) GTK_UPDATE_CONTINUOUS);
2606 +                                     GINT_TO_POINTER(GTK_UPDATE_CONTINUOUS));
2607    g_signal_handlers_unblock_by_func(GTK_OBJECT(xsane.update_policy_discont), (GtkSignalFunc) xsane_set_update_policy_callback,
2608 -                                     (void *) GTK_UPDATE_DISCONTINUOUS);
2609 +                                     GINT_TO_POINTER(GTK_UPDATE_DISCONTINUOUS));
2610    g_signal_handlers_unblock_by_func(GTK_OBJECT(xsane.update_policy_delayed), (GtkSignalFunc) xsane_set_update_policy_callback,
2611 -                                     (void *) GTK_UPDATE_DELAYED);
2612 +                                     GINT_TO_POINTER(GTK_UPDATE_DELAYED));
2613  
2614    preferences.gtk_update_policy = policy;
2615    xsane_pref_save();
2616 @@ -3389,7 +3389,7 @@ static void xsane_info_dialog(GtkWidget *widget, gpointer data)
2617      snprintf(buf, sizeof(buf), "%d bit", (int) (0.5 + log(opt->constraint.range->max+1.0) / log(2.0)));
2618      label = xsane_info_table_text_new(table, buf, 1, 2);
2619    }
2620 -  else if ((!xsane.xsane_channels > 1) && (xsane.scanner_gamma_gray)) /* gray gamma correction by scanner */
2621 +  else if ((!(xsane.xsane_channels > 1)) && (xsane.scanner_gamma_gray)) /* gray gamma correction by scanner */
2622    {
2623     const SANE_Option_Descriptor *opt;
2624  
2625 @@ -3807,6 +3807,13 @@ static void xsane_close_fds_for_exec(signed int first_fd_to_leave_open, ...)
2626  
2627    open_max = (int) sysconf (_SC_OPEN_MAX);
2628  
2629 +  if (open_max < 0)
2630 +  {
2631 +    DBG(DBG_error, "xsane_close_fds_for_exec(): Can't determine maximum "
2632 +                   "number of open files.");
2633 +    return;
2634 +  }
2635 +
2636    close_fds = malloc (open_max);
2637  
2638    memset (close_fds, 1, open_max);
2639 @@ -4147,7 +4154,7 @@ static GtkWidget *xsane_view_build_menu(void)
2640    {
2641      gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(subitem), TRUE);
2642    }
2643 -  g_signal_connect(GTK_OBJECT(subitem), "toggled", (GtkSignalFunc) xsane_set_update_policy_callback, (void *) GTK_UPDATE_CONTINUOUS);
2644 +  g_signal_connect(GTK_OBJECT(subitem), "toggled", (GtkSignalFunc) xsane_set_update_policy_callback, GINT_TO_POINTER(GTK_UPDATE_CONTINUOUS));
2645    gtk_widget_show(subitem);
2646    xsane.update_policy_continu = subitem;
2647  
2648 @@ -4157,7 +4164,7 @@ static GtkWidget *xsane_view_build_menu(void)
2649    {
2650      gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(subitem), TRUE);
2651    }
2652 -  g_signal_connect(GTK_OBJECT(subitem), "toggled", (GtkSignalFunc) xsane_set_update_policy_callback, (void *) GTK_UPDATE_DISCONTINUOUS);
2653 +  g_signal_connect(GTK_OBJECT(subitem), "toggled", (GtkSignalFunc) xsane_set_update_policy_callback, GINT_TO_POINTER(GTK_UPDATE_DISCONTINUOUS));
2654    gtk_widget_show(subitem);
2655    xsane.update_policy_discont = subitem;
2656  
2657 @@ -4167,7 +4174,7 @@ static GtkWidget *xsane_view_build_menu(void)
2658    {
2659      gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(subitem), TRUE);
2660    }
2661 -  g_signal_connect(GTK_OBJECT(subitem), "toggled", (GtkSignalFunc) xsane_set_update_policy_callback, (void *) GTK_UPDATE_DELAYED);
2662 +  g_signal_connect(GTK_OBJECT(subitem), "toggled", (GtkSignalFunc) xsane_set_update_policy_callback, GINT_TO_POINTER(GTK_UPDATE_DELAYED));
2663    gtk_widget_show(subitem);
2664    xsane.update_policy_delayed = subitem;
2665  
2666 @@ -5709,8 +5716,8 @@ static void xsane_choose_device(void)
2667        gtk_widget_add_accelerator(button, "clicked", device_selection_accelerator_group, GDK_F1+i, 0, DEF_GTK_ACCEL_LOCKED);
2668      }
2669  
2670 -    g_signal_connect(GTK_OBJECT(button), "button_press_event", (GtkSignalFunc) xsane_select_device_by_mouse_callback, (void *) (long) i);
2671 -    g_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc) xsane_select_device_by_key_callback, (void *) (long) i);
2672 +    g_signal_connect(GTK_OBJECT(button), "button_press_event", (GtkSignalFunc) xsane_select_device_by_mouse_callback, GINT_TO_POINTER(i));
2673 +    g_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc) xsane_select_device_by_key_callback, GINT_TO_POINTER(i));
2674      gtk_box_pack_start(GTK_BOX(device_vbox), button, TRUE, TRUE, 0);
2675      gtk_widget_show(button);
2676      owner = gtk_radio_button_group(GTK_RADIO_BUTTON(button));;
2677 -- 
2678 1.9.0
2679
This page took 0.205683 seconds and 2 git commands to generate.