From patchwork Mon Apr 1 11:03:12 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kieran Bingham X-Patchwork-Id: 827 Return-Path: Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id ADDD6600F9 for ; Mon, 1 Apr 2019 13:03:29 +0200 (CEST) Received: from Q.imgcgcw.net (unknown [147.50.13.10]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id D9876542; Mon, 1 Apr 2019 13:03:27 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1554116609; bh=8ETF0U87KhfO2nWUkad9p0Pyw1zgWHjqIlSes2E3gt8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=o1PyQoKRA5loCJ5zyH4WbcbzeDsHq9JFgj3XSzZNVicf7CKmp8NZcc+6jPfjLpLg9 ulEwKS4dfyArDgtLHUWdea5AZN8uHPcnH2pR9jZmqLWFE2/GtTrRAJ4s4cYOTFKua8 Mmg3pMZM1eNOPSziixUUHXAG8452WQY2HixOQRkk= From: Kieran Bingham To: LibCamera Devel Date: Mon, 1 Apr 2019 18:03:12 +0700 Message-Id: <20190401110315.4148-2-kieran.bingham@ideasonboard.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20190401110315.4148-1-kieran.bingham@ideasonboard.com> References: <20190401110315.4148-1-kieran.bingham@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v2 1/4] meson: Re-order the optional components X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 01 Apr 2019 11:03:29 -0000 Re-order the optional components to make them alphabetical, and fix up the indentation to use two spaces as required by meson. A comment is added to highlight that these optional components are enabled by default. Reviewed-by: Laurent Pinchart Signed-off-by: Kieran Bingham --- meson.build | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/meson.build b/meson.build index 43d4a57602bb..6e68c3e36772 100644 --- a/meson.build +++ b/meson.build @@ -29,12 +29,15 @@ subdir('include') subdir('src') subdir('utils') -if get_option('tests') - subdir('test') -endif +# The documentation and test components are optional and can be disabled +# through configuration values. They are enabled by default. if get_option('documentation') - subdir('Documentation') + subdir('Documentation') +endif + +if get_option('tests') + subdir('test') endif pkg_mod = import('pkgconfig') From patchwork Mon Apr 1 11:03:13 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kieran Bingham X-Patchwork-Id: 828 Return-Path: Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 38BCF600F9 for ; Mon, 1 Apr 2019 13:03:32 +0200 (CEST) Received: from Q.imgcgcw.net (unknown [147.50.13.10]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 54D082F9; Mon, 1 Apr 2019 13:03:29 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1554116611; bh=G3fHUw1Zr3apqpHgbTVqWIe4eK1/uZmT++e/FKAwLRA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=E9opK6nHaInUi7dLqq5qCL3Vf+Vo0OaRdSNpVyhw96m65+2Y9AIWPTRUjgUSVLviz 8T8hESZD62EvmBpF0kLBPhfz6hID9wbViUl3wcrjDjz5unJtP4ptR9VNBcCumMKKO0 qxnONyqnxNngrdU9LA7LrJdSO6bK6+yPOc1zA7pk= From: Kieran Bingham To: LibCamera Devel Date: Mon, 1 Apr 2019 18:03:13 +0700 Message-Id: <20190401110315.4148-3-kieran.bingham@ideasonboard.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20190401110315.4148-1-kieran.bingham@ideasonboard.com> References: <20190401110315.4148-1-kieran.bingham@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v2 2/4] meson: options: Document the options X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 01 Apr 2019 11:03:32 -0000 Re-order the project options and add documentation which will be presented by 'meson configure'. This produces the following extra information: Project options: Option Current Value Possible Values Description ------ ------------- --------------- ----------- documentation true [true, false] Generate the project documentation tests true [true, false] Compile and include the tests Reviewed-by: Laurent Pinchart Signed-off-by: Kieran Bingham --- meson_options.txt | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/meson_options.txt b/meson_options.txt index c5df661a2286..97efc85b4412 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -1,2 +1,7 @@ -option('tests', type : 'boolean') -option('documentation', type : 'boolean') +option('documentation', + type : 'boolean', + description : 'Generate the project documentation') + +option('tests', + type : 'boolean', + description: 'Compile and include the tests') From patchwork Mon Apr 1 11:03:14 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kieran Bingham X-Patchwork-Id: 829 Return-Path: Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 935C0600F9 for ; Mon, 1 Apr 2019 13:03:34 +0200 (CEST) Received: from Q.imgcgcw.net (unknown [147.50.13.10]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id C556B2F9; Mon, 1 Apr 2019 13:03:32 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1554116614; bh=P+5u+cN+N6Iug8x+WF+BL3CxFyt0XXfDTT1OZHUhKHc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=pQTScA6ro526z0x/3ipXVh0U2VNO8NKdPnMWdO5IxTFeRuZ8H0V4Nnb9cQ9J0ED4v 8oyjGy+kh/hSmouyX/3CTCCP6+mFsHeI3fX6/WMLo22tkPc88lLOXZXgh7Ic8/OSuw HWnBJjXk90+G+ULMQiHP5JL8xndwktqEjGWiS9Jg= From: Kieran Bingham To: LibCamera Devel Date: Mon, 1 Apr 2019 18:03:14 +0700 Message-Id: <20190401110315.4148-4-kieran.bingham@ideasonboard.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20190401110315.4148-1-kieran.bingham@ideasonboard.com> References: <20190401110315.4148-1-kieran.bingham@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v2 3/4] libcamera: utils: Use internal basename implementation. X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 01 Apr 2019 11:03:34 -0000 Differing implementations of basename() exist, some of which may modify the content of the string passed as an argument. The implementation of basename() is trivial, thus to support different toolchains, provide our own version which accepts and returns a const char*. Update the call sites to use the new implementation. Signed-off-by: Kieran Bingham --- src/libcamera/include/utils.h | 2 ++ src/libcamera/log.cpp | 2 +- src/libcamera/meson.build | 1 + src/libcamera/utils.cpp | 46 +++++++++++++++++++++++++++++++++++ 4 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 src/libcamera/utils.cpp diff --git a/src/libcamera/include/utils.h b/src/libcamera/include/utils.h index 73fa2e69b029..1b2a62c0fda7 100644 --- a/src/libcamera/include/utils.h +++ b/src/libcamera/include/utils.h @@ -15,6 +15,8 @@ namespace libcamera { namespace utils { +const char *basename(const char *path); + /* C++11 doesn't provide std::make_unique */ template std::unique_ptr make_unique(Args&&... args) diff --git a/src/libcamera/log.cpp b/src/libcamera/log.cpp index 26ebf410a7a9..eb444c31857d 100644 --- a/src/libcamera/log.cpp +++ b/src/libcamera/log.cpp @@ -438,7 +438,7 @@ void LogMessage::init(const char *fileName, unsigned int line) msgStream_ << " " << log_severity_name(severity_); msgStream_ << " " << category_.name(); - msgStream_ << " " << basename(fileName) << ":" << line << " "; + msgStream_ << " " << utils::basename(fileName) << ":" << line << " "; } LogMessage::~LogMessage() diff --git a/src/libcamera/meson.build b/src/libcamera/meson.build index 8384cd0af451..863cb60d4b90 100644 --- a/src/libcamera/meson.build +++ b/src/libcamera/meson.build @@ -16,6 +16,7 @@ libcamera_sources = files([ 'signal.cpp', 'stream.cpp', 'timer.cpp', + 'utils.cpp', 'v4l2_device.cpp', 'v4l2_subdevice.cpp', ]) diff --git a/src/libcamera/utils.cpp b/src/libcamera/utils.cpp new file mode 100644 index 000000000000..70936e36c5d5 --- /dev/null +++ b/src/libcamera/utils.cpp @@ -0,0 +1,46 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Copyright (C) 2019, Google Inc. + * + * utils.cpp - Miscellaneous utility functions + */ + +#include + +#include "utils.h" + +/** + * \file utils.h + * \brief Miscellaneous utility functions + */ + +namespace libcamera { + +namespace utils { + +/** + * \def ARRAY_SIZE(array) + * \brief Determine the number of elemnents in the static array. + */ + +/** + * \brief Strip the directory prefix from the path + * + * basename is implemented differently across different toolchains. + * Ensure consistency by providing our own implementation. + */ +const char *basename(const char *path) +{ + const char *base = strrchr(path, '/'); + return base ? base + 1 : path; +} + + +/** + * \fn libcamera::utils::make_unique(Args &&... args) + * \brief Construct an object and return a std::unique ptr to it + */ + +} /* namespace utils */ + +} /* namespace libcamera */ From patchwork Mon Apr 1 11:03:15 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kieran Bingham X-Patchwork-Id: 830 Return-Path: Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id CFCCD600F9 for ; Mon, 1 Apr 2019 13:03:36 +0200 (CEST) Received: from Q.imgcgcw.net (unknown [147.50.13.10]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 238522F9; Mon, 1 Apr 2019 13:03:34 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1554116616; bh=ic93TZh7q69lCHqqi0QIAHSQ0J8uhG2yvBq35DmBByI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=aCUbwdYYDyjGwC6Zh6Wi9M631J7xXVkizaMDoN9EZ4HwCi9VikHUXx2dTnB4ihlDt FnA0G8u7Tr8wS5w8r+gNQg5dSClHvWYaO3ZFu0uHA3krwMqWqvdB43IkNHt11Z9oSQ 43r243SK/qq7nZdbxj9PzI6tpvYSiGcY1HY1v0YA= From: Kieran Bingham To: LibCamera Devel Date: Mon, 1 Apr 2019 18:03:15 +0700 Message-Id: <20190401110315.4148-5-kieran.bingham@ideasonboard.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20190401110315.4148-1-kieran.bingham@ideasonboard.com> References: <20190401110315.4148-1-kieran.bingham@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v2 4/4] libcamera: utils: Use internal secure_getenv() implementation X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 01 Apr 2019 11:03:37 -0000 The secure_getenv() call is not provided by all toolchains. Support this feature by implementing our own version. Signed-off-by: Kieran Bingham Reviewed-by: Laurent Pinchart --- src/libcamera/include/utils.h | 2 ++ src/libcamera/log.cpp | 4 ++-- src/libcamera/utils.cpp | 20 ++++++++++++++++++++ 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/libcamera/include/utils.h b/src/libcamera/include/utils.h index 1b2a62c0fda7..79038a96feab 100644 --- a/src/libcamera/include/utils.h +++ b/src/libcamera/include/utils.h @@ -24,6 +24,8 @@ std::unique_ptr make_unique(Args&&... args) return std::unique_ptr(new T(std::forward(args)...)); } +char *secure_getenv(const char *name); + } /* namespace utils */ } /* namespace libcamera */ diff --git a/src/libcamera/log.cpp b/src/libcamera/log.cpp index eb444c31857d..71cfbc422ba0 100644 --- a/src/libcamera/log.cpp +++ b/src/libcamera/log.cpp @@ -122,7 +122,7 @@ Logger::Logger() */ void Logger::parseLogFile() { - const char *file = secure_getenv("LIBCAMERA_LOG_FILE"); + const char *file = utils::secure_getenv("LIBCAMERA_LOG_FILE"); if (!file) return; @@ -140,7 +140,7 @@ void Logger::parseLogFile() */ void Logger::parseLogLevels() { - const char *debug = secure_getenv("LIBCAMERA_LOG_LEVELS"); + const char *debug = utils::secure_getenv("LIBCAMERA_LOG_LEVELS"); if (!debug) return; diff --git a/src/libcamera/utils.cpp b/src/libcamera/utils.cpp index 70936e36c5d5..c49e65136514 100644 --- a/src/libcamera/utils.cpp +++ b/src/libcamera/utils.cpp @@ -6,6 +6,7 @@ */ #include +#include #include "utils.h" @@ -35,6 +36,25 @@ const char *basename(const char *path) return base ? base + 1 : path; } +/** + * \brief Get an environment variable + * + * The environment list is searched to find the variable 'name', and returns a + * pointer to the corresponding string. + * If 'secure execution' is required then this function always returns NULL to + * avoid vulnerabilities that could occur if the set-user-ID or set-group-ID + * programs accidentally trusted the environment. + * + * \returns A pointer to the value in the environment or NULL if the match fails + * or a secure environment is required. + */ +char *secure_getenv(const char *name) +{ + if (getauxval(AT_SECURE)) + return NULL; + else + return getenv(name); +} /** * \fn libcamera::utils::make_unique(Args &&... args)