[{"id":21408,"web_url":"https://patchwork.libcamera.org/comment/21408/","msgid":"<CAO5uPHNsH5zpRNDM30kR7NuOhxrbi+Kt6Lxoq+jZLPF8fi-T6A@mail.gmail.com>","date":"2021-11-30T05:21:49","subject":"Re: [libcamera-devel] [PATCH v4 07/22] libcamera: base:\n\tfile_descriptor: Return UniqueFD from dup()","submitter":{"id":63,"url":"https://patchwork.libcamera.org/api/people/63/","name":"Hirokazu Honda","email":"hiroh@chromium.org"},"content":"Hi Laurent,\n\nOn Tue, Nov 30, 2021 at 12:39 PM Laurent Pinchart\n<laurent.pinchart@ideasonboard.com> wrote:\n>\n> The dup() function returns a duplicate of the file descriptor. Wrapping\n> it in a FileDescriptor isn't wrong as such, but it prevents from using\n> it in contexts where a UniqueFD is needed. As the duplicate is\n> guaranteed to have a single owner when created, return it as a UniqueFD\n> instead. A FileDescriptor can easily be created from the UniqueFD if\n> desired.\n>\n> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> ---\n>  include/libcamera/base/file_descriptor.h |  2 +-\n>  src/libcamera/base/file_descriptor.cpp   | 22 ++++++++++++++--------\n>  2 files changed, 15 insertions(+), 9 deletions(-)\n>\n> diff --git a/include/libcamera/base/file_descriptor.h b/include/libcamera/base/file_descriptor.h\n> index 74292eba04f5..12a43f95d414 100644\n> --- a/include/libcamera/base/file_descriptor.h\n> +++ b/include/libcamera/base/file_descriptor.h\n> @@ -28,7 +28,7 @@ public:\n>\n>         bool isValid() const { return fd_ != nullptr; }\n>         int fd() const { return fd_ ? fd_->fd() : -1; }\n> -       FileDescriptor dup() const;\n> +       UniqueFD dup() const;\n>\n>  private:\n>         class Descriptor\n> diff --git a/src/libcamera/base/file_descriptor.cpp b/src/libcamera/base/file_descriptor.cpp\n> index da696b2501cd..a83bf52c31e6 100644\n> --- a/src/libcamera/base/file_descriptor.cpp\n> +++ b/src/libcamera/base/file_descriptor.cpp\n> @@ -222,17 +222,23 @@ FileDescriptor &FileDescriptor::operator=(FileDescriptor &&other)\n>   * \\brief Duplicate a FileDescriptor\n>   *\n>   * Duplicating a FileDescriptor creates a duplicate of the wrapped file\n> - * descriptor and returns a new FileDescriptor instance that wraps the\n> - * duplicate. The fd() function of the original and duplicate instances will\n> - * return different values. The duplicate instance will not be affected by\n> - * destruction of the original instance or its copies.\n> + * descriptor and returns a UniqueFD that owns the duplicate. The fd() function\n> + * of the original and the get() function of the duplicate will return different\n> + * values. The duplicate instance will not be affected by destruction of the\n> + * original instance or its copies.\n>   *\n> - * \\return A new FileDescriptor instance wrapping a duplicate of the original\n> - * file descriptor\n> + * \\return A UniqueFD owning a duplicate of the original file descriptor\n>   */\n> -FileDescriptor FileDescriptor::dup() const\n> +UniqueFD FileDescriptor::dup() const\n>  {\n> -       return FileDescriptor(fd());\n> +       int dupFd = ::dup(fd());\n> +       if (dupFd == -1) {\n\nnit: Shall we do\n\nUniqueFD dupFd(dup(fd()));\nif (!dupFd.isValid())\n\nlike other places?\n\nReviewed-by: Hirokazu Honda <hiroh@chromium.org>\n> +               int ret = -errno;\n> +               LOG(FileDescriptor, Error)\n> +                       << \"Failed to dup() fd: \" << strerror(-ret);\n> +       }\n> +\n> +       return UniqueFD(dupFd);\n>  }\n>\n>  FileDescriptor::Descriptor::Descriptor(int fd, bool duplicate)\n> --\n> Regards,\n>\n> Laurent Pinchart\n>","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 2E663BF415\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 30 Nov 2021 05:22:03 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 66084605B4;\n\tTue, 30 Nov 2021 06:22:02 +0100 (CET)","from mail-ed1-x536.google.com (mail-ed1-x536.google.com\n\t[IPv6:2a00:1450:4864:20::536])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 898A2604FC\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 30 Nov 2021 06:22:00 +0100 (CET)","by mail-ed1-x536.google.com with SMTP id y13so81575860edd.13\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 29 Nov 2021 21:22:00 -0800 (PST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=chromium.org header.i=@chromium.org\n\theader.b=\"QGfOSyV9\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org;\n\ts=google; \n\th=mime-version:references:in-reply-to:from:date:message-id:subject:to\n\t:cc; bh=gD5JZQtUfic6/UUu1F9iulsW+jcjCshazFKvdinVBok=;\n\tb=QGfOSyV9Es4qilyC7nXb6OQSD8TJROVkn/Z2JDEu9a3lfuAFQTi1m3fANsr2BymgeW\n\tZkqPxqtqOEdzxzixANYij2d4lgV8bRro2icJ8pjUuX4GWvgEK+HdcTFQvcHyZIgNbK/e\n\tNAXJIAdgjEcwYNgGDe5LktWnz8SC6jAJLyE3s=","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20210112;\n\th=x-gm-message-state:mime-version:references:in-reply-to:from:date\n\t:message-id:subject:to:cc;\n\tbh=gD5JZQtUfic6/UUu1F9iulsW+jcjCshazFKvdinVBok=;\n\tb=bq4pZVNpHm6VF89u4nObszmJ05XJVB2HElCOvMGcrrjPVA+06CD36Ojd2SolFjjtyA\n\ti/J/7JwlF7qoIaVV43t98akSxqel8tDFByQqt25Ub+mhM0rNjeqLs0yNWCTrChjKND/k\n\tykCIlBNKZRxXLuwhytocAPx/yuQELZcLvz/8QgrmkgJB6rDjJVZ3oumeDrsFAflCPoo4\n\tpQKsE2lsurpt9yrNh7VQX1z7alYk+GLydMdgXu+AIb0vA/JNtuLdAuGge666hI+owO4m\n\tDExe3SRf5QuL++CxnVwEVo+2kU/KS2BpBlXfkNUimE0P94nizpRDXy9W975tee3mRznv\n\t8BXg==","X-Gm-Message-State":"AOAM533KurlmGAW/Gzl2OnSa/9nBW3Ga8Sp9+8Jf3rwHEb52S+cPsie3\n\tAGW5TIwW+9cvE13VwLMTQ9MNGxJkoVhzGSYN3xP2/ee7p8fuQg==","X-Google-Smtp-Source":"ABdhPJwBPrgmiBJSbONwiG+oVRtNtzm5Fgu/H1y1N0+OEzF84m0RqGCYXzodvJXaM3yqLShvyHLAulB1PFU25HFs4nM=","X-Received":"by 2002:a17:906:390:: with SMTP id\n\tb16mr63490502eja.522.1638249720135; \n\tMon, 29 Nov 2021 21:22:00 -0800 (PST)","MIME-Version":"1.0","References":"<20211130033820.18235-1-laurent.pinchart@ideasonboard.com>\n\t<20211130033820.18235-8-laurent.pinchart@ideasonboard.com>","In-Reply-To":"<20211130033820.18235-8-laurent.pinchart@ideasonboard.com>","From":"Hirokazu Honda <hiroh@chromium.org>","Date":"Tue, 30 Nov 2021 14:21:49 +0900","Message-ID":"<CAO5uPHNsH5zpRNDM30kR7NuOhxrbi+Kt6Lxoq+jZLPF8fi-T6A@mail.gmail.com>","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Content-Type":"text/plain; charset=\"UTF-8\"","Subject":"Re: [libcamera-devel] [PATCH v4 07/22] libcamera: base:\n\tfile_descriptor: Return UniqueFD from dup()","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":21411,"web_url":"https://patchwork.libcamera.org/comment/21411/","msgid":"<YaW3Wdj0ZKpXbaKr@pendragon.ideasonboard.com>","date":"2021-11-30T05:32:09","subject":"Re: [libcamera-devel] [PATCH v4 07/22] libcamera: base:\n\tfile_descriptor: Return UniqueFD from dup()","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Hiro,\n\nOn Tue, Nov 30, 2021 at 02:21:49PM +0900, Hirokazu Honda wrote:\n> On Tue, Nov 30, 2021 at 12:39 PM Laurent Pinchart wrote:\n> >\n> > The dup() function returns a duplicate of the file descriptor. Wrapping\n> > it in a FileDescriptor isn't wrong as such, but it prevents from using\n> > it in contexts where a UniqueFD is needed. As the duplicate is\n> > guaranteed to have a single owner when created, return it as a UniqueFD\n> > instead. A FileDescriptor can easily be created from the UniqueFD if\n> > desired.\n> >\n> > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> > ---\n> >  include/libcamera/base/file_descriptor.h |  2 +-\n> >  src/libcamera/base/file_descriptor.cpp   | 22 ++++++++++++++--------\n> >  2 files changed, 15 insertions(+), 9 deletions(-)\n> >\n> > diff --git a/include/libcamera/base/file_descriptor.h b/include/libcamera/base/file_descriptor.h\n> > index 74292eba04f5..12a43f95d414 100644\n> > --- a/include/libcamera/base/file_descriptor.h\n> > +++ b/include/libcamera/base/file_descriptor.h\n> > @@ -28,7 +28,7 @@ public:\n> >\n> >         bool isValid() const { return fd_ != nullptr; }\n> >         int fd() const { return fd_ ? fd_->fd() : -1; }\n> > -       FileDescriptor dup() const;\n> > +       UniqueFD dup() const;\n> >\n> >  private:\n> >         class Descriptor\n> > diff --git a/src/libcamera/base/file_descriptor.cpp b/src/libcamera/base/file_descriptor.cpp\n> > index da696b2501cd..a83bf52c31e6 100644\n> > --- a/src/libcamera/base/file_descriptor.cpp\n> > +++ b/src/libcamera/base/file_descriptor.cpp\n> > @@ -222,17 +222,23 @@ FileDescriptor &FileDescriptor::operator=(FileDescriptor &&other)\n> >   * \\brief Duplicate a FileDescriptor\n> >   *\n> >   * Duplicating a FileDescriptor creates a duplicate of the wrapped file\n> > - * descriptor and returns a new FileDescriptor instance that wraps the\n> > - * duplicate. The fd() function of the original and duplicate instances will\n> > - * return different values. The duplicate instance will not be affected by\n> > - * destruction of the original instance or its copies.\n> > + * descriptor and returns a UniqueFD that owns the duplicate. The fd() function\n> > + * of the original and the get() function of the duplicate will return different\n> > + * values. The duplicate instance will not be affected by destruction of the\n> > + * original instance or its copies.\n> >   *\n> > - * \\return A new FileDescriptor instance wrapping a duplicate of the original\n> > - * file descriptor\n> > + * \\return A UniqueFD owning a duplicate of the original file descriptor\n> >   */\n> > -FileDescriptor FileDescriptor::dup() const\n> > +UniqueFD FileDescriptor::dup() const\n> >  {\n> > -       return FileDescriptor(fd());\n> > +       int dupFd = ::dup(fd());\n> > +       if (dupFd == -1) {\n> \n> nit: Shall we do\n> \n> UniqueFD dupFd(dup(fd()));\n> if (!dupFd.isValid())\n> \n> like other places?\n\nI'll do so in the next version.\n\n> Reviewed-by: Hirokazu Honda <hiroh@chromium.org>\n>\n> > +               int ret = -errno;\n> > +               LOG(FileDescriptor, Error)\n> > +                       << \"Failed to dup() fd: \" << strerror(-ret);\n> > +       }\n> > +\n> > +       return UniqueFD(dupFd);\n> >  }\n> >\n> >  FileDescriptor::Descriptor::Descriptor(int fd, bool duplicate)","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 6BC2EBF415\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 30 Nov 2021 05:32:37 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id B27C2605B4;\n\tTue, 30 Nov 2021 06:32:36 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id AC255604FC\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 30 Nov 2021 06:32:34 +0100 (CET)","from pendragon.ideasonboard.com (62-78-145-57.bb.dnainternet.fi\n\t[62.78.145.57])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 255F22A5;\n\tTue, 30 Nov 2021 06:32:34 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"LlC8y8Ma\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1638250354;\n\tbh=QE20STOa2wns9Gl5ycBRAN9TLQtgd1oy3JlYUp1188g=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=LlC8y8MaLcW9DX7ynT2nORE6W8+pSAncQ9R6XCWCMnwqOUyL8dMK8QNLIeHTmITXY\n\t22XhzsW2lJS/+wzy6Idq74t9BQwAKTkOpQAkjiS0TDn2gxzrtK0yTqlzAFGtY0WdSv\n\ttyr+BVz/Iiu/onnfzdhxIyU97uGuQzV0fR4rUEkI=","Date":"Tue, 30 Nov 2021 07:32:09 +0200","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Hirokazu Honda <hiroh@chromium.org>","Message-ID":"<YaW3Wdj0ZKpXbaKr@pendragon.ideasonboard.com>","References":"<20211130033820.18235-1-laurent.pinchart@ideasonboard.com>\n\t<20211130033820.18235-8-laurent.pinchart@ideasonboard.com>\n\t<CAO5uPHNsH5zpRNDM30kR7NuOhxrbi+Kt6Lxoq+jZLPF8fi-T6A@mail.gmail.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<CAO5uPHNsH5zpRNDM30kR7NuOhxrbi+Kt6Lxoq+jZLPF8fi-T6A@mail.gmail.com>","Subject":"Re: [libcamera-devel] [PATCH v4 07/22] libcamera: base:\n\tfile_descriptor: Return UniqueFD from dup()","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":21425,"web_url":"https://patchwork.libcamera.org/comment/21425/","msgid":"<20211130081126.wg3dyukwvf5d7jzl@uno.localdomain>","date":"2021-11-30T08:11:26","subject":"Re: [libcamera-devel] [PATCH v4 07/22] libcamera: base:\n\tfile_descriptor: Return UniqueFD from dup()","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"Hi Laurent\n\nOn Tue, Nov 30, 2021 at 07:32:09AM +0200, Laurent Pinchart wrote:\n> Hi Hiro,\n>\n> On Tue, Nov 30, 2021 at 02:21:49PM +0900, Hirokazu Honda wrote:\n> > On Tue, Nov 30, 2021 at 12:39 PM Laurent Pinchart wrote:\n> > >\n> > > The dup() function returns a duplicate of the file descriptor. Wrapping\n> > > it in a FileDescriptor isn't wrong as such, but it prevents from using\n> > > it in contexts where a UniqueFD is needed. As the duplicate is\n> > > guaranteed to have a single owner when created, return it as a UniqueFD\n> > > instead. A FileDescriptor can easily be created from the UniqueFD if\n> > > desired.\n> > >\n> > > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> > > ---\n> > >  include/libcamera/base/file_descriptor.h |  2 +-\n> > >  src/libcamera/base/file_descriptor.cpp   | 22 ++++++++++++++--------\n> > >  2 files changed, 15 insertions(+), 9 deletions(-)\n> > >\n> > > diff --git a/include/libcamera/base/file_descriptor.h b/include/libcamera/base/file_descriptor.h\n> > > index 74292eba04f5..12a43f95d414 100644\n> > > --- a/include/libcamera/base/file_descriptor.h\n> > > +++ b/include/libcamera/base/file_descriptor.h\n> > > @@ -28,7 +28,7 @@ public:\n> > >\n> > >         bool isValid() const { return fd_ != nullptr; }\n> > >         int fd() const { return fd_ ? fd_->fd() : -1; }\n> > > -       FileDescriptor dup() const;\n> > > +       UniqueFD dup() const;\n> > >\n> > >  private:\n> > >         class Descriptor\n> > > diff --git a/src/libcamera/base/file_descriptor.cpp b/src/libcamera/base/file_descriptor.cpp\n> > > index da696b2501cd..a83bf52c31e6 100644\n> > > --- a/src/libcamera/base/file_descriptor.cpp\n> > > +++ b/src/libcamera/base/file_descriptor.cpp\n> > > @@ -222,17 +222,23 @@ FileDescriptor &FileDescriptor::operator=(FileDescriptor &&other)\n> > >   * \\brief Duplicate a FileDescriptor\n> > >   *\n> > >   * Duplicating a FileDescriptor creates a duplicate of the wrapped file\n> > > - * descriptor and returns a new FileDescriptor instance that wraps the\n> > > - * duplicate. The fd() function of the original and duplicate instances will\n> > > - * return different values. The duplicate instance will not be affected by\n> > > - * destruction of the original instance or its copies.\n> > > + * descriptor and returns a UniqueFD that owns the duplicate. The fd() function\n> > > + * of the original and the get() function of the duplicate will return different\n> > > + * values. The duplicate instance will not be affected by destruction of the\n> > > + * original instance or its copies.\n> > >   *\n> > > - * \\return A new FileDescriptor instance wrapping a duplicate of the original\n> > > - * file descriptor\n> > > + * \\return A UniqueFD owning a duplicate of the original file descriptor\n> > >   */\n> > > -FileDescriptor FileDescriptor::dup() const\n> > > +UniqueFD FileDescriptor::dup() const\n> > >  {\n> > > -       return FileDescriptor(fd());\n> > > +       int dupFd = ::dup(fd());\n> > > +       if (dupFd == -1) {\n> >\n> > nit: Shall we do\n> >\n> > UniqueFD dupFd(dup(fd()));\n> > if (!dupFd.isValid())\n> >\n> > like other places?\n>\n> I'll do so in the next version.\n>\n> > Reviewed-by: Hirokazu Honda <hiroh@chromium.org>\n\nPlease add\n\nReviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n\nThanks\n  j\n\n> >\n> > > +               int ret = -errno;\n> > > +               LOG(FileDescriptor, Error)\n> > > +                       << \"Failed to dup() fd: \" << strerror(-ret);\n> > > +       }\n> > > +\n> > > +       return UniqueFD(dupFd);\n> > >  }\n> > >\n> > >  FileDescriptor::Descriptor::Descriptor(int fd, bool duplicate)\n>\n> --\n> Regards,\n>\n> Laurent Pinchart","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id DAD54BDB13\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 30 Nov 2021 08:10:35 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 9798E605B4;\n\tTue, 30 Nov 2021 09:10:35 +0100 (CET)","from relay2-d.mail.gandi.net (relay2-d.mail.gandi.net\n\t[217.70.183.194])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 870C660230\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 30 Nov 2021 09:10:33 +0100 (CET)","(Authenticated sender: jacopo@jmondi.org)\n\tby relay2-d.mail.gandi.net (Postfix) with ESMTPSA id E025840004;\n\tTue, 30 Nov 2021 08:10:32 +0000 (UTC)"],"Date":"Tue, 30 Nov 2021 09:11:26 +0100","From":"Jacopo Mondi <jacopo@jmondi.org>","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Message-ID":"<20211130081126.wg3dyukwvf5d7jzl@uno.localdomain>","References":"<20211130033820.18235-1-laurent.pinchart@ideasonboard.com>\n\t<20211130033820.18235-8-laurent.pinchart@ideasonboard.com>\n\t<CAO5uPHNsH5zpRNDM30kR7NuOhxrbi+Kt6Lxoq+jZLPF8fi-T6A@mail.gmail.com>\n\t<YaW3Wdj0ZKpXbaKr@pendragon.ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<YaW3Wdj0ZKpXbaKr@pendragon.ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH v4 07/22] libcamera: base:\n\tfile_descriptor: Return UniqueFD from dup()","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]