diff options
Diffstat (limited to 'glib/src/convert.ccg')
-rw-r--r-- | glib/src/convert.ccg | 210 |
1 files changed, 157 insertions, 53 deletions
diff --git a/glib/src/convert.ccg b/glib/src/convert.ccg index b888e8d5..9a4dae14 100644 --- a/glib/src/convert.ccg +++ b/glib/src/convert.ccg @@ -35,17 +35,19 @@ IConv::IConv(const std::string& to_codeset, const std::string& from_codeset) { if(gobject_ == reinterpret_cast<GIConv>(-1)) { - GError* error = 0; + GError* gerror = 0; // Abuse g_convert() to create a GError object. This may seem a weird // thing to do, but it gives us consistently translated error messages // at no further cost. - g_convert("", 0, to_codeset.c_str(), from_codeset.c_str(), 0, 0, &error); + g_convert("", 0, to_codeset.c_str(), from_codeset.c_str(), 0, 0, &gerror); // If this should ever fail we're fucked. - g_assert(error != 0); + g_assert(gerror != 0); - Error::throw_exception(error); + #ifdef GLIBMM_EXCEPTIONS_ENABLED + if(gerror) ::Glib::Error::throw_exception(gerror); + #endif //GLIBMM_EXCEPTIONS_ENABLED } } @@ -77,16 +79,23 @@ void IConv::reset() g_iconv(gobject_, 0, &inbytes_left, &outbuf, &outbytes_left); } +#ifdef GLIBMM_EXCEPTIONS_ENABLED std::string IConv::convert(const std::string& str) +#else +std::string IConv::convert(const std::string& str, std::auto_ptr<Glib::Error>& error) +#endif //GLIBMM_EXCEPTIONS_ENABLED { gsize bytes_written = 0; - GError* error = 0; + GError* gerror = 0; char *const buf = g_convert_with_iconv( - str.data(), str.size(), gobject_, 0, &bytes_written, &error); + str.data(), str.size(), gobject_, 0, &bytes_written, &gerror); - if(error) - Error::throw_exception(error); + #ifdef GLIBMM_EXCEPTIONS_ENABLED + if(gerror) ::Glib::Error::throw_exception(gerror); + #else + error = ::Glib::Error::throw_exception(gerror); + #endif //GLIBMM_EXCEPTIONS_ENABLED return std::string(ScopedPtr<char>(buf).get(), bytes_written); } @@ -108,125 +117,196 @@ bool get_charset(std::string& charset) return is_utf8; } + +#ifdef GLIBMM_EXCEPTIONS_ENABLED std::string convert(const std::string& str, const std::string& to_codeset, const std::string& from_codeset) +#else +std::string convert(const std::string& str, + const std::string& to_codeset, + const std::string& from_codeset, std::auto_ptr<Glib::Error>& error) +#endif //GLIBMM_EXCEPTIONS_ENABLED { gsize bytes_written = 0; - GError* error = 0; + GError* gerror = 0; char *const buf = g_convert( str.data(), str.size(), to_codeset.c_str(), from_codeset.c_str(), - 0, &bytes_written, &error); + 0, &bytes_written, &gerror); - if(error) - Error::throw_exception(error); + #ifdef GLIBMM_EXCEPTIONS_ENABLED + if(gerror) ::Glib::Error::throw_exception(gerror); + #else + error = ::Glib::Error::throw_exception(gerror); + #endif //GLIBMM_EXCEPTIONS_ENABLED return std::string(ScopedPtr<char>(buf).get(), bytes_written); } + +#ifdef GLIBMM_EXCEPTIONS_ENABLED std::string convert_with_fallback(const std::string& str, const std::string& to_codeset, const std::string& from_codeset) +#else +std::string convert_with_fallback(const std::string& str, + const std::string& to_codeset, + const std::string& from_codeset, std::auto_ptr<Glib::Error>& error) +#endif //GLIBMM_EXCEPTIONS_ENABLED { gsize bytes_written = 0; - GError* error = 0; + GError* gerror = 0; char *const buf = g_convert_with_fallback( str.data(), str.size(), to_codeset.c_str(), from_codeset.c_str(), 0, - 0, &bytes_written, &error); + 0, &bytes_written, &gerror); - if(error) - Error::throw_exception(error); + #ifdef GLIBMM_EXCEPTIONS_ENABLED + if(gerror) ::Glib::Error::throw_exception(gerror); + #else + error = ::Glib::Error::throw_exception(gerror); + #endif //GLIBMM_EXCEPTIONS_ENABLED return std::string(ScopedPtr<char>(buf).get(), bytes_written); } + +#ifdef GLIBMM_EXCEPTIONS_ENABLED std::string convert_with_fallback(const std::string& str, const std::string& to_codeset, const std::string& from_codeset, const Glib::ustring& fallback) +#else +std::string convert_with_fallback(const std::string& str, + const std::string& to_codeset, + const std::string& from_codeset, + const Glib::ustring& fallback, std::auto_ptr<Glib::Error>& error) +#endif //GLIBMM_EXCEPTIONS_ENABLED { gsize bytes_written = 0; - GError* error = 0; + GError* gerror = 0; char *const buf = g_convert_with_fallback( str.data(), str.size(), to_codeset.c_str(), from_codeset.c_str(), - const_cast<char*>(fallback.c_str()), 0, &bytes_written, &error); + const_cast<char*>(fallback.c_str()), 0, &bytes_written, &gerror); - if(error) - Error::throw_exception(error); + #ifdef GLIBMM_EXCEPTIONS_ENABLED + if(gerror) ::Glib::Error::throw_exception(gerror); + #else + error = ::Glib::Error::throw_exception(gerror); + #endif //GLIBMM_EXCEPTIONS_ENABLED return std::string(ScopedPtr<char>(buf).get(), bytes_written); } + +#ifdef GLIBMM_EXCEPTIONS_ENABLED Glib::ustring locale_to_utf8(const std::string& opsys_string) +#else +Glib::ustring locale_to_utf8(const std::string& opsys_string, std::auto_ptr<Glib::Error>& error) +#endif //GLIBMM_EXCEPTIONS_ENABLED { gsize bytes_written = 0; - GError* error = 0; + GError* gerror = 0; char *const buf = g_locale_to_utf8( - opsys_string.data(), opsys_string.size(), 0, &bytes_written, &error); + opsys_string.data(), opsys_string.size(), 0, &bytes_written, &gerror); - if(error) - Error::throw_exception(error); + #ifdef GLIBMM_EXCEPTIONS_ENABLED + if(gerror) ::Glib::Error::throw_exception(gerror); + #else + error = ::Glib::Error::throw_exception(gerror); + #endif //GLIBMM_EXCEPTIONS_ENABLED const ScopedPtr<char> scoped_buf (buf); return Glib::ustring(scoped_buf.get(), scoped_buf.get() + bytes_written); } + +#ifdef GLIBMM_EXCEPTIONS_ENABLED std::string locale_from_utf8(const Glib::ustring& utf8_string) +#else +std::string locale_from_utf8(const Glib::ustring& utf8_string, std::auto_ptr<Glib::Error>& error) +#endif //GLIBMM_EXCEPTIONS_ENABLED { gsize bytes_written = 0; - GError* error = 0; + GError* gerror = 0; char *const buf = g_locale_from_utf8( - utf8_string.data(), utf8_string.bytes(), 0, &bytes_written, &error); + utf8_string.data(), utf8_string.bytes(), 0, &bytes_written, &gerror); - if(error) - Error::throw_exception(error); + #ifdef GLIBMM_EXCEPTIONS_ENABLED + if(gerror) ::Glib::Error::throw_exception(gerror); + #else + error = ::Glib::Error::throw_exception(gerror); + #endif //GLIBMM_EXCEPTIONS_ENABLED return std::string(ScopedPtr<char>(buf).get(), bytes_written); } + +#ifdef GLIBMM_EXCEPTIONS_ENABLED Glib::ustring filename_to_utf8(const std::string& opsys_string) +#else +Glib::ustring filename_to_utf8(const std::string& opsys_string, std::auto_ptr<Glib::Error>& error) +#endif //GLIBMM_EXCEPTIONS_ENABLED { gsize bytes_written = 0; - GError* error = 0; + GError* gerror = 0; char *const buf = g_filename_to_utf8( - opsys_string.data(), opsys_string.size(), 0, &bytes_written, &error); + opsys_string.data(), opsys_string.size(), 0, &bytes_written, &gerror); - if(error) - Error::throw_exception(error); + #ifdef GLIBMM_EXCEPTIONS_ENABLED + if(gerror) ::Glib::Error::throw_exception(gerror); + #else + error = ::Glib::Error::throw_exception(gerror); + #endif //GLIBMM_EXCEPTIONS_ENABLED const ScopedPtr<char> scoped_buf (buf); return Glib::ustring(scoped_buf.get(), scoped_buf.get() + bytes_written); } + +#ifdef GLIBMM_EXCEPTIONS_ENABLED std::string filename_from_utf8(const Glib::ustring& utf8_string) +#else +std::string filename_from_utf8(const Glib::ustring& utf8_string, std::auto_ptr<Glib::Error>& error) +#endif //GLIBMM_EXCEPTIONS_ENABLED { gsize bytes_written = 0; - GError* error = 0; + GError* gerror = 0; char *const buf = g_filename_from_utf8( - utf8_string.data(), utf8_string.bytes(), 0, &bytes_written, &error); + utf8_string.data(), utf8_string.bytes(), 0, &bytes_written, &gerror); - if(error) - Error::throw_exception(error); + #ifdef GLIBMM_EXCEPTIONS_ENABLED + if(gerror) ::Glib::Error::throw_exception(gerror); + #else + error = ::Glib::Error::throw_exception(gerror); + #endif //GLIBMM_EXCEPTIONS_ENABLED return std::string(ScopedPtr<char>(buf).get(), bytes_written); } + +#ifdef GLIBMM_EXCEPTIONS_ENABLED std::string filename_from_uri(const Glib::ustring& uri, Glib::ustring& hostname) +#else +std::string filename_from_uri(const Glib::ustring& uri, Glib::ustring& hostname, std::auto_ptr<Glib::Error>& error) +#endif //GLIBMM_EXCEPTIONS_ENABLED { char* hostname_buf = 0; - GError* error = 0; + GError* gerror = 0; - char *const buf = g_filename_from_uri(uri.c_str(), &hostname_buf, &error); + char *const buf = g_filename_from_uri(uri.c_str(), &hostname_buf, &gerror); - if(error) - Error::throw_exception(error); + #ifdef GLIBMM_EXCEPTIONS_ENABLED + if(gerror) ::Glib::Error::throw_exception(gerror); + #else + error = ::Glib::Error::throw_exception(gerror); + #endif //GLIBMM_EXCEPTIONS_ENABLED // Let's take ownership at this point. const ScopedPtr<char> scoped_buf (buf); @@ -239,35 +319,59 @@ std::string filename_from_uri(const Glib::ustring& uri, Glib::ustring& hostname) return std::string(scoped_buf.get()); } + +#ifdef GLIBMM_EXCEPTIONS_ENABLED std::string filename_from_uri(const Glib::ustring& uri) +#else +std::string filename_from_uri(const Glib::ustring& uri, std::auto_ptr<Glib::Error>& error) +#endif //GLIBMM_EXCEPTIONS_ENABLED { - GError* error = 0; - char *const buf = g_filename_from_uri(uri.c_str(), 0, &error); + GError* gerror = 0; + char *const buf = g_filename_from_uri(uri.c_str(), 0, &gerror); - if(error) - Error::throw_exception(error); + #ifdef GLIBMM_EXCEPTIONS_ENABLED + if(gerror) ::Glib::Error::throw_exception(gerror); + #else + error = ::Glib::Error::throw_exception(gerror); + #endif //GLIBMM_EXCEPTIONS_ENABLED return std::string(ScopedPtr<char>(buf).get()); } + +#ifdef GLIBMM_EXCEPTIONS_ENABLED Glib::ustring filename_to_uri(const std::string& filename, const Glib::ustring& hostname) +#else +Glib::ustring filename_to_uri(const std::string& filename, const Glib::ustring& hostname, std::auto_ptr<Glib::Error>& error) +#endif //GLIBMM_EXCEPTIONS_ENABLED { - GError* error = 0; - char *const buf = g_filename_to_uri(filename.c_str(), hostname.c_str(), &error); + GError* gerror = 0; + char *const buf = g_filename_to_uri(filename.c_str(), hostname.c_str(), &gerror); - if(error) - Error::throw_exception(error); + #ifdef GLIBMM_EXCEPTIONS_ENABLED + if(gerror) ::Glib::Error::throw_exception(gerror); + #else + error = ::Glib::Error::throw_exception(gerror); + #endif //GLIBMM_EXCEPTIONS_ENABLED return Glib::ustring(ScopedPtr<char>(buf).get()); } + +#ifdef GLIBMM_EXCEPTIONS_ENABLED Glib::ustring filename_to_uri(const std::string& filename) +#else +Glib::ustring filename_to_uri(const std::string& filename, std::auto_ptr<Glib::Error>& error) +#endif //GLIBMM_EXCEPTIONS_ENABLED { - GError* error = 0; - char *const buf = g_filename_to_uri(filename.c_str(), 0, &error); - - if(error) - Error::throw_exception(error); + GError* gerror = 0; + char *const buf = g_filename_to_uri(filename.c_str(), 0, &gerror); + + #ifdef GLIBMM_EXCEPTIONS_ENABLED + if(gerror) ::Glib::Error::throw_exception(gerror); + #else + error = ::Glib::Error::throw_exception(gerror); + #endif //GLIBMM_EXCEPTIONS_ENABLED return Glib::ustring(ScopedPtr<char>(buf).get()); } |