#include "nsIPlatformCharset.h"
      
static NS_DEFINE_CID(kPlatformCharsetCID, NS_PLATFORMCHARSET_CID);

extern "C" gchar *
mozilla_unicode_to_locale (const PRUnichar *uniStr)
{
	PRInt32 sSize,dSize;
	gchar *output;
	nsAutoString platformCharset;
	nsresult rv;

	/* sanity */
	if (uniStr == NULL)
	{
		return NULL;
	}

	nsCOMPtr<nsIPlatformCharset> platformCharsetService
	    = do_GetService(NS_PLATFORMCHARSET_CONTRACTID, &rv);
	if (! NS_SUCCEEDED(rv))
	{
		return NULL;
	}

	rv = platformCharsetService->GetCharset(kPlatformCharsetSel_Menu,
						platformCharset);
	nsCOMPtr<nsICharsetConverterManager> ccm =
	    do_GetService (NS_CHARSETCONVERTERMANAGER_CONTRACTID, &rv);
	if (! NS_SUCCEEDED(rv))
	{
		return NULL;
	}

	nsCOMPtr<nsIUnicodeEncoder> encoder;
	rv = ccm->GetUnicodeEncoder(&platformCharset, getter_AddRefs(encoder));
	if (! NS_SUCCEEDED(rv))
	{
		return NULL;
	}

	const nsString str (uniStr);
	sSize = str.Length ();
	encoder->GetMaxLength (str.get(), sSize, &dSize);
	if (! dSize)
	{
		return NULL;
	} 

	output = g_new0 (gchar, dSize + 1);
	encoder->Convert (str.get(), &sSize, output, &dSize);
	encoder->Finish (output, &dSize);
	return output;
}
