utils: introduce helper class for file descriptors
This commit is contained in:
parent
ca6f84dad6
commit
cb8be232a1
3 changed files with 95 additions and 0 deletions
|
@ -3,6 +3,7 @@ target_sources(kwin PRIVATE
|
||||||
common.cpp
|
common.cpp
|
||||||
edid.cpp
|
edid.cpp
|
||||||
egl_context_attribute_builder.cpp
|
egl_context_attribute_builder.cpp
|
||||||
|
filedescriptor.cpp
|
||||||
realtime.cpp
|
realtime.cpp
|
||||||
subsurfacemonitor.cpp
|
subsurfacemonitor.cpp
|
||||||
udev.cpp
|
udev.cpp
|
||||||
|
|
61
src/utils/filedescriptor.cpp
Normal file
61
src/utils/filedescriptor.cpp
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
/*
|
||||||
|
KWin - the KDE window manager
|
||||||
|
This file is part of the KDE project.
|
||||||
|
|
||||||
|
SPDX-FileCopyrightText:: 2022 Xaver Hugl <xaver.hugl@gmail.com>
|
||||||
|
|
||||||
|
SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
*/
|
||||||
|
#include "filedescriptor.h"
|
||||||
|
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <utility>
|
||||||
|
|
||||||
|
namespace KWin
|
||||||
|
{
|
||||||
|
|
||||||
|
FileDescriptor::FileDescriptor(int fd)
|
||||||
|
: m_fd(fd)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
FileDescriptor::FileDescriptor(FileDescriptor &&other)
|
||||||
|
: m_fd(std::exchange(other.m_fd, -1))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
FileDescriptor &FileDescriptor::operator=(FileDescriptor &&other)
|
||||||
|
{
|
||||||
|
if (m_fd != -1) {
|
||||||
|
::close(m_fd);
|
||||||
|
}
|
||||||
|
m_fd = std::exchange(other.m_fd, -1);
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
FileDescriptor::~FileDescriptor()
|
||||||
|
{
|
||||||
|
if (m_fd != -1) {
|
||||||
|
::close(m_fd);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FileDescriptor::operator bool() const
|
||||||
|
{
|
||||||
|
return m_fd != -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int FileDescriptor::get() const
|
||||||
|
{
|
||||||
|
return m_fd;
|
||||||
|
}
|
||||||
|
|
||||||
|
FileDescriptor FileDescriptor::duplicate() const
|
||||||
|
{
|
||||||
|
if (m_fd != -1) {
|
||||||
|
return FileDescriptor{dup(m_fd)};
|
||||||
|
} else {
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
33
src/utils/filedescriptor.h
Normal file
33
src/utils/filedescriptor.h
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
/*
|
||||||
|
KWin - the KDE window manager
|
||||||
|
This file is part of the KDE project.
|
||||||
|
|
||||||
|
SPDX-FileCopyrightText:: 2022 Xaver Hugl <xaver.hugl@gmail.com>
|
||||||
|
|
||||||
|
SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <kwin_export.h>
|
||||||
|
|
||||||
|
namespace KWin
|
||||||
|
{
|
||||||
|
|
||||||
|
class KWIN_EXPORT FileDescriptor
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
FileDescriptor() = default;
|
||||||
|
explicit FileDescriptor(int fd);
|
||||||
|
FileDescriptor(FileDescriptor &&);
|
||||||
|
FileDescriptor &operator=(FileDescriptor &&);
|
||||||
|
~FileDescriptor();
|
||||||
|
|
||||||
|
explicit operator bool() const;
|
||||||
|
int get() const;
|
||||||
|
FileDescriptor duplicate() const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
int m_fd = -1;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in a new issue