]> git.ipfire.org Git - thirdparty/squid.git/blob - src/DiskIO/Mmapped/MmappedFile.h
Merged from parent (trunk r11728, v3.2.0.11+).
[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 void *operator new(size_t);
13 void operator delete(void *);
14 MmappedFile(char const *path);
15 ~MmappedFile();
16 virtual void open(int flags, mode_t mode, RefCount<IORequestor> callback);
17 virtual void create(int flags, mode_t mode, RefCount<IORequestor> callback);
18 virtual void read(ReadRequest *);
19 virtual void write(WriteRequest *);
20 virtual void close();
21 virtual bool error() const;
22 virtual int getFD() const { return fd;}
23
24 virtual bool canRead() const;
25 virtual bool canWrite() const;
26 virtual bool ioInProgress() const;
27
28 private:
29 CBDATA_CLASS(MmappedFile);
30
31 char const *path_;
32 RefCount<IORequestor> ioRequestor;
33 //RefCount<ReadRequest> readRequest;
34 //RefCount<WriteRequest> writeRequest;
35 int fd;
36
37 // mmapped memory leads to SEGV and bus errors if it maps beyond file
38 int64_t minOffset; ///< enforced if not negative (to preserve file headers)
39 int64_t maxOffset; ///< enforced if not negative (to avoid crashes)
40
41 bool error_;
42
43 void doClose();
44 };
45
46 #endif /* SQUID_MMAPPEDFILE_H */