#if NET_4_0

#include "il2cpp-config.h"
#include "SafeStringMarshal.h"
#include "utils/StringUtils.h"
#include "utils/Memory.h"

namespace il2cpp
{
namespace icalls
{
namespace mscorlib
{
namespace Mono
{
    intptr_t SafeStringMarshal::StringToUtf8(Il2CppString* str)
    {
        std::string strobj = il2cpp::utils::StringUtils::Utf16ToUtf8(str->chars, str->length);
        char* cstr = il2cpp::utils::StringUtils::StringDuplicate(strobj.c_str());
        return reinterpret_cast<intptr_t>(cstr);
    }

    void SafeStringMarshal::GFree(intptr_t ptr)
    {
        IL2CPP_FREE((char*)ptr);
    }
} // namespace Mono
} // namespace mscorlib
} // namespace icalls
} // namespace il2cpp

#endif
