1/*++
2/* NAME
3/*	REMOVE 3
4/* SUMMARY
5/*	remove or stash away file
6/* SYNOPSIS
7/*	\fBint	REMOVE(path)\fR
8/*	\fBconst char *path;\fR
9/* DESCRIPTION
10/*	\fBREMOVE()\fR removes a file, or renames it to a unique name,
11/*	depending on the setting of the boolean \fBvar_dont_remove\fR
12/*	flag.
13/* DIAGNOSTICS
14/*	The result is 0 in case of success, -1 in case of trouble.
15/*	The global \fBerrno\fR variable reflects the nature of the
16/*	problem.
17/* FILES
18/*	saved/*, stashed-away files.
19/* SEE ALSO
20/*	remove(3)
21/* LICENSE
22/* .ad
23/* .fi
24/*	The Secure Mailer license must be distributed with this software.
25/* AUTHOR(S)
26/*	Wietse Venema
27/*	IBM T.J. Watson Research
28/*	P.O. Box 704
29/*	Yorktown Heights, NY 10598, USA
30/*--*/
31
32/* System library. */
33
34#include <sys_defs.h>
35#include <sys/stat.h>
36#include <stdio.h>
37#include <string.h>
38#include <stdlib.h>
39#include <unistd.h>
40#include <warn_stat.h>
41
42/* Utility library. */
43
44#include <vstring.h>
45
46/* Global library. */
47
48#include <mail_params.h>
49
50/* REMOVE - squirrel away a file instead of removing it */
51
52int     REMOVE(const char *path)
53{
54    static VSTRING *dest;
55    char   *slash;
56    struct stat st;
57
58    if (var_dont_remove == 0) {
59	return (remove(path));
60    } else {
61	if (dest == 0)
62	    dest = vstring_alloc(10);
63	vstring_sprintf(dest, "saved/%s", ((slash = strrchr(path, '/')) != 0) ?
64			slash + 1 : path);
65	for (;;) {
66	    if (stat(vstring_str(dest), &st) < 0)
67		break;
68	    vstring_strcat(dest, "+");
69	}
70	return (rename(path, vstring_str(dest)));
71    }
72}
73