From 9b5dad13b56bdde7c40970351af3da3a2c3c9350 Mon Sep 17 00:00:00 2001 From: Noel Grandin Date: Sun, 13 Oct 2019 08:47:47 +0200 Subject: loplugin:stringadd look for unnecessary temporaries which defeat the *StringConcat optimisation. Also make StringConcat conversions treat a nullptr as an empty string, to match the O*String(char*) constructors. Change-Id: If45f5b4b6a535c97bfeeacd9ec472a7603a52e5b Reviewed-on: https://gerrit.libreoffice.org/80724 Tested-by: Jenkins Reviewed-by: Noel Grandin --- include/oox/export/utils.hxx | 2 +- include/rtl/stringconcat.hxx | 12 ++++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) (limited to 'include') diff --git a/include/oox/export/utils.hxx b/include/oox/export/utils.hxx index e28b01c1d95d..4e9fa9866341 100644 --- a/include/oox/export/utils.hxx +++ b/include/oox/export/utils.hxx @@ -27,7 +27,7 @@ inline OString I32SHEX(sal_Int32 x) { OString aStr = OString::number(x, 16); while (aStr.getLength() < 6) - aStr = OString("0") + aStr; + aStr = "0" + aStr; return aStr; } diff --git a/include/rtl/stringconcat.hxx b/include/rtl/stringconcat.hxx index b751c020e75b..3fd8b6720851 100644 --- a/include/rtl/stringconcat.hxx +++ b/include/rtl/stringconcat.hxx @@ -113,9 +113,11 @@ template<> struct ToStringHelper< const char* > { static std::size_t length( const char* str ) { - return strlen( str ); + return str ? strlen( str ) : 0; + } + static char* addData( char* buffer, const char* str ) { + return str ? addDataCString( buffer, str ) : buffer; } - static char* addData( char* buffer, const char* str ) { return addDataCString( buffer, str ); } static const bool allowOStringConcat = true; static const bool allowOUStringConcat = false; }; @@ -148,9 +150,11 @@ template<> struct ToStringHelper< const sal_Unicode* > { static std::size_t length( const sal_Unicode* str ) { - return std::char_traits::length( str ); + return str ? std::char_traits::length( str ) : 0; + } + static sal_Unicode* addData( sal_Unicode* buffer, const sal_Unicode* str ) { + return str ? addDataUString( buffer, str ) : buffer; } - static sal_Unicode* addData( sal_Unicode* buffer, const sal_Unicode* str ) { return addDataUString( buffer, str ); } static const bool allowOStringConcat = false; static const bool allowOUStringConcat = true; }; -- cgit