Falkon Develop
Cross-platform Qt-based web browser
qtlockedfile.h
Go to the documentation of this file.
1/****************************************************************************
2**
3** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
4** Contact: http://www.qt-project.org/legal
5**
6** This file is part of the Qt Solutions component.
7**
8** $QT_BEGIN_LICENSE:BSD$
9** You may use this file under the terms of the BSD license as follows:
10**
11** "Redistribution and use in source and binary forms, with or without
12** modification, are permitted provided that the following conditions are
13** met:
14** * Redistributions of source code must retain the above copyright
15** notice, this list of conditions and the following disclaimer.
16** * Redistributions in binary form must reproduce the above copyright
17** notice, this list of conditions and the following disclaimer in
18** the documentation and/or other materials provided with the
19** distribution.
20** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
21** of its contributors may be used to endorse or promote products derived
22** from this software without specific prior written permission.
23**
24**
25** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
36**
37** $QT_END_LICENSE$
38**
39****************************************************************************/
40
41#ifndef QTLOCKEDFILE_H
42#define QTLOCKEDFILE_H
43
44#include <QFile>
45#ifdef Q_OS_WIN
46#include <QVector>
47#endif
48
49#if defined(Q_OS_WIN)
50# if !defined(QT_QTLOCKEDFILE_EXPORT) && !defined(QT_QTLOCKEDFILE_IMPORT)
51# define QT_QTLOCKEDFILE_EXPORT
52# elif defined(QT_QTLOCKEDFILE_IMPORT)
53# if defined(QT_QTLOCKEDFILE_EXPORT)
54# undef QT_QTLOCKEDFILE_EXPORT
55# endif
56# define QT_QTLOCKEDFILE_EXPORT __declspec(dllimport)
57# elif defined(QT_QTLOCKEDFILE_EXPORT)
58# undef QT_QTLOCKEDFILE_EXPORT
59# define QT_QTLOCKEDFILE_EXPORT __declspec(dllexport)
60# endif
61#else
62# define QT_QTLOCKEDFILE_EXPORT
63#endif
64
65namespace QtLP_Private {
66
68{
69public:
70 enum LockMode { NoLock = 0, ReadLock, WriteLock };
71
73 QtLockedFile(const QString &name);
74 ~QtLockedFile() override;
75
76 bool open(OpenMode mode) override;
77
78 bool lock(LockMode mode, bool block = true);
79 bool unlock();
80 bool isLocked() const;
81 LockMode lockMode() const;
82
83private:
84#ifdef Q_OS_WIN
85 Qt::HANDLE wmutex;
86 Qt::HANDLE rmutex;
87 QVector<Qt::HANDLE> rmutexes;
88 QString mutexname;
89
90 Qt::HANDLE getMutexHandle(int idx, bool doCreate);
91 bool waitMutex(Qt::HANDLE mutex, bool doBlock);
92
93#endif
94 LockMode m_lock_mode;
95};
96}
97#endif
#define QT_QTLOCKEDFILE_EXPORT
Definition: qtlockedfile.h:62