]> git.ipfire.org Git - thirdparty/squid.git/blob - src/DiskIO/Mmapped/MmappedFile.h
SourceFormat Enforcement
[thirdparty/squid.git] / src / DiskIO / Mmapped / MmappedFile.h
1 /*
2 * Copyright (C) 1996-2017 The Squid Software Foundation and contributors
3 *
4 * Squid software is distributed under GPLv2+ license and includes
5 * contributions from numerous individuals and organizations.
6 * Please see the COPYING and CONTRIBUTORS files for details.
7 */
8
9 #ifndef SQUID_MMAPPEDFILE_H
10 #define SQUID_MMAPPEDFILE_H
11
12 #include "cbdata.h"
13 #include "DiskIO/DiskFile.h"
14 #include "DiskIO/IORequestor.h"
15
16 class MmappedFile : public DiskFile
17 {
18 CBDATA_CLASS(MmappedFile);
19
20 public:
21 MmappedFile(char const *path);
22 ~MmappedFile();
23 virtual void open(int flags, mode_t mode, RefCount<IORequestor> callback);
24 virtual void create(int flags, mode_t mode, RefCount<IORequestor> callback);
25 virtual void read(ReadRequest *);
26 virtual void write(WriteRequest *);
27 virtual void close();
28 virtual bool error() const;
29 virtual int getFD() const { return fd;}
30
31 virtual bool canRead() const;
32 virtual bool canWrite() const;
33 virtual bool ioInProgress() const;
34
35 private:
36 char const *path_;
37 RefCount<IORequestor> ioRequestor;
38 //RefCount<ReadRequest> readRequest;
39 //RefCount<WriteRequest> writeRequest;
40 int fd;
41
42 // mmapped memory leads to SEGV and bus errors if it maps beyond file
43 int64_t minOffset; ///< enforced if not negative (to preserve file headers)
44 int64_t maxOffset; ///< enforced if not negative (to avoid crashes)
45
46 bool error_;
47
48 void doClose();
49 };
50
51 #endif /* SQUID_MMAPPEDFILE_H */
52