[libcamera-devel] [PATCH v3 06/17] libcamera: base: file_descriptor: Add constructor from UniqueFD

Jacopo Mondi jacopo at jmondi.org
Mon Nov 29 18:23:35 CET 2021


Hi Laurent,

On Mon, Nov 29, 2021 at 06:43:21PM +0200, Laurent Pinchart wrote:
> 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 :-)
>

Ok then :)
Reviewed-by: Jacopo Mondi <jacopo at jmondi.org>


> > > 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