summaryrefslogtreecommitdiff
path: root/xmlreader/source/span.cxx
blob: 29433c561fb70286ec3f249f5da76894113da59c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
 * This file is part of the LibreOffice project.
 *
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 *
 * This file incorporates work covered by the following license notice:
 *
 *   Licensed to the Apache Software Foundation (ASF) under one or more
 *   contributor license agreements. See the NOTICE file distributed
 *   with this work for additional information regarding copyright
 *   ownership. The ASF licenses this file to you under the Apache
 *   License, Version 2.0 (the "License"); you may not use this file
 *   except in compliance with the License. You may obtain a copy of
 *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
 */

#include <sal/config.h>

#include <cassert>

#include <com/sun/star/uno/RuntimeException.hpp>
#include <rtl/textcvt.h>
#include <rtl/textenc.h>
#include <rtl/ustring.h>
#include <rtl/ustring.hxx>
#include <sal/types.h>
#include <xmlreader/span.hxx>

namespace xmlreader {

OUString Span::convertFromUtf8() const {
    assert(is());
    rtl_uString * s = nullptr;
    if (!rtl_convertStringToUString(
            &s, begin, length, RTL_TEXTENCODING_UTF8,
            (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR |
             RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR |
             RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR)))
    {
        throw css::uno::RuntimeException(
            "cannot convert from UTF-8");
    }
    return OUString(s, SAL_NO_ACQUIRE);
}

}

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
3
-rw-r--r--sal/rtl/ustrbuf.cxx23
-rw-r--r--sal/rtl/ustring.cxx39
5 files changed, 155 insertions, 8 deletions
diff --git a/sal/rtl/strbuf.cxx b/sal/rtl/strbuf.cxx
index f75d0cc7ef57..bb42dee4a0d4 100644
--- a/sal/rtl/strbuf.cxx
+++ b/sal/rtl/strbuf.cxx
@@ -29,6 +29,8 @@ void SAL_CALL rtl_stringbuffer_newFromStr_WithLength( rtl_String ** newStr,
const sal_Char * value,
sal_Int32 count )
{
+ assert(newStr);
+ assert(count >= 0);
if (!value)
{
rtl_string_new_WithLength( newStr, 16 );
@@ -48,6 +50,9 @@ sal_Int32 SAL_CALL rtl_stringbuffer_newFromStringBuffer( rtl_String ** newStr,
sal_Int32 capacity,
rtl_String * oldStr )
{
+ assert(newStr);
+ assert(oldStr);
+ assert(capacity >= 0);
sal_Int32 newCapacity = capacity;
if (newCapacity < oldStr->length)
@@ -67,6 +72,9 @@ sal_Int32 SAL_CALL rtl_stringbuffer_newFromStringBuffer( rtl_String ** newStr,
void SAL_CALL rtl_stringbuffer_ensureCapacity
(rtl_String ** This, sal_Int32* capacity, sal_Int32 minimumCapacity)
{
+ assert(This);
+// assert(capacity && *capacity >= 0);
+// assert(minimumCapacity >= 0);
if (minimumCapacity > *capacity)
{
rtl_String * pTmp = *This;
@@ -94,6 +102,11 @@ void SAL_CALL rtl_stringbuffer_insert( rtl_String ** This,
const sal_Char * str,
sal_Int32 len )
{
+ assert(This);
+ assert(capacity && *capacity >= 0);
+ assert(offset >= 0 && offset <= (**This).length);
+ assert(len == 0 || str != nullptr);
+ assert(len >= 0);
sal_Int32 nOldLen;
sal_Char * pBuf;
sal_Int32 n;
@@ -134,6 +147,9 @@ void SAL_CALL rtl_stringbuffer_remove( rtl_String ** This,
sal_Int32 start,
sal_Int32 len )
{
+ assert(This);
+ assert(start >= 0 && start <= (**This).length);
+ assert(len >= 0);
sal_Int32 nTailLen;
sal_Char * pBuf;
diff --git a/sal/rtl/string.cxx b/sal/rtl/string.cxx
index a71ba162d64e..89459dbc2c0c 100644
--- a/sal/rtl/string.cxx
+++ b/sal/rtl/string.cxx
@@ -88,6 +88,7 @@ static rtl_String const aImplEmpty_rtl_String =
sal_Int32 SAL_CALL rtl_str_valueOfFloat(sal_Char * pStr, float f)
SAL_THROW_EXTERN_C()
{
+ assert(pStr);
rtl_String * pResult = NULL;
sal_Int32 nLen;
rtl_math_doubleToString(
@@ -104,6 +105,7 @@ sal_Int32 SAL_CALL rtl_str_valueOfFloat(sal_Char * pStr, float f)
sal_Int32 SAL_CALL rtl_str_valueOfDouble(sal_Char * pStr, double d)
SAL_THROW_EXTERN_C()
{
+ assert(pStr);
rtl_String * pResult = NULL;
sal_Int32 nLen;
rtl_math_doubleToString(
@@ -119,12 +121,14 @@ sal_Int32 SAL_CALL rtl_str_valueOfDouble(sal_Char * pStr, double d)
float SAL_CALL rtl_str_toFloat(sal_Char const * pStr) SAL_THROW_EXTERN_C()
{
+ assert(pStr);
return (float) rtl_math_stringToDouble(pStr, pStr + rtl_str_getLength(pStr),
'.', 0, 0, 0);
}
double SAL_CALL rtl_str_toDouble(sal_Char const * pStr) SAL_THROW_EXTERN_C()
{
+ assert(pStr);
return rtl_math_stringToDouble(pStr, pStr + rtl_str_getLength(pStr), '.', 0,
0, 0);
}
@@ -192,10 +196,10 @@ bool SAL_CALL rtl_impl_convertUStringToString(rtl_String ** pTarget,
sal_uInt32 nFlags,
bool bCheckErrors)
{
- OSL_ASSERT(pTarget != NULL
- && (pSource != NULL || nLength == 0)
- && nLength >= 0
- && (nLength == 0 || rtl_isOctetTextEncoding(nEncoding)));
+ assert(pTarget != nullptr);
+ assert(pSource != nullptr || nLength == 0);
+ assert(nLength >= 0);
+ OSL_ASSERT(nLength == 0 || rtl_isOctetTextEncoding(nEncoding));
if ( !nLength )
rtl_string_new( pTarget );
diff --git a/sal/rtl/strtmpl.cxx b/sal/rtl/strtmpl.cxx
index a50c3641949d..bfd61dec767f 100644
--- a/sal/rtl/strtmpl.cxx
+++ b/sal/rtl/strtmpl.cxx
@@ -61,6 +61,7 @@ static inline void rtl_str_ImplCopy( IMPL_RTL_STRCODE* _pDest,
sal_Int32 SAL_CALL IMPL_RTL_STRNAME( getLength )( const IMPL_RTL_STRCODE* pStr )
SAL_THROW_EXTERN_C()
{
+ assert(pStr);
#if !IMPL_RTL_IS_USTRING
// take advantage of builtin optimisations
return strlen( pStr);
@@ -86,6 +87,8 @@ sal_Int32 SAL_CALL IMPL_RTL_STRNAME( compare )( const IMPL_RTL_STRCODE* pStr1,
const IMPL_RTL_STRCODE* pStr2 )
SAL_THROW_EXTERN_C()
{
+ assert(pStr1);
+ assert(pStr2);
#if !IMPL_RTL_IS_USTRING
// take advantage of builtin optimisations
return strcmp( pStr1, pStr2);
@@ -119,6 +122,8 @@ sal_Int32 SAL_CALL IMPL_RTL_STRNAME( compare_WithLength )( const IMPL_RTL_STRCOD
sal_Int32 nStr2Len )
SAL_THROW_EXTERN_C()
{
+ assert(nStr1Len >= 0);
+ assert(nStr2Len >= 0);
#if !IMPL_RTL_IS_USTRING
// take advantage of builtin optimisations
sal_Int32 nMin = std::min(nStr1Len, nStr2Len);
@@ -159,6 +164,9 @@ sal_Int32 SAL_CALL IMPL_RTL_STRNAME( shortenedCompare_WithLength )( const IMPL_R
sal_Int32 nShortenedLength )
SAL_THROW_EXTERN_C()
{
+ assert(nStr1Len >= 0);
+ assert(nStr2Len >= 0);
+ assert(nShortenedLength >= 0);
#if !IMPL_RTL_IS_USTRING
// take advantage of builtin optimisations
sal_Int32 nMin = std::min(std::min(nStr1Len, nStr2Len), nShortenedLength);
@@ -209,6 +217,8 @@ sal_Int32 SAL_CALL IMPL_RTL_STRNAME( reverseCompare_WithLength )( const IMPL_RTL
sal_Int32 nStr2Len )
SAL_THROW_EXTERN_C()
{
+ assert(nStr1Len >= 0);
+ assert(nStr2Len >= 0);
const IMPL_RTL_STRCODE* pStr1Run = pStr1+nStr1Len;
const IMPL_RTL_STRCODE* pStr2Run = pStr2+nStr2Len;
sal_Int32 nRet;
@@ -231,6 +241,8 @@ sal_Int32 SAL_CALL IMPL_RTL_STRNAME( compareIgnoreAsciiCase )( const IMPL_RTL_ST
const IMPL_RTL_STRCODE* pStr2 )
SAL_THROW_EXTERN_C()
{
+ assert(pStr1);
+ assert(pStr2);
sal_uInt32 c1;
do
{
@@ -256,6 +268,8 @@ sal_Int32 SAL_CALL IMPL_RTL_STRNAME( compareIgnoreAsciiCase_WithLength )( const
sal_Int32 nStr2Len )
SAL_THROW_EXTERN_C()
{
+ assert(nStr1Len >= 0);
+ assert(nStr2Len >= 0);
const IMPL_RTL_STRCODE* pStr1End = pStr1 + nStr1Len;
const IMPL_RTL_STRCODE* pStr2End = pStr2 + nStr2Len;
while ( (pStr1 < pStr1End) && (pStr2 < pStr2End) )
@@ -281,6 +295,9 @@ sal_Int32 SAL_CALL IMPL_RTL_STRNAME( shortenedCompareIgnoreAsciiCase_WithLength
sal_Int32 nShortenedLength )
SAL_THROW_EXTERN_C()
{
+ assert(nStr1Len >= 0);
+ assert(nStr2Len >= 0);
+ assert(nShortenedLength >= 0);
const IMPL_RTL_STRCODE* pStr1End = pStr1 + nStr1Len;
const IMPL_RTL_STRCODE* pStr2End = pStr2 + nStr2Len;
while ( (nShortenedLength > 0) &&
@@ -315,6 +332,7 @@ sal_Int32 SAL_CALL IMPL_RTL_STRNAME( hashCode_WithLength )( const IMPL_RTL_STRCO
sal_Int32 nLen )
SAL_THROW_EXTERN_C()
{
+ assert(nLen >= 0);
sal_uInt32 h = static_cast<sal_uInt32>(nLen);
while ( nLen > 0 )
{
@@ -331,6 +349,7 @@ sal_Int32 SAL_CALL IMPL_RTL_STRNAME( indexOfChar )( const IMPL_RTL_STRCODE* pStr
IMPL_RTL_STRCODE c )
SAL_THROW_EXTERN_C()
{
+ assert(pStr);
#if !IMPL_RTL_IS_USTRING
// take advantage of builtin optimisations
const IMPL_RTL_STRCODE* p = strchr(pStr, c);
@@ -365,6 +384,7 @@ sal_Int32 SAL_CALL IMPL_RTL_STRNAME( indexOfChar_WithLength )( const IMPL_RTL_ST
IMPL_RTL_STRCODE c )
SAL_THROW_EXTERN_C()
{
+// assert(nLen >= 0);
#if !IMPL_RTL_IS_USTRING
// take advantage of builtin optimisations
IMPL_RTL_STRCODE* p = (IMPL_RTL_STRCODE*) memchr(pStr, c, nLen);
@@ -390,6 +410,7 @@ sal_Int32 SAL_CALL IMPL_RTL_STRNAME( lastIndexOfChar )( const IMPL_RTL_STRCODE*
IMPL_RTL_STRCODE c )
SAL_THROW_EXTERN_C()
{
+ assert(pStr);
#if !IMPL_RTL_IS_USTRING
// take advantage of builtin optimisations
const IMPL_RTL_STRCODE* p = strrchr(pStr, c);
@@ -415,6 +436,7 @@ sal_Int32 SAL_CALL IMPL_RTL_STRNAME( lastIndexOfChar_WithLength )( const IMPL_RT
IMPL_RTL_STRCODE c )
SAL_THROW_EXTERN_C()
{
+ assert(nLen >= 0);
pStr += nLen;
while ( nLen > 0 )
{
@@ -434,6 +456,8 @@ sal_Int32 SAL_CALL IMPL_RTL_STRNAME( indexOfStr )( const IMPL_RTL_STRCODE* pStr,
const IMPL_RTL_STRCODE* pSubStr )
SAL_THROW_EXTERN_C()
{
+ assert(pStr);
+ assert(pSubStr);
#if !IMPL_RTL_IS_USTRING
// take advantage of builtin optimisations
const IMPL_RTL_STRCODE* p = strstr(pStr, pSubStr);
@@ -461,6 +485,8 @@ sal_Int32 SAL_CALL IMPL_RTL_STRNAME( indexOfStr_WithLength )( const IMPL_RTL_STR
sal_Int32 nSubLen )
SAL_THROW_EXTERN_C()
{
+ assert(nStrLen >= 0);
+ assert(nSubLen >= 0);
/* faster search for a single character */
if ( nSubLen < 2 )
{
@@ -535,6 +561,8 @@ sal_Int32 SAL_CALL IMPL_RTL_STRNAME( lastIndexOfStr_WithLength )( const IMPL_RTL
sal_Int32 nSubLen )
SAL_THROW_EXTERN_C()
{
+// assert(nStrLen >= 0);
+ assert(nSubLen >= 0);
/* faster search for a single character */
if ( nSubLen < 2 )
{
@@ -591,6 +619,7 @@ void SAL_CALL IMPL_RTL_STRNAME( replaceChar )( IMPL_RTL_STRCODE* pStr,
IMPL_RTL_STRCODE cNew )
SAL_THROW_EXTERN_C()
{
+ assert(pStr);
while ( *pStr )
{
if ( *pStr == cOld )
@@ -608,6 +637,7 @@ void SAL_CALL IMPL_RTL_STRNAME( replaceChar_WithLength )( IMPL_RTL_STRCODE* pStr
IMPL_RTL_STRCODE cNew )
SAL_THROW_EXTERN_C()
{
+ assert(nLen >= 0);
while ( nLen > 0 )
{
if ( *pStr == cOld )
@@ -623,6 +653,7 @@ void SAL_CALL IMPL_RTL_STRNAME( replaceChar_WithLength )( IMPL_RTL_STRCODE* pStr
void SAL_CALL IMPL_RTL_STRNAME( toAsciiLowerCase )( IMPL_RTL_STRCODE* pStr )
SAL_THROW_EXTERN_C()
{
+ assert(pStr);
while ( *pStr )
{
*pStr = rtl::toAsciiLowerCase(IMPL_RTL_USTRCODE(*pStr));
@@ -637,6 +668,7 @@ void SAL_CALL IMPL_RTL_STRNAME( toAsciiLowerCase_WithLength )( IMPL_RTL_STRCODE*
sal_Int32 nLen )
SAL_THROW_EXTERN_C()
{
+ assert(nLen >= 0);
while ( nLen > 0 )
{
*pStr = rtl::toAsciiLowerCase(IMPL_RTL_USTRCODE(*pStr));
@@ -651,6 +683,7 @@ void SAL_CALL IMPL_RTL_STRNAME( toAsciiLowerCase_WithLength )( IMPL_RTL_STRCODE*
void SAL_CALL IMPL_RTL_STRNAME( toAsciiUpperCase )( IMPL_RTL_STRCODE* pStr )
SAL_THROW_EXTERN_C()
{
+ assert(pStr);
while ( *pStr )
{
*pStr = rtl::toAsciiUpperCase(IMPL_RTL_USTRCODE(*pStr));
@@ -665,6 +698,7 @@ void SAL_CALL IMPL_RTL_STRNAME( toAsciiUpperCase_WithLength )( IMPL_RTL_STRCODE*
sal_Int32 nLen )
SAL_THROW_EXTERN_C()
{
+ assert(nLen >= 0);
while ( nLen > 0 )
{
*pStr = rtl::toAsciiUpperCase(IMPL_RTL_USTRCODE(*pStr));
@@ -687,6 +721,7 @@ sal_Int32 SAL_CALL IMPL_RTL_STRNAME( trim )( IMPL_RTL_STRCODE* pStr )
sal_Int32 SAL_CALL IMPL_RTL_STRNAME( trim_WithLength )( IMPL_RTL_STRCODE* pStr, sal_Int32 nLen )
SAL_THROW_EXTERN_C()
{
+ assert(nLen >= 0);
sal_Int32 nPreSpaces = 0;
sal_Int32 nPostSpaces = 0;
sal_Int32 nIndex = nLen-1;
@@ -731,6 +766,7 @@ sal_Int32 SAL_CALL IMPL_RTL_STRNAME( trim_WithLength )( IMPL_RTL_STRCODE* pStr,
sal_Int32 SAL_CALL IMPL_RTL_STRNAME( valueOfBoolean )( IMPL_RTL_STRCODE* pStr, sal_Bool b )
SAL_THROW_EXTERN_C()
{
+ assert(pStr);
if ( b )
{
*pStr = 't';
@@ -767,6 +803,7 @@ sal_Int32 SAL_CALL IMPL_RTL_STRNAME( valueOfChar )( IMPL_RTL_STRCODE* pStr,
IMPL_RTL_STRCODE c )
SAL_THROW_EXTERN_C()
{
+ assert(pStr);
*pStr++ = c;
*pStr = 0;
return 1;
@@ -779,6 +816,7 @@ sal_Int32 SAL_CALL IMPL_RTL_STRNAME( valueOfInt32 )( IMPL_RTL_STRCODE* pStr,
sal_Int16 nRadix )
SAL_THROW_EXTERN_C()
{
+ assert(pStr);
sal_Char aBuf[RTL_STR_MAX_VALUEOFINT32];
sal_Char* pBuf = aBuf;
sal_Int32 nLen = 0;
@@ -833,6 +871,7 @@ sal_Int32 SAL_CALL IMPL_RTL_STRNAME( valueOfInt64 )( IMPL_RTL_STRCODE* pStr,
sal_Int16 nRadix )
SAL_THROW_EXTERN_C()
{
+ assert(pStr);
sal_Char aBuf[RTL_STR_MAX_VALUEOFINT64];
sal_Char* pBuf = aBuf;
sal_Int32 nLen = 0;
@@ -887,6 +926,7 @@ sal_Int32 SAL_CALL IMPL_RTL_STRNAME( valueOfUInt64 )( IMPL_RTL_STRCODE* pStr,
sal_Int16 nRadix )
SAL_THROW_EXTERN_C()
{
+ assert(pStr);
sal_Char aBuf[RTL_STR_MAX_VALUEOFUINT64];
sal_Char* pBuf = aBuf;
sal_Int32 nLen = 0;
@@ -930,6 +970,7 @@ sal_Int32 SAL_CALL IMPL_RTL_STRNAME( valueOfUInt64 )( IMPL_RTL_STRCODE* pStr,
sal_Bool SAL_CALL IMPL_RTL_STRNAME( toBoolean )( const IMPL_RTL_STRCODE* pStr )
SAL_THROW_EXTERN_C()
{
+ assert(pStr);
if ( *pStr == '1' )
return sal_True;
@@ -1029,6 +1070,7 @@ sal_Int32 SAL_CALL IMPL_RTL_STRNAME( toInt32 )( const IMPL_RTL_STRCODE* pStr,
sal_Int16 nRadix )
SAL_THROW_EXTERN_C()
{
+ assert(pStr);
return IMPL_RTL_STRNAME( toInt )<sal_Int32, sal_uInt32>(pStr, nRadix);
}
@@ -1036,6 +1078,7 @@ sal_Int64 SAL_CALL IMPL_RTL_STRNAME( toInt64 )( const IMPL_RTL_STRCODE* pStr,
sal_Int16 nRadix )
SAL_THROW_EXTERN_C()
{
+ assert(pStr);
return IMPL_RTL_STRNAME( toInt )<sal_Int64, sal_uInt64>(pStr, nRadix);
}
@@ -1083,6 +1126,7 @@ sal_uInt32 SAL_CALL IMPL_RTL_STRNAME( toUInt32 )( const IMPL_RTL_STRCODE* pStr,
sal_Int16 nRadix )
SAL_THROW_EXTERN_C()
{
+ assert(pStr);
return IMPL_RTL_STRNAME( toUInt )<sal_uInt32>(pStr, nRadix);
}
@@ -1090,6 +1134,7 @@ sal_uInt64 SAL_CALL IMPL_RTL_STRNAME( toUInt64 )( const IMPL_RTL_STRCODE* pStr,
sal_Int16 nRadix )
SAL_THROW_EXTERN_C()
{
+ assert(pStr);
return IMPL_RTL_STRNAME( toUInt )<sal_uInt64>(pStr, nRadix);
}
@@ -1120,6 +1165,7 @@ static IMPL_RTL_STRCODE* IMPL_RTL_STRINGNAME( ImplNewCopy )( IMPL_RTL_STRINGDATA
IMPL_RTL_STRINGDATA* pStr,
sal_Int32 nCount )
{
+ assert(nCount >= 0);
IMPL_RTL_STRCODE* pDest;