Fix: file-descriptor: missing include guards
[lttng-tools.git] / src / common / file-descriptor.hpp
index 54c2e182a1bb352e5395990ae486be093d5ef4e9..e8ddfe7a144815c15c8b729fd53027e0e923bd9d 100644 (file)
@@ -5,6 +5,9 @@
  *
  */
 
+#ifndef LTTNG_FILE_DESCRIPTOR_HPP
+#define LTTNG_FILE_DESCRIPTOR_HPP
+
 #include <common/error.hpp>
 #include <common/format.hpp>
 
@@ -16,32 +19,36 @@ namespace lttng {
 
 /*
  * RAII wrapper around a UNIX file descriptor. A file_descriptor's underlying
- * file descriptor
+ * file descriptor.
  */
 class file_descriptor {
 public:
-       explicit file_descriptor(int raw_fd) noexcept : _raw_fd{raw_fd}
+       file_descriptor()
+       {
+       }
+
+       explicit file_descriptor(int raw_fd) noexcept : _raw_fd{ raw_fd }
        {
                LTTNG_ASSERT(_is_valid_fd(_raw_fd));
        }
 
        file_descriptor(const file_descriptor&) = delete;
+       file_descriptor& operator=(const file_descriptor&) = delete;
+       file_descriptor& operator=(file_descriptor&& other)
+       {
+               _cleanup();
+               std::swap(_raw_fd, other._raw_fd);
+               return *this;
+       }
 
-       file_descriptor(file_descriptor&& other) noexcept {
-               LTTNG_ASSERT(_is_valid_fd(_raw_fd));
+       file_descriptor(file_descriptor&& other) noexcept
+       {
                std::swap(_raw_fd, other._raw_fd);
        }
 
        ~file_descriptor()
        {
-               if (!_is_valid_fd(_raw_fd)) {
-                       return;
-               }
-
-               const auto ret = ::close(_raw_fd);
-               if (ret) {
-                       PERROR("Failed to close file descriptor: fd=%i", _raw_fd);
-               }
+               _cleanup();
        }
 
        int fd() const noexcept
@@ -56,7 +63,23 @@ private:
                return fd >= 0;
        }
 
+       void _cleanup()
+       {
+               if (!_is_valid_fd(_raw_fd)) {
+                       return;
+               }
+
+               const auto ret = ::close(_raw_fd);
+
+               _raw_fd = -1;
+               if (ret) {
+                       PERROR("Failed to close file descriptor: fd=%i", _raw_fd);
+               }
+       }
+
        int _raw_fd = -1;
 };
 
 } /* namespace lttng */
+
+#endif /* LTTNG_FILE_DESCRIPTOR_HPP */
This page took 0.023314 seconds and 4 git commands to generate.