From 197380a09fb9b151f227edee850e251f28053309 Mon Sep 17 00:00:00 2001 From: =?utf8?q?V=C3=A1clav=20Slav=C3=ADk?= Date: Mon, 30 Mar 2009 18:28:42 +0000 Subject: [PATCH] always return (owned or non-owned, depending on build) wxScopedCharBuffer from utf8_str() and ToUTF8() git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@59945 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- docs/doxygen/overviews/unicode.h | 14 ++++---------- include/wx/buffer.h | 7 ------- include/wx/ipcbase.h | 6 +++--- include/wx/string.h | 6 ++++-- interface/wx/string.h | 14 ++------------ samples/sockets/client.cpp | 2 +- src/common/sckaddr.cpp | 4 ++-- src/gtk/print.cpp | 4 ++-- 8 files changed, 18 insertions(+), 39 deletions(-) diff --git a/docs/doxygen/overviews/unicode.h b/docs/doxygen/overviews/unicode.h index be0d550b9b..a84dc50aa1 100644 --- a/docs/doxygen/overviews/unicode.h +++ b/docs/doxygen/overviews/unicode.h @@ -372,19 +372,13 @@ const char *p = s.ToUTF8(); puts(p); // or call any other function taking const char * @endcode does @b not work because the temporary buffer returned by wxString::ToUTF8() is -destroyed and @c p is left pointing nowhere. To correct this you may use +destroyed and @c p is left pointing nowhere. To correct this you should use @code -wxCharBuffer p(s.ToUTF8()); +const wxScopedCharBuffer p(s.ToUTF8()); puts(p); @endcode -which does work but results in an unnecessary copy of string data in the build -configurations when wxString::ToUTF8() returns the pointer to internal string buffer. -If this inefficiency is important you may write -@code -const wxUTF8Buf p(s.ToUTF8()); -puts(p); -@endcode -where @c wxUTF8Buf is the type corresponding to the real return type of wxString::ToUTF8(). +which does work. + Similarly, wxWX2WCbuf can be used for the return type of wxString::wc_str(). But, once again, none of these cryptic types is really needed if you just pass the return value of any of the functions mentioned in this section to another diff --git a/include/wx/buffer.h b/include/wx/buffer.h index f3c4e34f43..9dc9339829 100644 --- a/include/wx/buffer.h +++ b/include/wx/buffer.h @@ -427,13 +427,6 @@ typedef wxWritableCharTypeBuffer wxWritableWCharBuffer; #define wxWX2WCbuf wxWCharBuffer #endif // Unicode/ANSI -// type of the value returned by wxString::utf8_str() -#if wxUSE_UNICODE_UTF8 - #define wxUTF8Buf char * -#else - #define wxUTF8Buf wxCharBuffer -#endif - // ---------------------------------------------------------------------------- // A class for holding growable data buffers (not necessarily strings) // ---------------------------------------------------------------------------- diff --git a/include/wx/ipcbase.h b/include/wx/ipcbase.h index 7619671f10..3918547141 100644 --- a/include/wx/ipcbase.h +++ b/include/wx/ipcbase.h @@ -72,7 +72,7 @@ public: : size, wxIPC_UNICODETEXT); } bool Execute(const wxString& s) { - const wxUTF8Buf buf = s.utf8_str(); + const wxScopedCharBuffer buf = s.utf8_str(); return DoExecute(buf, strlen(buf) + 1, wxIPC_UTF8TEXT); } bool Execute(const wxCStrData& cs) @@ -94,7 +94,7 @@ public: : size, wxIPC_UNICODETEXT); } bool Poke(const wxString& item, const wxString s) { - const wxUTF8Buf buf = s.utf8_str(); + const wxScopedCharBuffer buf = s.utf8_str(); return DoPoke(item, buf, strlen(buf) + 1, wxIPC_UTF8TEXT); } bool Poke(const wxString& item, const wxCStrData& cs) @@ -116,7 +116,7 @@ public: : size, wxIPC_UNICODETEXT); } bool Advise(const wxString& item, const wxString s) { - const wxUTF8Buf buf = s.utf8_str(); + const wxScopedCharBuffer buf = s.utf8_str(); return DoAdvise(item, buf, strlen(buf) + 1, wxIPC_UTF8TEXT); } bool Advise(const wxString& item, const wxCStrData& cs) diff --git a/include/wx/string.h b/include/wx/string.h index 2ebce25363..5b29a2546d 100644 --- a/include/wx/string.h +++ b/include/wx/string.h @@ -1710,8 +1710,10 @@ public: return FromImpl(wxStringImpl(utf8, len)); } - const char* utf8_str() const { return wx_str(); } - const char* ToUTF8() const { return wx_str(); } + const wxScopedCharBuffer utf8_str() const + { return wxCharBuffer::CreateNonOwned(wx_str()); } + const wxScopedCharBuffer ToUTF8() const + { return wxCharBuffer::CreateNonOwned(wx_str()); } // this function exists in UTF-8 build only and returns the length of the // internal UTF-8 representation diff --git a/interface/wx/string.h b/interface/wx/string.h index 3056895ba7..1c43722bea 100644 --- a/interface/wx/string.h +++ b/interface/wx/string.h @@ -420,12 +420,7 @@ public: @see wc_str(), c_str(), mb_str() */ - const char* utf8_str() const; - - /** - @overload - */ - const wxCharBuffer utf8_str() const; + const wxScopedCharBuffer utf8_str() const; /** Converts the strings contents to the wide character represention @@ -497,12 +492,7 @@ public: /** Same as utf8_str(). */ - const char* ToUTF8() const; - - /** - @overload - */ - const wxCharBuffer ToUTF8() const; + const wxScopedCharBuffer ToUTF8() const; //@} diff --git a/samples/sockets/client.cpp b/samples/sockets/client.cpp index a50cf54286..d078e89428 100644 --- a/samples/sockets/client.cpp +++ b/samples/sockets/client.cpp @@ -479,7 +479,7 @@ void MyFrame::OnTest2(wxCommandEvent& WXUNUSED(event)) _("Test 2 ..."), _("Yes I like wxWidgets!")); - const wxUTF8Buf msg1(s.utf8_str()); + const wxScopedCharBuffer msg1(s.utf8_str()); size_t len = wxStrlen(msg1) + 1; wxCharBuffer msg2(wxStrlen(msg1)); diff --git a/src/common/sckaddr.cpp b/src/common/sckaddr.cpp index b706132e5c..9e21624fed 100644 --- a/src/common/sckaddr.cpp +++ b/src/common/sckaddr.cpp @@ -508,7 +508,7 @@ bool wxSockAddressImpl::SetHostName4(const wxString& name) if ( !addr ) return false; - const wxUTF8Buf namebuf(name.utf8_str()); + const wxScopedCharBuffer namebuf(name.utf8_str()); // first check if this is an address in quad dotted notation #if defined(HAVE_INET_ATON) @@ -695,7 +695,7 @@ bool wxSockAddressImpl::SetPath(const wxString& path) if ( !addr ) return false; - const wxUTF8Buf buf(path.utf8_str()); + const wxScopedCharBuffer buf(path.utf8_str()); if ( strlen(buf) >= UNIX_PATH_MAX ) return false; diff --git a/src/gtk/print.cpp b/src/gtk/print.cpp index 4c77554f19..563e214334 100644 --- a/src/gtk/print.cpp +++ b/src/gtk/print.cpp @@ -1700,7 +1700,7 @@ void wxGtkPrinterDCImpl::DoDrawRotatedText(const wxString& text, wxCoord x, wxCo bool underlined = m_font.Ok() && m_font.GetUnderlined(); - const wxUTF8Buf data = text.utf8_str(); + const wxScopedCharBuffer data = text.utf8_str(); size_t datalen = strlen(data); pango_layout_set_text( m_layout, data, datalen); @@ -2102,7 +2102,7 @@ void wxGtkPrinterDCImpl::DoGetTextExtent(const wxString& string, wxCoord *width, cairo_scale(m_cairo, m_scaleX, m_scaleY); // Set layout's text - const wxUTF8Buf dataUTF8 = string.utf8_str(); + const wxScopedCharBuffer dataUTF8 = string.utf8_str(); gint oldSize=0; if ( theFont ) -- 2.45.2