31 #define MINIMUM_SIZE (16 << 20) 34 #define BLOCK_SIZE (4 << 20) 38 :m_file(name), m_address(Q_NULLPTR), m_size(0), m_pagesize(0), m_map_count(0)
41 #if defined(HAVE_GETPAGESIZE) 44 #if defined(HAVE_SYSCONF) && defined(_SC_PAGE_SIZE) 50 qWarning(
"SwapFile: unable to determine page size, using fallback");
76 qWarning(
"SwapFile(%s) -> open failed",
DBG(
m_file.fileName()));
83 unlink(
m_file.fileName().toLocal8Bit().data());
91 while (offset < rounded) {
97 if (
m_file.pos() !=
static_cast<qint64
>(offset + 1)) {
98 qWarning(
"SwapFile::allocate(): seek failed. DISK FULL !?");
107 if (
m_file.pos() + 1 <
static_cast<qint64
>(
size)) {
108 qWarning(
"SwapFile::allocate(%d MB) failed, DISK FULL ?",
127 if (size ==
m_size)
return true;
158 while (offset < rounded) {
164 if (
m_file.pos() !=
static_cast<qint64
>(offset + 1)) {
165 qWarning(
"SwapFile::resize(): seek failed. DISK FULL !?");
172 ok &=
m_file.resize(rounded);
173 ok &=
m_file.seek(rounded - 1);
179 qWarning(
"SwapFile::resize(): failed. DISK FULL !?");
199 qWarning(
"SwapFile(%s) -> remove FAILED",
DBG(
m_file.fileName()));
228 qWarning(
"SwapFile(%s) -> map FAILED",
DBG(
m_file.fileName()));
249 qWarning(
"SwapFile(%s) -> unmap FAILED",
DBG(
m_file.fileName()));
262 if (!
m_file.seek(offset))
return -1;
265 if (!
m_file.flush())
return -1;
267 if (length > INT_MAX) length = INT_MAX;
269 m_file.read(reinterpret_cast<char *>(buffer), length)
278 if (!
m_file.seek(offset))
return -1;
281 if (length > INT_MAX) length = INT_MAX;
283 m_file.write(reinterpret_cast<const char *>(buffer), length)
int write(unsigned int offset, const void *buffer, unsigned int length)
int read(unsigned int offset, void *buffer, unsigned int length)
bool allocate(size_t size)
SwapFile(const QString &name)
static unsigned int g_instances