/* void convertToByteArray(in AString aString, [optional] out unsigned long aLen, [array, size_is(aLen),retval] out octet aData); */ NS_IMETHODIMP nsScriptableUnicodeConverter::ConvertToByteArray(const nsAString& aString, PRUint32* aLen, PRUint8** _aData) { char* data; PRInt32 len; nsresult rv = ConvertFromUnicodeWithLength(aString, &len, &data); if (NS_FAILED(rv)) return rv; nsXPIDLCString str; str.Adopt(data, len); // NOTE: This uses the XPIDLCString as a byte array rv = FinishWithLength(&data, &len); if (NS_FAILED(rv)) return rv; str.Append(data, len); nsMemory::Free(data); // NOTE: this being a byte array, it needs no null termination *_aData = reinterpret_cast<PRUint8*> (nsMemory::Clone(str.get(), str.Length())); if (!*_aData) return NS_ERROR_OUT_OF_MEMORY; *aLen = str.Length(); return NS_OK; }
/* void convertToByteArray(in AString aString, [optional] out unsigned long aLen, [array, size_is(aLen),retval] out octet aData); */ NS_IMETHODIMP nsScriptableUnicodeConverter::ConvertToByteArray(const nsAString& aString, uint32_t* aLen, uint8_t** _aData) { char* data; int32_t len; nsresult rv = ConvertFromUnicodeWithLength(aString, &len, &data); if (NS_FAILED(rv)) return rv; nsXPIDLCString str; str.Adopt(data, len); // NOTE: This uses the XPIDLCString as a byte array rv = FinishWithLength(&data, &len); if (NS_FAILED(rv)) return rv; str.Append(data, len); moz_free(data); // NOTE: this being a byte array, it needs no null termination *_aData = reinterpret_cast<uint8_t*>(moz_malloc(str.Length())); if (!*_aData) return NS_ERROR_OUT_OF_MEMORY; memcpy(*_aData, str.get(), str.Length()); *aLen = str.Length(); return NS_OK; }
/* ACString ConvertFromUnicode (in AString src); */ NS_IMETHODIMP nsScriptableUnicodeConverter::ConvertFromUnicode(const nsAString& aSrc, nsACString& _retval) { int32_t len; char* str; nsresult rv = ConvertFromUnicodeWithLength(aSrc, &len, &str); if (NS_SUCCEEDED(rv)) { // No Adopt on nsACString :( _retval.Assign(str, len); moz_free(str); } return rv; }
/* ACString ConvertFromUnicode (in AString src); */ NS_IMETHODIMP nsScriptableUnicodeConverter::ConvertFromUnicode(const nsAString& aSrc, nsACString& _retval) { int32_t len; char* str; nsresult rv = ConvertFromUnicodeWithLength(aSrc, &len, &str); if (NS_SUCCEEDED(rv)) { // No Adopt on nsACString :( if (!_retval.Assign(str, len, mozilla::fallible_t())) { rv = NS_ERROR_OUT_OF_MEMORY; } moz_free(str); } return rv; }