[libcamera-devel] [PATCH v3 06/17] libcamera: base: file_descriptor: Add constructor from UniqueFD
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Mon Nov 29 17:43:21 CET 2021
Hi Jacopo,
On Mon, Nov 29, 2021 at 04:08:24PM +0100, Jacopo Mondi wrote:
> On Mon, Nov 29, 2021 at 01:57:41AM +0200, Laurent Pinchart wrote:
> > From: Hirokazu Honda <hiroh at chromium.org>
> >
> > Add a FileDescriptor constructor that takes a UniqueFD, transfering
> > ownership of the file descriptor to the FileDescriptor.
>
> Is this a good idea ? Can shared_ptr<>(unique_ptr<>) ?
For the second question, yes, see constructor 13 in
https://en.cppreference.com/w/cpp/memory/shared_ptr/shared_ptr. For the
first question, I think so, but we can discuss it :-)
> > Signed-off-by: Hirokazu Honda <hiroh at chromium.org>
> > Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> > ---
> > 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(+)
> >
> > 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
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list