comparison src/gtk/rename_dialog.c @ 42:cd169e4789df

2002-10-29 Brian Masney <masneyb@gftp.org> * src/gtk/chmod_dialog.c src/gtk/delete_dialog.c src/gtk/gftp-gtk.c src/gtk/gftp-gtk.h src/gtk/menu-items.c src/gtk/misc-gtk.c src/gtk/mkdir_dialog.c src/gtk/rename_dialog.c src/gtk/transfer.c - improved and simplified signal handling code
author masneyb
date Wed, 30 Oct 2002 03:34:37 +0000
parents c8ec7877432e
children a12bcbc2fce4
comparison
equal deleted inserted replaced
41:4bcfaf6307b5 42:cd169e4789df
18 /*****************************************************************************/ 18 /*****************************************************************************/
19 19
20 #include "gftp-gtk.h" 20 #include "gftp-gtk.h"
21 static const char cvsid[] = "$Id$"; 21 static const char cvsid[] = "$Id$";
22 22
23 static sigjmp_buf renenvir;
24 static const char *edttext; 23 static const char *edttext;
25 static gftp_file * curfle; 24 static gftp_file * curfle;
26
27
28 static RETSIGTYPE
29 sig_renquit (int signo)
30 {
31 signal (signo, sig_renquit);
32 siglongjmp (renenvir, signo == SIGINT ? 1 : 2);
33 }
34 25
35 26
36 static void * 27 static void *
37 do_rename_thread (void * data) 28 do_rename_thread (void * data)
38 { 29 {
42 wdata = data; 33 wdata = data;
43 wdata->request->user_data = (void *) 0x01; 34 wdata->request->user_data = (void *) 0x01;
44 35
45 if (wdata->request->use_threads) 36 if (wdata->request->use_threads)
46 { 37 {
47 sj = sigsetjmp (renenvir, 1); 38 sj = sigsetjmp (jmp_environment, 1);
48 signal (SIGINT, sig_renquit); 39 use_jmp_environment = 1;
49 signal (SIGALRM, sig_renquit);
50 } 40 }
51 else 41 else
52 sj = 0; 42 sj = 0;
53 43
54 success = 0; 44 success = 0;
66 wdata->request->user_data, 56 wdata->request->user_data,
67 _("Operation canceled\n")); 57 _("Operation canceled\n"));
68 } 58 }
69 59
70 if (wdata->request->use_threads) 60 if (wdata->request->use_threads)
71 { 61 use_jmp_environment = 0;
72 signal (SIGINT, SIG_DFL);
73 signal (SIGALRM, SIG_IGN);
74 }
75 62
76 wdata->request->user_data = NULL; 63 wdata->request->user_data = NULL;
77 wdata->request->stopable = 0; 64 wdata->request->stopable = 0;
78 return ((void *) success); 65 return ((void *) success);
79 } 66 }