Clean-up: coverity warns of uncaught exception during logging
[lttng-tools.git] / src / common / file-descriptor.hpp
1 /*
2 * Copyright (C) 2023 Jérémie Galarneau <jeremie.galarneau@efficios.com>
3 *
4 * SPDX-License-Identifier: LGPL-2.1-only
5 *
6 */
7
8 #include <common/error.hpp>
9 #include <common/format.hpp>
10
11 #include <algorithm>
12
13 #include <unistd.h>
14
15 namespace lttng {
16
17 /*
18 * RAII wrapper around a UNIX file descriptor. A file_descriptor's underlying
19 * file descriptor
20 */
21 class file_descriptor {
22 public:
23 explicit file_descriptor(int raw_fd) noexcept : _raw_fd{raw_fd}
24 {
25 LTTNG_ASSERT(_is_valid_fd(_raw_fd));
26 }
27
28 file_descriptor(const file_descriptor&) = delete;
29
30 file_descriptor(file_descriptor&& other) : _raw_fd{-1}
31 {
32 LTTNG_ASSERT(_is_valid_fd(_raw_fd));
33 std::swap(_raw_fd, other._raw_fd);
34 }
35
36 ~file_descriptor()
37 {
38 if (!_is_valid_fd(_raw_fd)) {
39 return;
40 }
41
42 const auto ret = ::close(_raw_fd);
43 if (ret) {
44 PERROR("Failed to close file descriptor: fd=%i", _raw_fd);
45 }
46 }
47
48 int fd() const noexcept
49 {
50 LTTNG_ASSERT(_is_valid_fd(_raw_fd));
51 return _raw_fd;
52 }
53
54 private:
55 static bool _is_valid_fd(int fd)
56 {
57 return fd >= 0;
58 }
59
60 int _raw_fd;
61 };
62
63 } /* namespace lttng */
This page took 0.030744 seconds and 4 git commands to generate.