]> git.ipfire.org Git - thirdparty/squid.git/blob - src/DiskIO/Mmapped/MmappedFile.h
Merged from trunk r12948.
[thirdparty/squid.git] / src / DiskIO / Mmapped / MmappedFile.h
1 #ifndef SQUID_MMAPPEDFILE_H
2 #define SQUID_MMAPPEDFILE_H
3
4 #include "cbdata.h"
5 #include "DiskIO/DiskFile.h"
6 #include "DiskIO/IORequestor.h"
7
8 class MmappedFile : public DiskFile
9 {
10
11 public:
12 MmappedFile(char const *path);
13 ~MmappedFile();
14 virtual void open(int flags, mode_t mode, RefCount<IORequestor> callback);
15 virtual void create(int flags, mode_t mode, RefCount<IORequestor> callback);
16 virtual void read(ReadRequest *);
17 virtual void write(WriteRequest *);
18 virtual void close();
19 virtual bool error() const;
20 virtual int getFD() const { return fd;}
21
22 virtual bool canRead() const;
23 virtual bool canWrite() const;
24 virtual bool ioInProgress() const;
25
26 private:
27 char const *path_;
28 RefCount<IORequestor> ioRequestor;
29 //RefCount<ReadRequest> readRequest;
30 //RefCount<WriteRequest> writeRequest;
31 int fd;
32
33 // mmapped memory leads to SEGV and bus errors if it maps beyond file
34 int64_t minOffset; ///< enforced if not negative (to preserve file headers)
35 int64_t maxOffset; ///< enforced if not negative (to avoid crashes)
36
37 bool error_;
38
39 void doClose();
40
41 CBDATA_CLASS2(MmappedFile);
42 };
43
44 #endif /* SQUID_MMAPPEDFILE_H */