Page Menu
Home
Phabricator (Chris)
Search
Configure Global Search
Log In
Files
F629171
qtlockedfile_unix.cpp
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Authored By
Unknown
Size
3 KB
Referenced Files
None
Subscribers
None
qtlockedfile_unix.cpp
View Options
/****************************************************************************
**
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the Qt Solutions component.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
**
** "Redistribution and use in source and binary forms, with or without
** modification, are permitted provided that the following conditions are
** met:
** * Redistributions of source code must retain the above copyright
** notice, this list of conditions and the following disclaimer.
** * Redistributions in binary form must reproduce the above copyright
** notice, this list of conditions and the following disclaimer in
** the documentation and/or other materials provided with the
** distribution.
** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
** of its contributors may be used to endorse or promote products derived
** from this software without specific prior written permission.
**
**
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
**
** $QT_END_LICENSE$
**
****************************************************************************/
#include
<string.h>
#include
<errno.h>
#include
<unistd.h>
#include
<fcntl.h>
#include
"qtlockedfile.h"
bool
QtLockedFile::lock
(
LockMode
mode
,
bool
block
)
{
if
(
!
isOpen
())
{
qWarning
(
"QtLockedFile::lock(): file is not opened"
);
return
false
;
}
if
(
mode
==
NoLock
)
return
unlock
();
if
(
mode
==
m_lock_mode
)
return
true
;
if
(
m_lock_mode
!=
NoLock
)
unlock
();
struct
flock
fl
;
fl
.
l_whence
=
SEEK_SET
;
fl
.
l_start
=
0
;
fl
.
l_len
=
0
;
fl
.
l_type
=
(
mode
==
ReadLock
)
?
F_RDLCK
:
F_WRLCK
;
int
cmd
=
block
?
F_SETLKW
:
F_SETLK
;
int
ret
=
fcntl
(
handle
(),
cmd
,
&
fl
);
if
(
ret
==
-1
)
{
if
(
errno
!=
EINTR
&&
errno
!=
EAGAIN
)
qWarning
(
"QtLockedFile::lock(): fcntl: %s"
,
strerror
(
errno
));
return
false
;
}
m_lock_mode
=
mode
;
return
true
;
}
bool
QtLockedFile::unlock
()
{
if
(
!
isOpen
())
{
qWarning
(
"QtLockedFile::unlock(): file is not opened"
);
return
false
;
}
if
(
!
isLocked
())
return
true
;
struct
flock
fl
;
fl
.
l_whence
=
SEEK_SET
;
fl
.
l_start
=
0
;
fl
.
l_len
=
0
;
fl
.
l_type
=
F_UNLCK
;
int
ret
=
fcntl
(
handle
(),
F_SETLKW
,
&
fl
);
if
(
ret
==
-1
)
{
qWarning
(
"QtLockedFile::lock(): fcntl: %s"
,
strerror
(
errno
));
return
false
;
}
m_lock_mode
=
NoLock
;
return
true
;
}
QtLockedFile
::~
QtLockedFile
()
{
if
(
isOpen
())
unlock
();
}
File Metadata
Details
Attached
Mime Type
text/x-c
Expires
Sun, Nov 15, 6:08 AM (1 d, 20 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
142907
Default Alt Text
qtlockedfile_unix.cpp (3 KB)
Attached To
Mode
R63 darkscreen
Attached
Detach File
Event Timeline