[{"id":1156,"web_url":"https://patchwork.libcamera.org/comment/1156/","msgid":"<20190401111050.GB4787@pendragon.ideasonboard.com>","date":"2019-04-01T11:10:50","subject":"Re: [libcamera-devel] [PATCH v2 3/4] libcamera: utils: Use internal\n\tbasename implementation.","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Kieran,\n\nThank you for the patch.\n\nOn Mon, Apr 01, 2019 at 06:03:14PM +0700, Kieran Bingham wrote:\n> Differing implementations of basename() exist, some of which may modify\n> the content of the string passed as an argument.\n> \n> The implementation of basename() is trivial, thus to support different\n> toolchains, provide our own version which accepts and returns a const\n> char*.\n\ns/char\\*/char */\n\n> \n> Update the call sites to use the new implementation.\n> \n> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> ---\n>  src/libcamera/include/utils.h |  2 ++\n>  src/libcamera/log.cpp         |  2 +-\n>  src/libcamera/meson.build     |  1 +\n>  src/libcamera/utils.cpp       | 46 +++++++++++++++++++++++++++++++++++\n>  4 files changed, 50 insertions(+), 1 deletion(-)\n>  create mode 100644 src/libcamera/utils.cpp\n> \n> diff --git a/src/libcamera/include/utils.h b/src/libcamera/include/utils.h\n> index 73fa2e69b029..1b2a62c0fda7 100644\n> --- a/src/libcamera/include/utils.h\n> +++ b/src/libcamera/include/utils.h\n> @@ -15,6 +15,8 @@ namespace libcamera {\n>  \n>  namespace utils {\n>  \n> +const char *basename(const char *path);\n> +\n>  /* C++11 doesn't provide std::make_unique */\n>  template<typename T, typename... Args>\n>  std::unique_ptr<T> make_unique(Args&&... args)\n> diff --git a/src/libcamera/log.cpp b/src/libcamera/log.cpp\n> index 26ebf410a7a9..eb444c31857d 100644\n> --- a/src/libcamera/log.cpp\n> +++ b/src/libcamera/log.cpp\n> @@ -438,7 +438,7 @@ void LogMessage::init(const char *fileName, unsigned int line)\n>  \n>  \tmsgStream_ << \" \" << log_severity_name(severity_);\n>  \tmsgStream_ << \" \" << category_.name();\n> -\tmsgStream_ << \" \" << basename(fileName) << \":\" << line << \" \";\n> +\tmsgStream_ << \" \" << utils::basename(fileName) << \":\" << line << \" \";\n>  }\n>  \n>  LogMessage::~LogMessage()\n> diff --git a/src/libcamera/meson.build b/src/libcamera/meson.build\n> index 8384cd0af451..863cb60d4b90 100644\n> --- a/src/libcamera/meson.build\n> +++ b/src/libcamera/meson.build\n> @@ -16,6 +16,7 @@ libcamera_sources = files([\n>      'signal.cpp',\n>      'stream.cpp',\n>      'timer.cpp',\n> +    'utils.cpp',\n>      'v4l2_device.cpp',\n>      'v4l2_subdevice.cpp',\n>  ])\n> diff --git a/src/libcamera/utils.cpp b/src/libcamera/utils.cpp\n> new file mode 100644\n> index 000000000000..70936e36c5d5\n> --- /dev/null\n> +++ b/src/libcamera/utils.cpp\n> @@ -0,0 +1,46 @@\n> +/* SPDX-License-Identifier: LGPL-2.1-or-later */\n> +/*\n> + * Copyright (C) 2019, Google Inc.\n> + *\n> + * utils.cpp - Miscellaneous utility functions\n> + */\n> +\n> +#include <string.h>\n> +\n> +#include \"utils.h\"\n> +\n> +/**\n> + * \\file utils.h\n> + * \\brief Miscellaneous utility functions\n> + */\n> +\n> +namespace libcamera {\n> +\n> +namespace utils {\n> +\n> +/**\n> + * \\def ARRAY_SIZE(array)\n> + * \\brief Determine the number of elemnents in the static array.\n\ns/elemnents/elements/\n\n> + */\n> +\n> +/**\n> + * \\brief Strip the directory prefix from the path\n\nMissing \"\\param[in] path\" and \\return.\n\n> + *\n> + * basename is implemented differently across different toolchains.\n> + * Ensure consistency by providing our own implementation.\n\nI would instead tell what behaviour we provide. For instance you could\nmention that this implementation matches the one provided by the GNU\nlibc.\n\n> + */\n> +const char *basename(const char *path)\n> +{\n> +       const char *base = strrchr(path, '/');\n> +       return base ? base + 1 : path;\n> +}\n> +\n> +\n> +/**\n> + * \\fn libcamera::utils::make_unique(Args &&... args)\n> + * \\brief Construct an object and return a std::unique ptr to it\n\n\"Constructs an object of type T and wraps it in a std::unique_ptr.\" to\nmatch the documentation from\nhttps://en.cppreference.com/w/cpp/memory/unique_ptr/make_unique ?\n\n> + */\n> +\n> +} /* namespace utils */\n> +\n> +} /* namespace libcamera */","headers":{"Return-Path":"<laurent.pinchart@ideasonboard.com>","Received":["from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id CC575600F9\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon,  1 Apr 2019 13:11:02 +0200 (CEST)","from pendragon.ideasonboard.com\n\t(dfj612yhrgyx302h3jwwy-3.rev.dnainternet.fi\n\t[IPv6:2001:14ba:21f5:5b00:ce28:277f:58d7:3ca4])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 36E0C2F9;\n\tMon,  1 Apr 2019 13:11:02 +0200 (CEST)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1554117062;\n\tbh=i02ICE1aL09tcy4u+/IKpjtLgCmRiWzW88UuQFHgW2o=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=K9PF+ifIxgkYX3QJQOzMlJY/snLCHEBKwjDAs0uVt2TgpmHLKo0XaBnwVy/cakDnM\n\tDGFbwdtFvXgMaR/xjWZn4hx9lmmM9R/+ar1MegVxa19ej98WyHwKl2MpHB+Kmb1sBb\n\tUTg1ViO6aVfhEu2jFaRx3vcMp7NQ1kjZ0SiaB8sQ=","Date":"Mon, 1 Apr 2019 14:10:50 +0300","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Cc":"LibCamera Devel <libcamera-devel@lists.libcamera.org>","Message-ID":"<20190401111050.GB4787@pendragon.ideasonboard.com>","References":"<20190401110315.4148-1-kieran.bingham@ideasonboard.com>\n\t<20190401110315.4148-4-kieran.bingham@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20190401110315.4148-4-kieran.bingham@ideasonboard.com>","User-Agent":"Mutt/1.10.1 (2018-07-13)","Subject":"Re: [libcamera-devel] [PATCH v2 3/4] libcamera: utils: Use internal\n\tbasename implementation.","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.23","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>","X-List-Received-Date":"Mon, 01 Apr 2019 11:11:03 -0000"}},{"id":1165,"web_url":"https://patchwork.libcamera.org/comment/1165/","msgid":"<c2f04dfc-a5ac-f260-e208-fc8381ac54fa@ideasonboard.com>","date":"2019-04-02T04:51:38","subject":"Re: [libcamera-devel] [PATCH v2 3/4] libcamera: utils: Use internal\n\tbasename implementation.","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Hi Laurent,\n\nOn 01/04/2019 12:10, Laurent Pinchart wrote:\n> Hi Kieran,\n> \n> Thank you for the patch.\n> \n> On Mon, Apr 01, 2019 at 06:03:14PM +0700, Kieran Bingham wrote:\n>> Differing implementations of basename() exist, some of which may modify\n>> the content of the string passed as an argument.\n>>\n>> The implementation of basename() is trivial, thus to support different\n>> toolchains, provide our own version which accepts and returns a const\n>> char*.\n> \n> s/char\\*/char */\n> \n>>\n>> Update the call sites to use the new implementation.\n>>\n>> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n>> ---\n>>  src/libcamera/include/utils.h |  2 ++\n>>  src/libcamera/log.cpp         |  2 +-\n>>  src/libcamera/meson.build     |  1 +\n>>  src/libcamera/utils.cpp       | 46 +++++++++++++++++++++++++++++++++++\n>>  4 files changed, 50 insertions(+), 1 deletion(-)\n>>  create mode 100644 src/libcamera/utils.cpp\n>>\n>> diff --git a/src/libcamera/include/utils.h b/src/libcamera/include/utils.h\n>> index 73fa2e69b029..1b2a62c0fda7 100644\n>> --- a/src/libcamera/include/utils.h\n>> +++ b/src/libcamera/include/utils.h\n>> @@ -15,6 +15,8 @@ namespace libcamera {\n>>  \n>>  namespace utils {\n>>  \n>> +const char *basename(const char *path);\n>> +\n>>  /* C++11 doesn't provide std::make_unique */\n>>  template<typename T, typename... Args>\n>>  std::unique_ptr<T> make_unique(Args&&... args)\n>> diff --git a/src/libcamera/log.cpp b/src/libcamera/log.cpp\n>> index 26ebf410a7a9..eb444c31857d 100644\n>> --- a/src/libcamera/log.cpp\n>> +++ b/src/libcamera/log.cpp\n>> @@ -438,7 +438,7 @@ void LogMessage::init(const char *fileName, unsigned int line)\n>>  \n>>  \tmsgStream_ << \" \" << log_severity_name(severity_);\n>>  \tmsgStream_ << \" \" << category_.name();\n>> -\tmsgStream_ << \" \" << basename(fileName) << \":\" << line << \" \";\n>> +\tmsgStream_ << \" \" << utils::basename(fileName) << \":\" << line << \" \";\n>>  }\n>>  \n>>  LogMessage::~LogMessage()\n>> diff --git a/src/libcamera/meson.build b/src/libcamera/meson.build\n>> index 8384cd0af451..863cb60d4b90 100644\n>> --- a/src/libcamera/meson.build\n>> +++ b/src/libcamera/meson.build\n>> @@ -16,6 +16,7 @@ libcamera_sources = files([\n>>      'signal.cpp',\n>>      'stream.cpp',\n>>      'timer.cpp',\n>> +    'utils.cpp',\n>>      'v4l2_device.cpp',\n>>      'v4l2_subdevice.cpp',\n>>  ])\n>> diff --git a/src/libcamera/utils.cpp b/src/libcamera/utils.cpp\n>> new file mode 100644\n>> index 000000000000..70936e36c5d5\n>> --- /dev/null\n>> +++ b/src/libcamera/utils.cpp\n>> @@ -0,0 +1,46 @@\n>> +/* SPDX-License-Identifier: LGPL-2.1-or-later */\n>> +/*\n>> + * Copyright (C) 2019, Google Inc.\n>> + *\n>> + * utils.cpp - Miscellaneous utility functions\n>> + */\n>> +\n>> +#include <string.h>\n>> +\n>> +#include \"utils.h\"\n>> +\n>> +/**\n>> + * \\file utils.h\n>> + * \\brief Miscellaneous utility functions\n>> + */\n>> +\n>> +namespace libcamera {\n>> +\n>> +namespace utils {\n>> +\n>> +/**\n>> + * \\def ARRAY_SIZE(array)\n>> + * \\brief Determine the number of elemnents in the static array.\n> \n> s/elemnents/elements/\n\nDoh. Fixed.\n\n\n> \n>> + */\n>> +\n>> +/**\n>> + * \\brief Strip the directory prefix from the path\n> \n> Missing \"\\param[in] path\" and \\return.\n> \n>> + *\n>> + * basename is implemented differently across different toolchains.\n>> + * Ensure consistency by providing our own implementation.\n> \n> I would instead tell what behaviour we provide. For instance you could\n> mention that this implementation matches the one provided by the GNU\n> libc.\n> \n\nSure sounds good.\n\n\n>> + */\n>> +const char *basename(const char *path)\n>> +{\n>> +       const char *base = strrchr(path, '/');\n>> +       return base ? base + 1 : path;\n>> +}\n>> +\n>> +\n>> +/**\n>> + * \\fn libcamera::utils::make_unique(Args &&... args)\n>> + * \\brief Construct an object and return a std::unique ptr to it\n> \n> \"Constructs an object of type T and wraps it in a std::unique_ptr.\" to\n> match the documentation from\n> https://en.cppreference.com/w/cpp/memory/unique_ptr/make_unique ?\n> \n\nUpdated.\n\n\n>> + */\n>> +\n>> +} /* namespace utils */\n>> +\n>> +} /* namespace libcamera */\n>","headers":{"Return-Path":"<kieran.bingham@ideasonboard.com>","Received":["from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 6A46260DB2\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue,  2 Apr 2019 06:51:47 +0200 (CEST)","from [10.71.11.124] (unknown [147.50.13.10])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 3C4F62F9;\n\tTue,  2 Apr 2019 06:51:44 +0200 (CEST)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1554180706;\n\tbh=+rkJx1dQdqWSUR1+W+5QfsXXZIC1Bt0XEllLM/F24Qw=;\n\th=Reply-To:Subject:To:Cc:References:From:Date:In-Reply-To:From;\n\tb=JaH3NEHfgcbQxhAiQQcTJsqF4a9ezu0MRH9ivHZjSFQVoC2Pnx4tgFynKPXyU5V/A\n\tUa/luuEGL8mxn134SvNzv5nmfTJQ5TeL2bv8UksTM6j4PUZYNtxBetpNXWh5Pp1Phg\n\tjl1+mhEl9fnKBMPBab1P+DWv+xjv1LNsLtp1Xgz0=","Reply-To":"kieran.bingham@ideasonboard.com","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Cc":"LibCamera Devel <libcamera-devel@lists.libcamera.org>","References":"<20190401110315.4148-1-kieran.bingham@ideasonboard.com>\n\t<20190401110315.4148-4-kieran.bingham@ideasonboard.com>\n\t<20190401111050.GB4787@pendragon.ideasonboard.com>","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Openpgp":"preference=signencrypt","Autocrypt":"addr=kieran.bingham@ideasonboard.com; keydata=\n\t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\n\tsbsRB8KNNvVXBOVNwko86rQqF9drZuw=","Organization":"Ideas on Board","Message-ID":"<c2f04dfc-a5ac-f260-e208-fc8381ac54fa@ideasonboard.com>","Date":"Tue, 2 Apr 2019 11:51:38 +0700","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101\n\tThunderbird/60.5.1","MIME-Version":"1.0","In-Reply-To":"<20190401111050.GB4787@pendragon.ideasonboard.com>","Content-Type":"text/plain; charset=utf-8","Content-Language":"en-GB","Content-Transfer-Encoding":"8bit","Subject":"Re: [libcamera-devel] [PATCH v2 3/4] libcamera: utils: Use internal\n\tbasename implementation.","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.23","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>","X-List-Received-Date":"Tue, 02 Apr 2019 04:51:47 -0000"}}]