summaryrefslogtreecommitdiffstats
path: root/maildrop/tempfile.h
blob: 168cc366077859451b4acd230a52e6eb16774a6e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#ifndef	tempfile_h
#define	tempfile_h


#include	"config.h"
#include	<sys/types.h>
#include	"exittrap.h"

#if	HAVE_FCNTL_H
#include	<fcntl.h>
#endif

#if	SHARED_TEMPDIR
#include	<stdio.h>
#endif

///////////////////////////////////////////////////////////////////////////
//
// We need to keep track of all temporary files we've opened, and close
// them if the process terminates.
//
// A TempFile object represents one temporary file currently in use.
// Open() method, if succesfull, returns a file descriptor, and saves
// the filename internally in the object.
// It is necessary to call Close() to close the descriptor (also saved
// internally) in order to mark the temporary file as no longer being
// in use.  Close() will automatically delete the file.
//
///////////////////////////////////////////////////////////////////////////

class TempFile : public ExitTrap {

protected:
	void	cleanup();
	void	forked();

#if	SHARED_TEMPDIR
	FILE	*fp;		/* tmpfile() output */
#endif
	char	*filename;
	int	fd;

	int	do_remove;
public:
	TempFile();
	~TempFile();
	int Open(const char *, int, mode_t=0666);
#if	SHARED_TEMPDIR
	int Open();
#endif

protected:
	void name(const char *);	// Partial initialization
	void descriptor(int fd_) { fd=fd_; }
public:
	void Close();
} ;

#endif