2013-11-25 00:06:56 -08:00
|
|
|
/* 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/. */
|
|
|
|
|
|
|
|
#include "nsReplacementToUnicode.h"
|
|
|
|
|
|
|
|
nsReplacementToUnicode::nsReplacementToUnicode()
|
|
|
|
: mSeenByte(false)
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
|
|
|
nsReplacementToUnicode::Convert(const char* aSrc,
|
|
|
|
int32_t* aSrcLength,
|
2014-01-04 07:02:17 -08:00
|
|
|
char16_t* aDest,
|
2013-11-25 00:06:56 -08:00
|
|
|
int32_t* aDestLength)
|
|
|
|
{
|
|
|
|
if (mSeenByte || !(*aSrcLength)) {
|
|
|
|
*aDestLength = 0;
|
|
|
|
return NS_PARTIAL_MORE_INPUT;
|
|
|
|
}
|
|
|
|
if (mErrBehavior == kOnError_Signal) {
|
|
|
|
mSeenByte = true;
|
|
|
|
*aSrcLength = 0;
|
|
|
|
*aDestLength = 0;
|
|
|
|
return NS_ERROR_ILLEGAL_INPUT;
|
|
|
|
}
|
|
|
|
if (!(*aDestLength)) {
|
|
|
|
*aSrcLength = -1;
|
|
|
|
return NS_PARTIAL_MORE_OUTPUT;
|
|
|
|
}
|
|
|
|
mSeenByte = true;
|
|
|
|
*aDest = 0xFFFD;
|
|
|
|
*aDestLength = 1;
|
|
|
|
return NS_PARTIAL_MORE_INPUT;
|
|
|
|
}
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
|
|
|
nsReplacementToUnicode::GetMaxLength(const char* aSrc,
|
|
|
|
int32_t aSrcLength,
|
|
|
|
int32_t* aDestLength)
|
|
|
|
{
|
|
|
|
if (!mSeenByte && aSrcLength > 0) {
|
|
|
|
*aDestLength = 1;
|
|
|
|
} else {
|
|
|
|
*aDestLength = 0;
|
|
|
|
}
|
|
|
|
return NS_EXACT_LENGTH;
|
|
|
|
}
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
|
|
|
nsReplacementToUnicode::Reset()
|
|
|
|
{
|
|
|
|
mSeenByte = false;
|
|
|
|
return NS_OK;
|
|
|
|
}
|