2 Copyright (C) Andrew Tridgell 1996
3 Copyright (C) Paul Mackerras 1996
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22 /* handling the cleanup when a transfer is interrupted is tricky when
23 --partial is selected. We need to ensure that the partial file is
24 kept if any real data has been transferred */
25 int cleanup_got_literal
=0;
27 static char *cleanup_fname
;
28 static char *cleanup_new_fname
;
29 static struct file_struct
*cleanup_file
;
30 static int cleanup_fd1
, cleanup_fd2
;
31 static struct map_struct
*cleanup_buf
;
32 static int cleanup_pid
= 0;
35 void _exit_cleanup(int code
, const char *file
, int line
)
37 extern int keep_partial
;
39 if (code
== 0 && io_error
) code
= RERR_FILEIO
;
41 signal(SIGUSR1
, SIG_IGN
);
43 if (cleanup_got_literal
&& cleanup_fname
&& keep_partial
) {
44 char *fname
= cleanup_fname
;
46 if (cleanup_buf
) unmap_file(cleanup_buf
);
47 if (cleanup_fd1
!= -1) close(cleanup_fd1
);
48 if (cleanup_fd2
!= -1) close(cleanup_fd2
);
49 finish_transfer(cleanup_new_fname
, fname
, cleanup_file
);
53 do_unlink(cleanup_fname
);
57 if ((cleanup_pid
!= 0) && (cleanup_pid
== (int) getpid())) {
58 char *pidf
= lp_pid_file();
60 unlink(lp_pid_file());
64 if (code
) log_exit(code
, file
, line
);
69 void cleanup_disable(void)
72 cleanup_got_literal
= 0;
76 void cleanup_set(char *fnametmp
, char *fname
, struct file_struct
*file
,
77 struct map_struct
*buf
, int fd1
, int fd2
)
79 cleanup_fname
= fnametmp
;
80 cleanup_new_fname
= fname
;
87 void cleanup_set_pid(int pid
)