diff -r 000000000000 -r bde4ae8d615e os/ossrv/genericopenlibs/openenvcore/libc/src/mbrtowc.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/os/ossrv/genericopenlibs/openenvcore/libc/src/mbrtowc.cpp	Fri Jun 15 03:10:57 2012 +0200
@@ -0,0 +1,108 @@
+// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Name        : mbrtowc.cpp
+// Part of     : MRT LIBC
+// Contains the source for the mbrtowc API implementation.
+// Version     :
+//
+
+
+
+#include <e32std.h>
+#include <utf.h>
+#include <stdlib.h>
+#include <string.h>
+#include <wchar.h>
+#include <stdio.h>
+#include "wcharcnv.h"
+
+#if (defined(__SYMBIAN32__) && (defined(__WINSCW__) || defined(__WINS__)))
+#include "libc_wsd_defs.h"
+#endif 
+
+#ifdef EMULATOR
+
+GET_STATIC_VAR_FROM_TLS(mbrtowc_mbs, mbstate_t)
+#define mbs (*GET_WSD_VAR_NAME(mbrtowc_mbs, s)())
+#endif //EMULATOR
+
+extern "C" {
+
+//-----------------------------------------------------------------------------
+//Function Name : size_t mbrtowc(wchar_t *pwc, const char *s, size_t n, 
+//				mbstate_t *ps) 
+//Description   :inspects at most  n  bytes  of the  multibyte  string starting
+//at s, extracts the next complete multi-byte character, converts it to a wide
+//character and stores it at  *pwc.It  updates the shift state *ps.
+//Return Value  : returns the number of bytes parsed from the multi-byte 
+//sequence starting at s, if a non-L'\0' wide character  was  recognized. It 
+//returns 0, if a Lâ\0â wide character was recognized. It returns (size_t)(-1)
+//and sets errno to EILSEQ, if an invalid  multibyte sequence  was encountered.
+//It returns (size_t)(-2) if it couldn't parse a complete multibyte character, 
+//meaning that n should be increased.
+//-----------------------------------------------------------------------------
+EXPORT_C size_t mbrtowc(wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)
+{
+	int rval = 0;
+#ifndef EMULATOR	
+	static mbstate_t mbs;
+#endif //EMULATOR	
+
+	if (ps == NULL)
+		ps = &mbs;
+	
+	if (s)
+	{
+		wchar_t wide;
+
+		//number of chars to convert has a max of MB_CUR_MAX
+		TInt maxlen = (n > MB_CUR_MAX ? MB_CUR_MAX : n);
+		
+		TPtrC8 src((const TUint8*)s, maxlen);
+		//length of 1 as we only want 1 wide character
+		TPtr16 awc((TUint16*)&wide, 1);		
+
+		TInt ret = ConvertToUnicodeFromUtf8(awc, src, ps);
+	
+		//return the number of chars converted which is the max number 
+		//- the number not converted unless the character converted 
+		//was the wide null character
+		if (ret >= 0)
+		{
+			//rval = (L'\0' != wide) ? maxlen - ret : 0;
+			if(L'\0' == wide)
+			{
+				rval = 0;
+			}
+			else
+			{
+				rval = ret;
+			}
+
+			if (pwc)
+		    	{
+			    	//only assign the return if we have a target
+				*pwc = wide;	
+			}
+		}
+		else
+		{
+			rval = ret;
+		}
+	}
+	return (size_t)(rval);
+
+} //end of function
+
+} //extern "C"