Message ID | 20190403041058.20921-4-kieran.bingham@ideasonboard.com |
---|---|
State | Accepted |
Commit | 0e1a80952524e672ce8ce5eb900740dda2ae9044 |
Headers | show |
Series |
|
Related | show |
Hi Kieran, Thank you for the patch. On Wed, Apr 03, 2019 at 11:10:57AM +0700, Kieran Bingham wrote: > 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 > C librariese, 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 <kieran.bingham@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > --- > src/libcamera/include/utils.h | 2 ++ > src/libcamera/log.cpp | 2 +- > src/libcamera/meson.build | 1 + > src/libcamera/utils.cpp | 51 +++++++++++++++++++++++++++++++++++ > 4 files changed, 55 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<typename T, typename... Args> > std::unique_ptr<T> 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..fae28cee556a > --- /dev/null > +++ b/src/libcamera/utils.cpp > @@ -0,0 +1,51 @@ > +/* SPDX-License-Identifier: LGPL-2.1-or-later */ > +/* > + * Copyright (C) 2019, Google Inc. > + * > + * utils.cpp - Miscellaneous utility functions > + */ > + > +#include <string.h> > +#include <sys/auxv.h> > + > +#include "utils.h" > + > +/** > + * \file utils.h > + * \brief Miscellaneous utility functions > + */ > + > +namespace libcamera { > + > +namespace utils { > + > +/** > + * \def ARRAY_SIZE(array) > + * \brief Determine the number of elements in the static array. > + */ > + > +/** > + * \brief Strip the directory prefix from the path > + * \param[in] path The path to process > + * > + * basename is implemented differently across different C libraries. This > + * implementation matches the one provided by the GNU libc, and does not > + * modify its input parameter. > + * > + * \return A pointer within the given path without any leading directory > + * components. > + */ > +const char *basename(const char *path) > +{ > + const char *base = strrchr(path, '/'); > + return base ? base + 1 : path; > +} > + > +/** > + * \fn libcamera::utils::make_unique(Args &&... args) > + * \brief Constructs an object of type T and wraps it in a std::unique_ptr. > + */ > + > +} /* namespace utils */ > + > +} /* namespace libcamera */
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<typename T, typename... Args> std::unique_ptr<T> 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..fae28cee556a --- /dev/null +++ b/src/libcamera/utils.cpp @@ -0,0 +1,51 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Copyright (C) 2019, Google Inc. + * + * utils.cpp - Miscellaneous utility functions + */ + +#include <string.h> +#include <sys/auxv.h> + +#include "utils.h" + +/** + * \file utils.h + * \brief Miscellaneous utility functions + */ + +namespace libcamera { + +namespace utils { + +/** + * \def ARRAY_SIZE(array) + * \brief Determine the number of elements in the static array. + */ + +/** + * \brief Strip the directory prefix from the path + * \param[in] path The path to process + * + * basename is implemented differently across different C libraries. This + * implementation matches the one provided by the GNU libc, and does not + * modify its input parameter. + * + * \return A pointer within the given path without any leading directory + * components. + */ +const char *basename(const char *path) +{ + const char *base = strrchr(path, '/'); + return base ? base + 1 : path; +} + +/** + * \fn libcamera::utils::make_unique(Args &&... args) + * \brief Constructs an object of type T and wraps it in a std::unique_ptr. + */ + +} /* namespace utils */ + +} /* namespace libcamera */
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 C librariese, 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 <kieran.bingham@ideasonboard.com> --- src/libcamera/include/utils.h | 2 ++ src/libcamera/log.cpp | 2 +- src/libcamera/meson.build | 1 + src/libcamera/utils.cpp | 51 +++++++++++++++++++++++++++++++++++ 4 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 src/libcamera/utils.cpp