size_t 
RESTRepDataItem::addData( unsigned long offset, const char *buffer, size_t length )
{
    // Check if the offset is going to cause problems

    // Check if this is a file or in memory buffer.
    if( type == REST_RDI_TYPE_ENCODED_FILE )
    {
        // Add the contents to the temporary file
        return appendDataToFile( buffer, length );
    }

    // Add content to in memory buffer.
    return appendDataToBuffer( buffer, length );
}
Exemplo n.º 2
0
	void WinCodepageConverter::_unicodeToBuffer<1>(ByteBuffer& _destBuffer, ConstStringHolder<1> _srcString)
	{
		// An empty string needs special processing.
		if(_srcString.empty())
			return;

		const uint8* data;
		size_t sz;
		ByteBuffer  buf;

		switch(getCodepage())
		{
			case CP_UTF8:
			{
				// UTF-8 -> UTF-8
				data = _srcString.c_str();
				sz = _srcString.size();
				break;
			}
			case CP_UTF16LE:
			{
				// UTF-8 -> UTF-16LE
				utf8_to_utf16le(buf, _srcString.c_str(), _srcString.size());
				data = buf.data();
				sz = buf.size();
				break;
			}
			case CP_UTF16BE:
			{
				// UTF-8 -> UTF-16BE
				utf8_to_utf16be(buf, _srcString.c_str(), _srcString.size());
				data = buf.data();
				sz = buf.size();
				break;
			}
			case CP_UTF32LE:
			{
				// UTF-8 -> UTF-32LE
				utf8_to_utf32le(buf, _srcString.c_str(), _srcString.size());
				data = buf.data();
				sz = buf.size();
				break;
			}
			case CP_UTF32BE:
			{
				// UTF-8 -> UTF-32BE
				utf8_to_utf32be(buf, _srcString.c_str(), _srcString.size());
				data = buf.data();
				sz = buf.size();
				break;
			}
			default:
			{
				// UTF-8 -> UTF-16
				Utf16Buffer buf16;
				utf8_to_utf16(buf16, _srcString.c_str(), _srcString.size());					
				
				// UTF-16 -> destination code page
				size_t maxsz = (buf16.size() + 10) * 4;
				buf.resize(maxsz);
				
				BOOL usedDefaultChar;
				int r = WideCharToMultiByte(getCodepage(), 0, 
					char_cast<LPWSTR>(buf16.data()), buf16.size(), 
					char_cast<LPSTR>(buf.data()), buf.size(), 0, &usedDefaultChar);
				
				sz = r;
				data = buf.data();

				if(r == 0 || usedDefaultChar)
					UnicodeSupport::_throwCouldNotConvert(getName(), "UTF-16", buf16.data(), buf16.size() * 2);
			}
		}
		appendDataToBuffer(_destBuffer, data, sz);
	}