[libcamera-devel,v4,06/22] libcamera: base: file_descriptor: Add constructor from UniqueFD
diff mbox series

Message ID 20211130033820.18235-7-laurent.pinchart@ideasonboard.com
State Accepted
Headers show
Series
  • libcamera: Introduce UniqueFD
Related show

Commit Message

Laurent Pinchart Nov. 30, 2021, 3:38 a.m. UTC
From: Hirokazu Honda <hiroh@chromium.org>

Add a FileDescriptor constructor that takes a UniqueFD, transfering
ownership of the file descriptor to the FileDescriptor.

Signed-off-by: Hirokazu Honda <hiroh@chromium.org>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Hirokazu Honda <hiroh@chromium.org>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
---
Changes since v2:

- Pass UniqueFD by value
---
 include/libcamera/base/file_descriptor.h |  3 +++
 src/libcamera/base/file_descriptor.cpp   | 13 +++++++++++++
 2 files changed, 16 insertions(+)

Patch
diff mbox series

diff --git a/include/libcamera/base/file_descriptor.h b/include/libcamera/base/file_descriptor.h
index 5d1594e80801..74292eba04f5 100644
--- a/include/libcamera/base/file_descriptor.h
+++ b/include/libcamera/base/file_descriptor.h
@@ -11,11 +11,14 @@ 
 
 namespace libcamera {
 
+class UniqueFD;
+
 class FileDescriptor final
 {
 public:
 	explicit FileDescriptor(const int &fd = -1);
 	explicit FileDescriptor(int &&fd);
+	explicit FileDescriptor(UniqueFD fd);
 	FileDescriptor(const FileDescriptor &other);
 	FileDescriptor(FileDescriptor &&other);
 	~FileDescriptor();
diff --git a/src/libcamera/base/file_descriptor.cpp b/src/libcamera/base/file_descriptor.cpp
index 98d4b4bfd24f..da696b2501cd 100644
--- a/src/libcamera/base/file_descriptor.cpp
+++ b/src/libcamera/base/file_descriptor.cpp
@@ -13,6 +13,7 @@ 
 #include <utility>
 
 #include <libcamera/base/log.h>
+#include <libcamera/base/unique_fd.h>
 
 /**
  * \file base/file_descriptor.h
@@ -109,6 +110,18 @@  FileDescriptor::FileDescriptor(int &&fd)
 	fd = -1;
 }
 
+/**
+ * \brief Create a FileDescriptor taking ownership of a given UniqueFD \a fd
+ * \param[in] fd UniqueFD
+ *
+ * Construct a FileDescriptor from UniqueFD by taking ownership of the \a fd.
+ * The original \a fd becomes invalid.
+ */
+FileDescriptor::FileDescriptor(UniqueFD fd)
+	: FileDescriptor(fd.release())
+{
+}
+
 /**
  * \brief Copy constructor, create a FileDescriptor from a copy of \a other
  * \param[in] other The other FileDescriptor