mirror of
https://github.com/ARMSX2/ARMSX2.git
synced 2026-08-24 16:50:16 -07:00
3rdparty: Update simpleini to 4.25
Signed-off-by: SternXD <stern@sidestore.io>
This commit is contained in:
Vendored
+1
-1
@@ -1,6 +1,6 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2006-2022 Brodie Thiesfield
|
||||
Copyright (c) 2006-2024 Brodie Thiesfield
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal in
|
||||
|
||||
+87
-85
@@ -1,8 +1,10 @@
|
||||
/*
|
||||
* https://web.archive.org/web/20090529064329/http://www.unicode.org:80/Public/PROGRAMS/CVTUTF/
|
||||
*
|
||||
* Copyright 2001-2004 Unicode, Inc.
|
||||
*
|
||||
*
|
||||
* Disclaimer
|
||||
*
|
||||
*
|
||||
* This source code is provided as is by Unicode, Inc. No claims are
|
||||
* made as to fitness for any particular purpose. No warranties of any
|
||||
* kind are expressed or implied. The recipient agrees to determine
|
||||
@@ -10,9 +12,9 @@
|
||||
* purchased on magnetic or optical media from Unicode, Inc., the
|
||||
* sole remedy for any claim will be exchange of defective media
|
||||
* within 90 days of receipt.
|
||||
*
|
||||
*
|
||||
* Limitations on Rights to Redistribute This Code
|
||||
*
|
||||
*
|
||||
* Unicode, Inc. hereby grants the right to freely use the information
|
||||
* supplied in this file in the creation of products supporting the
|
||||
* Unicode Standard, and to make copies of this file in any form
|
||||
@@ -20,74 +22,74 @@
|
||||
* remains attached.
|
||||
*/
|
||||
|
||||
/* ---------------------------------------------------------------------
|
||||
/* ---------------------------------------------------------------------
|
||||
|
||||
Conversions between UTF32, UTF-16, and UTF-8. Header file.
|
||||
Conversions between UTF32, UTF-16, and UTF-8. Header file.
|
||||
|
||||
Several functions are included here, forming a complete set of
|
||||
conversions between the three formats. UTF-7 is not included
|
||||
here, but is handled in a separate source file.
|
||||
Several funtions are included here, forming a complete set of
|
||||
conversions between the three formats. UTF-7 is not included
|
||||
here, but is handled in a separate source file.
|
||||
|
||||
Each of these routines takes pointers to input buffers and output
|
||||
buffers. The input buffers are const.
|
||||
Each of these routines takes pointers to input buffers and output
|
||||
buffers. The input buffers are const.
|
||||
|
||||
Each routine converts the text between *sourceStart and sourceEnd,
|
||||
putting the result into the buffer between *targetStart and
|
||||
targetEnd. Note: the end pointers are *after* the last item: e.g.
|
||||
*(sourceEnd - 1) is the last item.
|
||||
Each routine converts the text between *sourceStart and sourceEnd,
|
||||
putting the result into the buffer between *targetStart and
|
||||
targetEnd. Note: the end pointers are *after* the last item: e.g.
|
||||
*(sourceEnd - 1) is the last item.
|
||||
|
||||
The return result indicates whether the conversion was successful,
|
||||
and if not, whether the problem was in the source or target buffers.
|
||||
(Only the first encountered problem is indicated.)
|
||||
The return result indicates whether the conversion was successful,
|
||||
and if not, whether the problem was in the source or target buffers.
|
||||
(Only the first encountered problem is indicated.)
|
||||
|
||||
After the conversion, *sourceStart and *targetStart are both
|
||||
updated to point to the end of last text successfully converted in
|
||||
the respective buffers.
|
||||
After the conversion, *sourceStart and *targetStart are both
|
||||
updated to point to the end of last text successfully converted in
|
||||
the respective buffers.
|
||||
|
||||
Input parameters:
|
||||
sourceStart - pointer to a pointer to the source buffer.
|
||||
The contents of this are modified on return so that
|
||||
it points at the next thing to be converted.
|
||||
targetStart - similarly, pointer to pointer to the target buffer.
|
||||
sourceEnd, targetEnd - respectively pointers to the ends of the
|
||||
two buffers, for overflow checking only.
|
||||
Input parameters:
|
||||
sourceStart - pointer to a pointer to the source buffer.
|
||||
The contents of this are modified on return so that
|
||||
it points at the next thing to be converted.
|
||||
targetStart - similarly, pointer to pointer to the target buffer.
|
||||
sourceEnd, targetEnd - respectively pointers to the ends of the
|
||||
two buffers, for overflow checking only.
|
||||
|
||||
These conversion functions take a ConversionFlags argument. When this
|
||||
flag is set to strict, both irregular sequences and isolated surrogates
|
||||
will cause an error. When the flag is set to lenient, both irregular
|
||||
sequences and isolated surrogates are converted.
|
||||
These conversion functions take a ConversionFlags argument. When this
|
||||
flag is set to strict, both irregular sequences and isolated surrogates
|
||||
will cause an error. When the flag is set to lenient, both irregular
|
||||
sequences and isolated surrogates are converted.
|
||||
|
||||
Whether the flag is strict or lenient, all illegal sequences will cause
|
||||
an error return. This includes sequences such as: <F4 90 80 80>, <C0 80>,
|
||||
or <A0> in UTF-8, and values above 0x10FFFF in UTF-32. Conformant code
|
||||
must check for illegal sequences.
|
||||
Whether the flag is strict or lenient, all illegal sequences will cause
|
||||
an error return. This includes sequences such as: <F4 90 80 80>, <C0 80>,
|
||||
or <A0> in UTF-8, and values above 0x10FFFF in UTF-32. Conformant code
|
||||
must check for illegal sequences.
|
||||
|
||||
When the flag is set to lenient, characters over 0x10FFFF are converted
|
||||
to the replacement character; otherwise (when the flag is set to strict)
|
||||
they constitute an error.
|
||||
When the flag is set to lenient, characters over 0x10FFFF are converted
|
||||
to the replacement character; otherwise (when the flag is set to strict)
|
||||
they constitute an error.
|
||||
|
||||
Output parameters:
|
||||
The value "sourceIllegal" is returned from some routines if the input
|
||||
sequence is malformed. When "sourceIllegal" is returned, the source
|
||||
value will point to the illegal value that caused the problem. E.g.,
|
||||
in UTF-8 when a sequence is malformed, it points to the start of the
|
||||
malformed sequence.
|
||||
Output parameters:
|
||||
The value "sourceIllegal" is returned from some routines if the input
|
||||
sequence is malformed. When "sourceIllegal" is returned, the source
|
||||
value will point to the illegal value that caused the problem. E.g.,
|
||||
in UTF-8 when a sequence is malformed, it points to the start of the
|
||||
malformed sequence.
|
||||
|
||||
Author: Mark E. Davis, 1994.
|
||||
Rev History: Rick McGowan, fixes & updates May 2001.
|
||||
Fixes & updates, Sept 2001.
|
||||
Author: Mark E. Davis, 1994.
|
||||
Rev History: Rick McGowan, fixes & updates May 2001.
|
||||
Fixes & updates, Sept 2001.
|
||||
|
||||
------------------------------------------------------------------------ */
|
||||
------------------------------------------------------------------------ */
|
||||
|
||||
/* ---------------------------------------------------------------------
|
||||
The following 4 definitions are compiler-specific.
|
||||
The C standard does not guarantee that wchar_t has at least
|
||||
16 bits, so wchar_t is no less portable than unsigned short!
|
||||
All should be unsigned values to avoid sign extension during
|
||||
bit mask & shift operations.
|
||||
------------------------------------------------------------------------ */
|
||||
/* ---------------------------------------------------------------------
|
||||
The following 4 definitions are compiler-specific.
|
||||
The C standard does not guarantee that wchar_t has at least
|
||||
16 bits, so wchar_t is no less portable than unsigned short!
|
||||
All should be unsigned values to avoid sign extension during
|
||||
bit mask & shift operations.
|
||||
------------------------------------------------------------------------ */
|
||||
|
||||
typedef unsigned int UTF32; /* at least 32 bits */
|
||||
typedef unsigned long UTF32; /* at least 32 bits */
|
||||
typedef unsigned short UTF16; /* at least 16 bits */
|
||||
typedef unsigned char UTF8; /* typically 8 bits */
|
||||
typedef unsigned char Boolean; /* 0 or 1 */
|
||||
@@ -100,15 +102,15 @@ typedef unsigned char Boolean; /* 0 or 1 */
|
||||
#define UNI_MAX_LEGAL_UTF32 (UTF32)0x0010FFFF
|
||||
|
||||
typedef enum {
|
||||
conversionOK, /* conversion successful */
|
||||
sourceExhausted, /* partial character in source, but hit end */
|
||||
targetExhausted, /* insufficient room in target for conversion */
|
||||
sourceIllegal /* source sequence is illegal/malformed */
|
||||
conversionOK, /* conversion successful */
|
||||
sourceExhausted, /* partial character in source, but hit end */
|
||||
targetExhausted, /* insuff. room in target for conversion */
|
||||
sourceIllegal /* source sequence is illegal/malformed */
|
||||
} ConversionResult;
|
||||
|
||||
typedef enum {
|
||||
strictConversion = 0,
|
||||
lenientConversion
|
||||
strictConversion = 0,
|
||||
lenientConversion
|
||||
} ConversionFlags;
|
||||
|
||||
/* This is for C++ and does no harm in C */
|
||||
@@ -116,34 +118,34 @@ typedef enum {
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
ConversionResult ConvertUTF8toUTF16 (
|
||||
const UTF8** sourceStart, const UTF8* sourceEnd,
|
||||
UTF16** targetStart, UTF16* targetEnd, ConversionFlags flags);
|
||||
ConversionResult ConvertUTF8toUTF16(
|
||||
const UTF8** sourceStart, const UTF8* sourceEnd,
|
||||
UTF16** targetStart, UTF16* targetEnd, ConversionFlags flags);
|
||||
|
||||
ConversionResult ConvertUTF16toUTF8 (
|
||||
const UTF16** sourceStart, const UTF16* sourceEnd,
|
||||
UTF8** targetStart, UTF8* targetEnd, ConversionFlags flags);
|
||||
|
||||
ConversionResult ConvertUTF8toUTF32 (
|
||||
const UTF8** sourceStart, const UTF8* sourceEnd,
|
||||
UTF32** targetStart, UTF32* targetEnd, ConversionFlags flags);
|
||||
ConversionResult ConvertUTF16toUTF8(
|
||||
const UTF16** sourceStart, const UTF16* sourceEnd,
|
||||
UTF8** targetStart, UTF8* targetEnd, ConversionFlags flags);
|
||||
|
||||
ConversionResult ConvertUTF32toUTF8 (
|
||||
const UTF32** sourceStart, const UTF32* sourceEnd,
|
||||
UTF8** targetStart, UTF8* targetEnd, ConversionFlags flags);
|
||||
|
||||
ConversionResult ConvertUTF16toUTF32 (
|
||||
const UTF16** sourceStart, const UTF16* sourceEnd,
|
||||
UTF32** targetStart, UTF32* targetEnd, ConversionFlags flags);
|
||||
ConversionResult ConvertUTF8toUTF32(
|
||||
const UTF8** sourceStart, const UTF8* sourceEnd,
|
||||
UTF32** targetStart, UTF32* targetEnd, ConversionFlags flags);
|
||||
|
||||
ConversionResult ConvertUTF32toUTF16 (
|
||||
const UTF32** sourceStart, const UTF32* sourceEnd,
|
||||
UTF16** targetStart, UTF16* targetEnd, ConversionFlags flags);
|
||||
ConversionResult ConvertUTF32toUTF8(
|
||||
const UTF32** sourceStart, const UTF32* sourceEnd,
|
||||
UTF8** targetStart, UTF8* targetEnd, ConversionFlags flags);
|
||||
|
||||
Boolean isLegalUTF8Sequence(const UTF8 *source, const UTF8 *sourceEnd);
|
||||
ConversionResult ConvertUTF16toUTF32(
|
||||
const UTF16** sourceStart, const UTF16* sourceEnd,
|
||||
UTF32** targetStart, UTF32* targetEnd, ConversionFlags flags);
|
||||
|
||||
ConversionResult ConvertUTF32toUTF16(
|
||||
const UTF32** sourceStart, const UTF32* sourceEnd,
|
||||
UTF16** targetStart, UTF16* targetEnd, ConversionFlags flags);
|
||||
|
||||
Boolean isLegalUTF8Sequence(const UTF8* source, const UTF8* sourceEnd);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
/* --------------------------------------------------------------------- */
|
||||
/* --------------------------------------------------------------------- */
|
||||
+62
-26
@@ -5,7 +5,7 @@
|
||||
<tr><th>File <td>SimpleIni.h
|
||||
<tr><th>Author <td>Brodie Thiesfield
|
||||
<tr><th>Source <td>https://github.com/brofield/simpleini
|
||||
<tr><th>Version <td>4.22
|
||||
<tr><th>Version <td>4.25
|
||||
</table>
|
||||
|
||||
Jump to the @link CSimpleIniTempl CSimpleIni @endlink interface documentation.
|
||||
@@ -53,7 +53,7 @@
|
||||
-# If you will only be using straight utf8 files and access the data via the
|
||||
char interface, then you do not need any conversion library and could define
|
||||
SI_NO_CONVERSION. Note that no conversion also means no validation of the data.
|
||||
If no converter is specified then the default converter is SI_CONVERT_GENERIC
|
||||
If no converter is specified then the default converter is SI_NO_CONVERSION
|
||||
on Mac/Linux and SI_CONVERT_WIN32 on Windows. If you need widechar support on
|
||||
Mac/Linux then use either SI_CONVERT_GENERIC or SI_CONVERT_ICU. These are also
|
||||
supported on all platforms.
|
||||
@@ -161,6 +161,9 @@
|
||||
|
||||
@section notes NOTES
|
||||
|
||||
- The maximum supported file size is 1 GiB (SI_MAX_FILE_SIZE). Files larger
|
||||
than this will be rejected with SI_FILE error to prevent excessive memory
|
||||
allocation and potential denial of service attacks.
|
||||
- To load UTF-8 data on Windows 95, you need to use Microsoft Layer for
|
||||
Unicode, or SI_CONVERT_GENERIC, or SI_CONVERT_ICU.
|
||||
- When using SI_CONVERT_GENERIC, ConvertUTF.c must be compiled and linked.
|
||||
@@ -261,6 +264,10 @@ constexpr int SI_FAIL = -1; //!< Generic failure
|
||||
constexpr int SI_NOMEM = -2; //!< Out of memory error
|
||||
constexpr int SI_FILE = -3; //!< File error (see errno for detail error)
|
||||
|
||||
//! Maximum supported file size (1 GiB). Files larger than this will be rejected
|
||||
//! to prevent excessive memory allocation and potential denial of service.
|
||||
constexpr size_t SI_MAX_FILE_SIZE = 1024ULL * 1024ULL * 1024ULL;
|
||||
|
||||
#define SI_UTF8_SIGNATURE "\xEF\xBB\xBF"
|
||||
|
||||
#ifdef _WIN32
|
||||
@@ -357,7 +364,7 @@ public:
|
||||
if (lhs.nOrder != rhs.nOrder) {
|
||||
return lhs.nOrder < rhs.nOrder;
|
||||
}
|
||||
return KeyOrder()(lhs.pItem, rhs.pItem);
|
||||
return KeyOrder()(lhs, rhs);
|
||||
}
|
||||
};
|
||||
};
|
||||
@@ -1462,9 +1469,14 @@ CSimpleIniTempl<SI_CHAR,SI_STRLESS,SI_CONVERTER>::LoadFile(
|
||||
if (lSize == 0) {
|
||||
return SI_OK;
|
||||
}
|
||||
|
||||
|
||||
// check file size is within supported limits (SI_MAX_FILE_SIZE)
|
||||
if (static_cast<size_t>(lSize) > SI_MAX_FILE_SIZE) {
|
||||
return SI_FILE;
|
||||
}
|
||||
|
||||
// allocate and ensure NULL terminated
|
||||
char * pData = new(std::nothrow) char[lSize+static_cast<size_t>(1)];
|
||||
char * pData = new(std::nothrow) char[static_cast<size_t>(lSize) + 1];
|
||||
if (!pData) {
|
||||
return SI_NOMEM;
|
||||
}
|
||||
@@ -1516,13 +1528,18 @@ CSimpleIniTempl<SI_CHAR,SI_STRLESS,SI_CONVERTER>::LoadData(
|
||||
return SI_FAIL;
|
||||
}
|
||||
|
||||
// check converted data size is within supported limits (SI_MAX_FILE_SIZE)
|
||||
if (uLen >= (SI_MAX_FILE_SIZE / sizeof(SI_CHAR))) {
|
||||
return SI_FILE;
|
||||
}
|
||||
|
||||
// allocate memory for the data, ensure that there is a NULL
|
||||
// terminator wherever the converted data ends
|
||||
SI_CHAR * pData = new(std::nothrow) SI_CHAR[uLen+1];
|
||||
SI_CHAR * pData = new(std::nothrow) SI_CHAR[uLen + 1];
|
||||
if (!pData) {
|
||||
return SI_NOMEM;
|
||||
}
|
||||
memset(pData, 0, sizeof(SI_CHAR)*(uLen+1));
|
||||
memset(pData, 0, sizeof(SI_CHAR) * (uLen + 1));
|
||||
|
||||
// convert the data
|
||||
if (!converter.ConvertFromStore(a_pData, a_uDataLen, pData, uLen)) {
|
||||
@@ -1800,6 +1817,7 @@ CSimpleIniTempl<SI_CHAR,SI_STRLESS,SI_CONVERTER>::IsMultiLineData(
|
||||
}
|
||||
|
||||
// embedded newlines
|
||||
const SI_CHAR * pStart = a_pData;
|
||||
while (*a_pData) {
|
||||
if (IsNewLineChar(*a_pData)) {
|
||||
return true;
|
||||
@@ -1807,8 +1825,8 @@ CSimpleIniTempl<SI_CHAR,SI_STRLESS,SI_CONVERTER>::IsMultiLineData(
|
||||
++a_pData;
|
||||
}
|
||||
|
||||
// check for suffix
|
||||
if (IsSpace(*--a_pData)) {
|
||||
// check for suffix (ensure we don't go before start of string)
|
||||
if (a_pData > pStart && IsSpace(*(a_pData - 1))) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1821,7 +1839,7 @@ CSimpleIniTempl<SI_CHAR, SI_STRLESS, SI_CONVERTER>::IsSingleLineQuotedValue(
|
||||
const SI_CHAR* a_pData
|
||||
) const
|
||||
{
|
||||
// data needs quoting if it starts or ends with whitespace
|
||||
// data needs quoting if it starts or ends with whitespace
|
||||
// and doesn't have embedded newlines
|
||||
|
||||
// empty string
|
||||
@@ -1835,6 +1853,7 @@ CSimpleIniTempl<SI_CHAR, SI_STRLESS, SI_CONVERTER>::IsSingleLineQuotedValue(
|
||||
}
|
||||
|
||||
// embedded newlines
|
||||
const SI_CHAR * pStart = a_pData;
|
||||
while (*a_pData) {
|
||||
if (IsNewLineChar(*a_pData)) {
|
||||
return false;
|
||||
@@ -1842,8 +1861,8 @@ CSimpleIniTempl<SI_CHAR, SI_STRLESS, SI_CONVERTER>::IsSingleLineQuotedValue(
|
||||
++a_pData;
|
||||
}
|
||||
|
||||
// check for suffix
|
||||
if (IsSpace(*--a_pData)) {
|
||||
// check for suffix (ensure we don't go before start of string)
|
||||
if (a_pData > pStart && IsSpace(*(a_pData - 1))) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -2088,7 +2107,8 @@ CSimpleIniTempl<SI_CHAR,SI_STRLESS,SI_CONVERTER>::AddEntry(
|
||||
if (pComment) {
|
||||
DeleteString(a_pComment);
|
||||
a_pComment = pComment;
|
||||
CopyString(a_pComment);
|
||||
rc = CopyString(a_pComment);
|
||||
if (rc < 0) return rc;
|
||||
}
|
||||
Delete(a_pSection, a_pKey);
|
||||
iKey = keyval.end();
|
||||
@@ -2257,12 +2277,13 @@ CSimpleIniTempl<SI_CHAR,SI_STRLESS,SI_CONVERTER>::GetDoubleValue(
|
||||
return a_nDefault;
|
||||
}
|
||||
|
||||
char * pszSuffix = NULL;
|
||||
char * pszSuffix = szValue;
|
||||
double nValue = strtod(szValue, &pszSuffix);
|
||||
|
||||
// any invalid strings will return the default value
|
||||
if (!pszSuffix || *pszSuffix) {
|
||||
return a_nDefault;
|
||||
// check if no conversion was performed or if there are trailing characters
|
||||
if (pszSuffix == szValue || *pszSuffix) {
|
||||
return a_nDefault;
|
||||
}
|
||||
|
||||
return nValue;
|
||||
@@ -2421,7 +2442,7 @@ CSimpleIniTempl<SI_CHAR,SI_STRLESS,SI_CONVERTER>::GetSectionSize(
|
||||
int nCount = 0;
|
||||
const SI_CHAR * pLastKey = NULL;
|
||||
typename TKeyVal::const_iterator iKeyVal = section.begin();
|
||||
for (int n = 0; iKeyVal != section.end(); ++iKeyVal, ++n) {
|
||||
for (; iKeyVal != section.end(); ++iKeyVal) {
|
||||
if (!pLastKey || IsLess(pLastKey, iKeyVal->first.pItem)) {
|
||||
++nCount;
|
||||
pLastKey = iKeyVal->first.pItem;
|
||||
@@ -2464,7 +2485,7 @@ CSimpleIniTempl<SI_CHAR,SI_STRLESS,SI_CONVERTER>::GetAllSections(
|
||||
{
|
||||
a_names.clear();
|
||||
typename TSection::const_iterator i = m_data.begin();
|
||||
for (int n = 0; i != m_data.end(); ++i, ++n ) {
|
||||
for (; i != m_data.end(); ++i) {
|
||||
a_names.push_back(i->first);
|
||||
}
|
||||
}
|
||||
@@ -2490,7 +2511,7 @@ CSimpleIniTempl<SI_CHAR,SI_STRLESS,SI_CONVERTER>::GetAllKeys(
|
||||
const TKeyVal & section = iSection->second;
|
||||
const SI_CHAR * pLastKey = NULL;
|
||||
typename TKeyVal::const_iterator iKeyVal = section.begin();
|
||||
for (int n = 0; iKeyVal != section.end(); ++iKeyVal, ++n ) {
|
||||
for (; iKeyVal != section.end(); ++iKeyVal) {
|
||||
if (!pLastKey || IsLess(pLastKey, iKeyVal->first.pItem)) {
|
||||
a_names.push_back(iKeyVal->first);
|
||||
pLastKey = iKeyVal->first.pItem;
|
||||
@@ -2828,7 +2849,7 @@ CSimpleIniTempl<SI_CHAR,SI_STRLESS,SI_CONVERTER>::DeleteString(
|
||||
// strings may exist either inside the data block, or they will be
|
||||
// individually allocated and stored in m_strings. We only physically
|
||||
// delete those stored in m_strings.
|
||||
if (a_pString < m_pData || a_pString >= m_pData + m_uDataLen) {
|
||||
if (!m_pData || a_pString < m_pData || a_pString >= m_pData + m_uDataLen) {
|
||||
typename TNamesDepend::iterator i = m_strings.begin();
|
||||
for (;i != m_strings.end(); ++i) {
|
||||
if (a_pString == i->pItem) {
|
||||
@@ -2850,17 +2871,19 @@ CSimpleIniTempl<SI_CHAR,SI_STRLESS,SI_CONVERTER>::DeleteString(
|
||||
//
|
||||
// SI_NO_CONVERSION Do not make the "W" wide character version of the
|
||||
// library available. Only CSimpleIniA etc is defined.
|
||||
// Default on Linux/MacOS/etc.
|
||||
// SI_CONVERT_WIN32 Use the Win32 API functions for conversion.
|
||||
// Default on Windows.
|
||||
// SI_CONVERT_GENERIC Use the Unicode reference conversion library in
|
||||
// the accompanying files ConvertUTF.h/c
|
||||
// SI_CONVERT_ICU Use the IBM ICU conversion library. Requires
|
||||
// ICU headers on include path and icuuc.lib
|
||||
// SI_CONVERT_WIN32 Use the Win32 API functions for conversion.
|
||||
|
||||
#if !defined(SI_NO_CONVERSION) && !defined(SI_CONVERT_GENERIC) && !defined(SI_CONVERT_WIN32) && !defined(SI_CONVERT_ICU)
|
||||
# ifdef _WIN32
|
||||
# define SI_CONVERT_WIN32
|
||||
# else
|
||||
# define SI_CONVERT_GENERIC
|
||||
# define SI_NO_CONVERSION
|
||||
# endif
|
||||
#endif
|
||||
|
||||
@@ -3079,14 +3102,18 @@ public:
|
||||
return a_uInputDataLen;
|
||||
}
|
||||
|
||||
#if defined(SI_NO_MBSTOWCS_NULL) || (!defined(_MSC_VER) && !defined(_linux))
|
||||
// get the required buffer size
|
||||
#if defined(_MSC_VER)
|
||||
size_t uBufSiz;
|
||||
errno_t e = mbstowcs_s(&uBufSiz, NULL, 0, a_pInputData, a_uInputDataLen);
|
||||
return (e == 0) ? uBufSiz : (size_t) -1;
|
||||
#elif !defined(SI_NO_MBSTOWCS_NULL)
|
||||
return mbstowcs(NULL, a_pInputData, a_uInputDataLen);
|
||||
#else
|
||||
// fall back processing for platforms that don't support a NULL dest to mbstowcs
|
||||
// worst case scenario is 1:1, this will be a sufficient buffer size
|
||||
(void)a_pInputData;
|
||||
return a_uInputDataLen;
|
||||
#else
|
||||
// get the actual required buffer size
|
||||
return mbstowcs(NULL, a_pInputData, a_uInputDataLen);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -3135,9 +3162,18 @@ public:
|
||||
}
|
||||
|
||||
// convert to wchar_t
|
||||
#if defined(_MSC_VER)
|
||||
size_t uBufSiz;
|
||||
errno_t e = mbstowcs_s(&uBufSiz,
|
||||
a_pOutputData, a_uOutputDataSize,
|
||||
a_pInputData, a_uInputDataLen);
|
||||
(void)uBufSiz;
|
||||
return (e == 0);
|
||||
#else
|
||||
size_t retval = mbstowcs(a_pOutputData,
|
||||
a_pInputData, a_uOutputDataSize);
|
||||
return retval != (size_t)(-1);
|
||||
#endif
|
||||
}
|
||||
|
||||
/** Calculate the number of char required by the storage format of this
|
||||
|
||||
Vendored
+425
-386
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user