| Delivered-To: raj.khem@gmail.com |
| Received: by 2002:a05:620a:20d3:0:0:0:0 with SMTP id f19csp2716715qka; |
| Sat, 27 Mar 2021 19:58:30 -0700 (PDT) |
| X-Google-Smtp-Source: ABdhPJwyDnjZqZmFqHVShb/5/RoVkJ4Avv5bcnyuo85vIRR2vJDQF+QBZpQpEWHgx5GuEuwLVSC+ |
| X-Received: by 2002:a05:6512:22d0:: with SMTP id g16mr12125441lfu.650.1616900310724; |
| Sat, 27 Mar 2021 19:58:30 -0700 (PDT) |
| ARC-Seal: i=1; a=rsa-sha256; t=1616900310; cv=none; |
| d=google.com; s=arc-20160816; |
| b=bZlu68tossyE2YcGkt0HzIhqTUroWDT/EgJvAiQBgZ6bPzMJ+wjwWp3LzViqOxiRPQ |
| r0cFyme7CJ9YRf2TLmpjGuv2RPQ+EkrtFdlB7i65nhDrwvBoxt78vF2tUoDgVLL1YrU9 |
| wKgHPtBjtDcDveOXKQJH2j5HRwiBjCXlPRBhlSxV8kJPBj//dRaKm0MsxfiW/IgyN1tZ |
| FFxfe4Lk1Awm8ZKAklhdKMly3MFA6IbnjwNcN/84a0R/0+PLu9X8XIR6+CnrfqSgWOBx |
| zsV8p3HuVQTpX7Hhnkiz7PYudHsJJ/7KXeXTP6s9NNnZGu9A6U/E6VOob5BSm9DDIA5z |
| 4AnA== |
| ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; |
| h=content-transfer-encoding:mime-version:message-id:date:subject:cc |
| :to:from:dkim-signature; |
| bh=fbAn+wsNks5BGTY34H4T90NDFJaNV4nnt9vc9DBFaWQ=; |
| b=mLZNiQR/CdgcVTAc7OQmK0ZYTVpofG/EOqTIi2NYIYFhanWhatYY9Hx2xwxIp6kQ5R |
| n0uXh5tLth6aPYD09z3YcXYasEIszBKwoNUFjRA85lFm3d5/J2S1wC5rBy25QeCDOg57 |
| QdzYrTBX2QGRHGQKauEnX5FLDTT+I53sPa87TyvxUKBS+lTAbJig70KfmL7FJIEWT1ZI |
| CZKCErYFlQTGNnwM0CYVXyHv54D2tA25veHQIJN8KK+XObNWuAY3rYpqKoUpOP4vpSPi |
| MXJWAV4L6NZEShWvwJiC4Zdy2xFzXASX27CAKIsX6T5Rub03grVTg6WVt9bChK1x5jeg |
| A2Yw== |
| ARC-Authentication-Results: i=1; mx.google.com; |
| dkim=pass (test mode) header.i=@ideasonboard.com header.s=mail header.b=MniKswyT; |
| spf=pass (google.com: domain of laurent.pinchart@ideasonboard.com designates 213.167.242.64 as permitted sender) smtp.mailfrom=laurent.pinchart@ideasonboard.com |
| Return-Path: <laurent.pinchart@ideasonboard.com> |
| Received: from perceval.ideasonboard.com (perceval.ideasonboard.com. [213.167.242.64]) |
| by mx.google.com with ESMTPS id v18si12339470ljj.208.2021.03.27.19.58.30 |
| for <raj.khem@gmail.com> |
| (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); |
| Sat, 27 Mar 2021 19:58:30 -0700 (PDT) |
| Received-SPF: pass (google.com: domain of laurent.pinchart@ideasonboard.com designates 213.167.242.64 as permitted sender) client-ip=213.167.242.64; |
| Authentication-Results: mx.google.com; |
| dkim=pass (test mode) header.i=@ideasonboard.com header.s=mail header.b=MniKswyT; |
| spf=pass (google.com: domain of laurent.pinchart@ideasonboard.com designates 213.167.242.64 as permitted sender) smtp.mailfrom=laurent.pinchart@ideasonboard.com |
| Received: from pendragon.lan (62-78-145-57.bb.dnainternet.fi [62.78.145.57]) |
| by perceval.ideasonboard.com (Postfix) with ESMTPSA id 11F12332; |
| Sun, 28 Mar 2021 04:58:28 +0200 (CEST) |
| DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; |
| s=mail; t=1616900309; |
| bh=BwCg4h9N9fJysbMT1Yjbazbp7zTImD9mkWJSjCKzCmg=; |
| h=From:To:Cc:Subject:Date:From; |
| b=MniKswyT+aUtPgeMFeLqW6cRMFsPRN4W1XtVDA6pqI0QTSSx5koEuzSfEybjs6Qbp |
| ZdQar1r5nBIRCg9uq85YoLKoFeT7WN4PrwnRYPwaYGAFHfV44rDrq4RBe3VOIb+85W |
| tKn4HEzjlFelrImVbeymBsgpVhITveSVH1MdYRsE= |
| From: Laurent Pinchart <laurent.pinchart@ideasonboard.com> |
| To: libcamera-devel@lists.libcamera.org |
| Cc: Khem Raj <raj.khem@gmail.com> |
| Subject: [PATCH v2] libcamera: pipeline: uvcvideo: Avoid reference to temporary object |
| Date: Sun, 28 Mar 2021 05:57:41 +0300 |
| Message-Id: <20210328025741.30246-1-laurent.pinchart@ideasonboard.com> |
| X-Mailer: git-send-email 2.28.1 |
| MIME-Version: 1.0 |
| Content-Transfer-Encoding: 8bit |
| |
| From: Khem Raj <raj.khem@gmail.com> |
| |
| A range-based for loop whose range expression is an array of char |
| pointers and range variable declaration is a const reference to a |
| std::string creates a temporary string from the char pointer and binds |
| the range variable reference to it. This creates a const reference to a |
| temporary, which is valid in C++, and extends the lifetime of the |
| temporary to the lifetime of the reference. |
| |
| However, lifetime extension in range-based for loops is considered as a |
| sign of a potential issue, as a temporary is created for every |
| iteration, which can be costly, and the usage of a reference in the |
| range declaration doesn't make it obvious that the code isn't simply |
| binding a reference to an existing object. gcc 11, with the |
| -Wrange-loop-construct option, flags this: |
| |
| uvcvideo.cpp:432:33: error: loop variable 'name' of type 'const string&' {aka 'const std::__cxx11::basic_string<cha |
| r>&'} binds to a temporary constructed from type 'const char* const' [-Werror=range-loop-construct] |
| | 432 | for (const std::string &name : { "idVendor", "idProduct" }) { |
| | | ^~~~ |
| |
| To please the compiler, make the range variable a const char *. This may |
| bring a tiny performance improvement, as the name is only used once, in |
| a location where the compiler can use |
| |
| operator+(const std::string &, const char *) |
| |
| instead of |
| |
| operator+(const std::string &, const std::string &) |
| |
| Signed-off-by: Khem Raj <raj.khem@gmail.com> |
| Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> |
| |
| Use a const char * type instead of auto, and update the commit message |
| accordingly. |
| |
| Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> |
| --- |
| src/libcamera/pipeline/uvcvideo/uvcvideo.cpp | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| diff --git a/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp b/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp |
| index 031f96e28449..b6c6ade5ebaf 100644 |
| --- a/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp |
| +++ b/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp |
| @@ -429,7 +429,7 @@ std::string PipelineHandlerUVC::generateId(const UVCCameraData *data) |
| |
| /* Creata a device ID from the USB devices vendor and product ID. */ |
| std::string deviceId; |
| - for (const std::string &name : { "idVendor", "idProduct" }) { |
| + for (const char *name : { "idVendor", "idProduct" }) { |
| std::ifstream file(path + "/../" + name); |
| |
| if (!file.is_open()) |
| -- |
| Regards, |
| |
| Laurent Pinchart |
| |