[libcamera-devel] [PATCH v4 2/7] libcamera: utils: Add method to strip Unicode characters
Niklas Söderlund
niklas.soderlund at ragnatech.se
Fri Aug 14 12:42:45 CEST 2020
Hi Kieran,
On 2020-08-14 09:28:59 +0100, Kieran Bingham wrote:
> Hi Niklas,
>
> On 13/08/2020 23:37, Niklas Söderlund wrote:
> > Add method that strips non-ASCII characters from a string.
> >
> > Signed-off-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
>
> I still would have thought the isprint might be more useful, as I don't
> think we want chars like newlines/or console control characthers getting
> through these strings.
I thought about it but if we used std::isprint() this would not produce
an ASCII string, instead it would produce an printable string :-) I read
some post (which I can't find now) that spoke agains using
std::isprint() to drop non-ASCII charters, but it might have been
targeted on proprietary OS implementations...
As you say, this is an internal helper and we can switch to
std::isprint() later if need.
>
> But if you don't think that's an issue here:
>
> Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
Thanks!
>
> I don't want to block the series, and this is an internal helper so it
> can always be updated if we hit any issue.
>
>
>
> > ---
> > * Changes since v3
> > - Fix spelling in comment.
> > - Rename to toAscii()
> > ---
> > include/libcamera/internal/utils.h | 2 ++
> > src/libcamera/utils.cpp | 21 +++++++++++++++++++++
> > 2 files changed, 23 insertions(+)
> >
> > diff --git a/include/libcamera/internal/utils.h b/include/libcamera/internal/utils.h
> > index 45cd6f120c51586b..b27f5a2323552058 100644
> > --- a/include/libcamera/internal/utils.h
> > +++ b/include/libcamera/internal/utils.h
> > @@ -197,6 +197,8 @@ private:
> >
> > details::StringSplitter split(const std::string &str, const std::string &delim);
> >
> > +std::string toAscii(const std::string &str);
> > +
> > std::string libcameraBuildPath();
> > std::string libcameraSourcePath();
> >
> > diff --git a/src/libcamera/utils.cpp b/src/libcamera/utils.cpp
> > index 615df46ac142a2a9..726b84bfbae53ff2 100644
> > --- a/src/libcamera/utils.cpp
> > +++ b/src/libcamera/utils.cpp
> > @@ -342,6 +342,27 @@ details::StringSplitter split(const std::string &str, const std::string &delim)
> > return details::StringSplitter(str, delim);
> > }
> >
> > +/**
> > + * \brief Strip all Unicode characters from a string
> > + * \param[in] str The string to strip
> > + *
> > + * Strip all non-ASCII characters form a string. A Unicode character that spans
> > + * multiple bytes (and therefore is not also an ASCII character) may be
> > + * identified by the fact that its most significant bit is always set.
> > + *
> > + * \todo When switching to C++ 20 use std::remove_if.
> > + *
> > + * \return An ASCII string
> > + */
> > +std::string toAscii(const std::string &str)
> > +{
> > + std::string ret;
> > + for (const char &c : str)
> > + if (!(c & 0x80))
> > + ret += c;
> > + return ret;
> > +}
> > +
> > /**
> > * \brief Check if libcamera is installed or not
> > *
> >
>
> --
> Regards
> --
> Kieran
--
Regards,
Niklas Söderlund
More information about the libcamera-devel
mailing list