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