From 0e1a80952524e672ce8ce5eb900740dda2ae9044 Mon Sep 17 00:00:00 2001 From: Kieran Bingham Date: Mon, 10 Dec 2018 13:48:15 +0000 Subject: libcamera: utils: Use internal basename implementation. 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. Reviewed-by: Laurent Pinchart 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 | 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 73fa2e69..1b2a62c0 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 26ebf410..eb444c31 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 4433abfc..b2fe0e4f 100644 --- a/src/libcamera/meson.build +++ b/src/libcamera/meson.build @@ -17,6 +17,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 00000000..fae28cee --- /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 +#include + +#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 */ -- cgit v1.2.1