Get rid of FX_LPCSTR cast.
[pdfium.git] / core / include / fxcrt / fx_string.h
index 26b04b7..91032f9 100644 (file)
@@ -184,6 +184,13 @@ public:
 
     static CFX_ByteString      FromUnicode(const CFX_WideString& str);
 
+    // Explicit conversion to raw string
+    FX_LPCSTR c_str() const
+    {
+        return m_pData ? m_pData->m_String : "";
+    }
+
+    // Implicit conversion to C-style string -- deprecated
     operator                           FX_LPCSTR() const
     {
         return m_pData ? m_pData->m_String : "";
@@ -597,7 +604,7 @@ private:
     }
 };
 typedef const CFX_WideStringC& FX_WSTR;
-#define FX_WSTRC(wstr) CFX_WideStringC((FX_LPCWSTR)wstr, sizeof(wstr) / sizeof(FX_WCHAR) - 1)
+#define FX_WSTRC(wstr) CFX_WideStringC(wstr, FX_ArraySize(wstr) - 1)
 struct CFX_StringDataW {
 
     long               m_nRefs;
@@ -640,9 +647,16 @@ public:
 
     static FX_STRSIZE       WStringLength(const unsigned short* str);
 
+    // Explicit conversion to raw string
+    FX_LPCWSTR c_str() const
+    {
+        return m_pData ? m_pData->m_String : L"";
+    }
+
+    // Implicit conversion to C-style wide string -- deprecated
     operator FX_LPCWSTR() const
     {
-        return m_pData ? m_pData->m_String : (FX_WCHAR*)L"";
+        return m_pData ? m_pData->m_String : L"";
     }
 
     void                                       Empty();
@@ -762,12 +776,12 @@ protected:
 };
 inline CFX_WideStringC::CFX_WideStringC(const CFX_WideString& src)
 {
-    m_Ptr = (FX_LPCWSTR)src;
+    m_Ptr = src.c_str();
     m_Length = src.GetLength();
 }
 inline CFX_WideStringC& CFX_WideStringC::operator = (const CFX_WideString& src)
 {
-    m_Ptr = (FX_LPCWSTR)src;
+    m_Ptr = src.c_str();
     m_Length = src.GetLength();
     return *this;
 }
@@ -841,6 +855,6 @@ inline CFX_ByteString       FX_UTF8Encode(FX_WSTR wsStr)
 }
 inline CFX_ByteString  FX_UTF8Encode(const CFX_WideString &wsStr)
 {
-    return FX_UTF8Encode((FX_LPCWSTR)wsStr, wsStr.GetLength());
+    return FX_UTF8Encode(wsStr.c_str(), wsStr.GetLength());
 }
 #endif