KWin
Loading...
Searching...
No Matches
src
utils
filedescriptor.cpp
Go to the documentation of this file.
1
/*
2
KWin - the KDE window manager
3
This file is part of the KDE project.
4
5
SPDX-FileCopyrightText:: 2022 Xaver Hugl <xaver.hugl@gmail.com>
6
7
SPDX-License-Identifier: GPL-2.0-or-later
8
*/
9
#include "
filedescriptor.h
"
10
11
#include <fcntl.h>
12
#include <sys/poll.h>
13
#include <unistd.h>
14
#include <utility>
15
16
namespace
KWin
17
{
18
19
FileDescriptor::FileDescriptor
(
int
fd)
20
: m_fd(fd)
21
{
22
}
23
24
FileDescriptor::FileDescriptor
(
FileDescriptor
&&other)
25
: m_fd(std::exchange(other.m_fd, -1))
26
{
27
}
28
29
FileDescriptor
&
FileDescriptor::operator=
(
FileDescriptor
&&other)
30
{
31
if
(m_fd != -1) {
32
::close(m_fd);
33
}
34
m_fd = std::exchange(other.m_fd, -1);
35
return
*
this
;
36
}
37
38
FileDescriptor::~FileDescriptor
()
39
{
40
if
(m_fd != -1) {
41
::close(m_fd);
42
}
43
}
44
45
bool
FileDescriptor::isValid
()
const
46
{
47
return
m_fd != -1;
48
}
49
50
int
FileDescriptor::get
()
const
51
{
52
return
m_fd;
53
}
54
55
int
FileDescriptor::take
()
56
{
57
return
std::exchange(m_fd, -1);
58
}
59
60
void
FileDescriptor::reset
()
61
{
62
if
(m_fd != -1) {
63
::close(m_fd);
64
m_fd = -1;
65
}
66
}
67
68
FileDescriptor
FileDescriptor::duplicate
()
const
69
{
70
if
(m_fd != -1) {
71
return
FileDescriptor
{fcntl(m_fd, F_DUPFD_CLOEXEC, 0)};
72
}
else
{
73
return
{};
74
}
75
}
76
77
bool
FileDescriptor::isClosed
()
const
78
{
79
return
isClosed
(m_fd);
80
}
81
82
bool
FileDescriptor::isReadable
()
const
83
{
84
return
isReadable
(m_fd);
85
}
86
87
bool
FileDescriptor::isClosed
(
int
fd)
88
{
89
pollfd pfd = {
90
.fd = fd,
91
.events = POLLIN,
92
.revents = 0,
93
};
94
if
(poll(&pfd, 1, 0) < 0) {
95
return
true
;
96
}
97
return
pfd.revents & (POLLHUP | POLLERR);
98
}
99
100
bool
FileDescriptor::isReadable
(
int
fd)
101
{
102
pollfd pfd = {
103
.fd = fd,
104
.events = POLLIN,
105
.revents = 0,
106
};
107
return
poll(&pfd, 1, 0) && (pfd.revents & (POLLIN | POLLNVAL)) != 0;
108
}
109
}
KWin::FileDescriptor
Definition
filedescriptor.h:17
KWin::FileDescriptor::reset
void reset()
Definition
filedescriptor.cpp:60
KWin::FileDescriptor::isClosed
bool isClosed() const
Definition
filedescriptor.cpp:77
KWin::FileDescriptor::take
int take()
Definition
filedescriptor.cpp:55
KWin::FileDescriptor::operator=
FileDescriptor & operator=(FileDescriptor &&)
Definition
filedescriptor.cpp:29
KWin::FileDescriptor::~FileDescriptor
~FileDescriptor()
Definition
filedescriptor.cpp:38
KWin::FileDescriptor::isReadable
bool isReadable() const
Definition
filedescriptor.cpp:82
KWin::FileDescriptor::get
int get() const
Definition
filedescriptor.cpp:50
KWin::FileDescriptor::FileDescriptor
FileDescriptor()=default
KWin::FileDescriptor::isValid
bool isValid() const
Definition
filedescriptor.cpp:45
KWin::FileDescriptor::duplicate
FileDescriptor duplicate() const
Definition
filedescriptor.cpp:68
filedescriptor.h
KWin
Definition
activation_test.cpp:20
Generated on Sat Feb 17 2024 01:42:10 for KWin by
1.10.0