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 <laurent.pinchart@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
This commit is contained in:
Kieran Bingham
2018-12-10 13:48:15 +00:00
parent abda899fa9
commit 0e1a809525
4 changed files with 55 additions and 1 deletions
+2
View File
@@ -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)
+1 -1
View File
@@ -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()
+1
View File
@@ -17,6 +17,7 @@ libcamera_sources = files([
'signal.cpp',
'stream.cpp',
'timer.cpp',
'utils.cpp',
'v4l2_device.cpp',
'v4l2_subdevice.cpp',
])
+51
View File
@@ -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 */