diff options
author | Andrew Tridgell <tridge@samba.org> | 1998-07-25 02:25:22 +0000 |
---|---|---|
committer | Andrew Tridgell <tridge@samba.org> | 1998-07-25 02:25:22 +0000 |
commit | 2f03f956f425f03335005ba743f19b6ed3454248 (patch) | |
tree | 4b449374fb14673ca11058436d5eeb66fe975331 /cleanup.c | |
parent | 0199b05f25ec271a4d306ec46218ba4fcb8ad85a (diff) | |
download | rsync-2f03f956f425f03335005ba743f19b6ed3454248.tar.gz rsync-2f03f956f425f03335005ba743f19b6ed3454248.tar.bz2 rsync-2f03f956f425f03335005ba743f19b6ed3454248.zip |
rsync.c was getting a bit unwieldy so I split the code into 3 modules,
for the 3 logical stages of rsync; generator, sender and receiver.
Diffstat (limited to 'cleanup.c')
-rw-r--r-- | cleanup.c | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/cleanup.c b/cleanup.c new file mode 100644 index 00000000..05f34527 --- /dev/null +++ b/cleanup.c @@ -0,0 +1,63 @@ +/* + Copyright (C) Andrew Tridgell 1996 + Copyright (C) Paul Mackerras 1996 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#include "rsync.h" + +/* handling the cleanup when a transfer is interrupted is tricky when + --partial is selected. We need to ensure that the partial file is + kept if any real data has been transferred */ +int cleanup_got_literal=0; + +static char *cleanup_fname; +static char *cleanup_new_fname; +static struct file_struct *cleanup_file; + +void exit_cleanup(int code) +{ + extern int keep_partial; + + signal(SIGUSR1, SIG_IGN); + + if (cleanup_got_literal && cleanup_fname && keep_partial) { + char *fname = cleanup_fname; + cleanup_fname = NULL; + finish_transfer(cleanup_new_fname, fname, cleanup_file); + } + io_flush(); + if (cleanup_fname) + do_unlink(cleanup_fname); + if (code) { + kill_all(SIGUSR1); + } + exit(code); +} + +void cleanup_disable(void) +{ + cleanup_fname = NULL; + cleanup_got_literal = 0; +} + + +void cleanup_set(char *fnametmp, char *fname, struct file_struct *file) +{ + cleanup_fname = fnametmp; + cleanup_new_fname = fname; + cleanup_file = file; +} |