summaryrefslogtreecommitdiff
path: root/sw
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2010-10-07 11:37:07 +0100
committerCaolán McNamara <caolanm@redhat.com>2010-10-07 13:50:04 +0100
commit4412f714269737cbcad4f0733c45dcb07d6d51c0 (patch)
tree16902f49cc6c985299723cfeba3db277c8bbb339 /sw
parent21a1c899c07c924c1d8263814d7b8c2d2eea676f (diff)
#i114412# dubious delete in SwCalc::Str2Double
Diffstat (limited to 'sw')
-rw-r--r--sw/inc/calc.hxx8
-rw-r--r--sw/source/core/bastyp/calc.cxx71
2 files changed, 39 insertions, 40 deletions
diff --git a/sw/inc/calc.hxx b/sw/inc/calc.hxx
index 74c785c88e83..4db19fc9a29d 100644
--- a/sw/inc/calc.hxx
+++ b/sw/inc/calc.hxx
@@ -230,11 +230,11 @@ public:
void SetCalcError( SwCalcError eErr ) { eError = eErr; }
BOOL IsCalcError() const { return 0 != eError; }
- static BOOL Str2Double( const String& rStr, xub_StrLen& rPos,
+ static bool Str2Double( const String& rStr, xub_StrLen& rPos,
double& rVal,
- const LocaleDataWrapper* pData = 0 );
- static BOOL Str2Double( const String& rStr, xub_StrLen& rPos,
- double& rVal, SwDoc* pDoc );
+ LocaleDataWrapper const*const pData = 0 );
+ static bool Str2Double( const String& rStr, xub_StrLen& rPos,
+ double& rVal, SwDoc *const pDoc );
SW_DLLPUBLIC static BOOL IsValidVarName( const String& rStr,
String* pValidName = 0 );
diff --git a/sw/source/core/bastyp/calc.cxx b/sw/source/core/bastyp/calc.cxx
index f412f141349b..fd2560609000 100644
--- a/sw/source/core/bastyp/calc.cxx
+++ b/sw/source/core/bastyp/calc.cxx
@@ -37,6 +37,7 @@
#include <climits>
#include <cfloat>
#include <hintids.hxx>
+#include <osl/diagnose.hxx>
#include <rtl/math.hxx>
#include <editeng/langitem.hxx>
#include <com/sun/star/lang/XMultiServiceFactory.hpp>
@@ -1605,65 +1606,63 @@ String SwCalc::GetDBName(const String& rName)
//------------------------------------------------------------------------------
-/******************************************************************************
- * Methode : BOOL SwCalc::Str2Double( double& )
- * Beschreibung:
- * Erstellt : OK 07.06.94 12:56
- * Aenderung : JP 27.10.98
- ******************************************************************************/
-BOOL SwCalc::Str2Double( const String& rCommand, xub_StrLen& rCommandPos,
- double& rVal, const LocaleDataWrapper* pLclData )
+namespace
{
- const SvtSysLocale aSysLocale;
- const LocaleDataWrapper* pLclD = pLclData;
- if( !pLclD )
- pLclD = aSysLocale.GetLocaleDataPtr();
+static bool
+lcl_Str2Double( const String& rCommand, xub_StrLen& rCommandPos, double& rVal,
+ const LocaleDataWrapper* const pLclData )
+{
+ OSL_ASSERT(pLclData);
const xub_Unicode nCurrCmdPos = rCommandPos;
rtl_math_ConversionStatus eStatus;
const sal_Unicode* pEnd;
rVal = rtl_math_uStringToDouble( rCommand.GetBuffer() + rCommandPos,
rCommand.GetBuffer() + rCommand.Len(),
- pLclD->getNumDecimalSep().GetChar(0),
- pLclD->getNumThousandSep().GetChar(0),
+ pLclData->getNumDecimalSep().GetChar(0),
+ pLclData->getNumThousandSep().GetChar(0),
&eStatus, &pEnd );
rCommandPos = static_cast<xub_StrLen>(pEnd - rCommand.GetBuffer());
- if( !pLclData && pLclD != &aSysLocale.GetLocaleData() )
- delete (LocaleDataWrapper*)pLclD;
-
return rtl_math_ConversionStatus_Ok == eStatus && nCurrCmdPos != rCommandPos;
}
-BOOL SwCalc::Str2Double( const String& rCommand, xub_StrLen& rCommandPos,
- double& rVal, SwDoc* pDoc )
+}
+
+/******************************************************************************
+ * Methode : BOOL SwCalc::Str2Double( double& )
+ * Beschreibung:
+ * Erstellt : OK 07.06.94 12:56
+ * Aenderung : JP 27.10.98
+ ******************************************************************************/
+bool SwCalc::Str2Double( const String& rCommand, xub_StrLen& rCommandPos,
+ double& rVal, const LocaleDataWrapper* const pLclData )
+{
+ const SvtSysLocale aSysLocale;
+ return lcl_Str2Double( rCommand, rCommandPos, rVal,
+ pLclData ? pLclData : aSysLocale.GetLocaleDataPtr() );
+}
+
+bool SwCalc::Str2Double( const String& rCommand, xub_StrLen& rCommandPos,
+ double& rVal, SwDoc* const pDoc )
{
const SvtSysLocale aSysLocale;
- const LocaleDataWrapper* pLclD = aSysLocale.GetLocaleDataPtr();
+ ::std::auto_ptr<const LocaleDataWrapper> pLclD;
if( pDoc )
{
-
LanguageType eLang = GetDocAppScriptLang( *pDoc );
if( eLang != SvxLocaleToLanguage( pLclD->getLocale() ) )
- pLclD = new LocaleDataWrapper(
+ {
+ pLclD.reset( new LocaleDataWrapper(
::comphelper::getProcessServiceFactory(),
- SvxCreateLocale( eLang ) );
+ SvxCreateLocale( eLang ) ) );
+ }
}
- const xub_Unicode nCurrCmdPos = rCommandPos;
- rtl_math_ConversionStatus eStatus;
- const sal_Unicode* pEnd;
- rVal = rtl_math_uStringToDouble( rCommand.GetBuffer() + rCommandPos,
- rCommand.GetBuffer() + rCommand.Len(),
- pLclD->getNumDecimalSep().GetChar(0),
- pLclD->getNumThousandSep().GetChar(0),
- &eStatus, &pEnd );
- rCommandPos = static_cast<xub_StrLen>(pEnd - rCommand.GetBuffer());
-
- if( pLclD != &aSysLocale.GetLocaleData() )
- delete (LocaleDataWrapper*)pLclD;
+ bool const bRet = lcl_Str2Double( rCommand, rCommandPos, rVal,
+ (pLclD.get()) ? pLclD.get() : aSysLocale.GetLocaleDataPtr() );
- return rtl_math_ConversionStatus_Ok == eStatus && nCurrCmdPos != rCommandPos;
+ return bRet;
}
//------------------------------------------------------------------------------