From 473753e9aa9144fefa6240895cc329bcb33f1079 Mon Sep 17 00:00:00 2001 From: jules Date: Thu, 5 Jun 2008 20:50:23 +0000 Subject: [PATCH] --- src/juce_core/text/juce_CharacterFunctions.cpp | 5 +++++ src/juce_core/text/juce_CharacterFunctions.h | 5 +++-- src/juce_core/text/juce_String.cpp | 13 ++++++++----- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/juce_core/text/juce_CharacterFunctions.cpp b/src/juce_core/text/juce_CharacterFunctions.cpp index 145344d19c..1e7d526859 100644 --- a/src/juce_core/text/juce_CharacterFunctions.cpp +++ b/src/juce_core/text/juce_CharacterFunctions.cpp @@ -94,6 +94,11 @@ void CharacterFunctions::copy (char* dest, const juce_wchar* src, const int maxC wcstombs (dest, src, maxChars); } +int CharacterFunctions::bytesRequiredForCopy (const juce_wchar* src) throw() +{ + return (int) wcstombs (0, src, 0); +} + void CharacterFunctions::append (char* dest, const char* src) throw() { strcat (dest, src); diff --git a/src/juce_core/text/juce_CharacterFunctions.h b/src/juce_core/text/juce_CharacterFunctions.h index 13cbd9077e..6ad0d5976c 100644 --- a/src/juce_core/text/juce_CharacterFunctions.h +++ b/src/juce_core/text/juce_CharacterFunctions.h @@ -91,11 +91,12 @@ public: static int length (const char* const s) throw(); static int length (const juce_wchar* const s) throw(); - static void copy (char* dest, const char* src, const int maxChars) throw(); + static void copy (char* dest, const char* src, const int maxBytes) throw(); static void copy (juce_wchar* dest, const juce_wchar* src, const int maxChars) throw(); static void copy (juce_wchar* dest, const char* src, const int maxChars) throw(); - static void copy (char* dest, const juce_wchar* src, const int maxChars) throw(); + static void copy (char* dest, const juce_wchar* src, const int maxBytes) throw(); + static int bytesRequiredForCopy (const juce_wchar* src) throw(); static void append (char* dest, const char* src) throw(); static void append (juce_wchar* dest, const juce_wchar* src) throw(); diff --git a/src/juce_core/text/juce_String.cpp b/src/juce_core/text/juce_String.cpp index 5015efec9c..ef869a4a83 100644 --- a/src/juce_core/text/juce_String.cpp +++ b/src/juce_core/text/juce_String.cpp @@ -202,12 +202,15 @@ String::String (const juce_wchar* const t) throw() { if (t != 0 && *t != 0) { +#if JUCE_STRINGS_ARE_UNICODE const int len = CharacterFunctions::length (t); createInternal (len); -#if JUCE_STRINGS_ARE_UNICODE memcpy (text->text, t, (len + 1) * sizeof (tchar)); #else + const int len = CharacterFunctions::bytesRequiredForCopy (t); + createInternal (len); + CharacterFunctions::copy (text->text, t, len + 1); #endif } @@ -492,7 +495,7 @@ String::operator const char*() const throw() String* const mutableThis = const_cast (this); mutableThis->dupeInternalIfMultiplyReferenced(); - int len = CharacterFunctions::length (text->text) + 1; + int len = CharacterFunctions::bytesRequiredForCopy (text->text) + 1; mutableThis->text = (InternalRefCountedStringHolder*) juce_realloc (text, sizeof (InternalRefCountedStringHolder) + (len * sizeof (juce_wchar) + len)); @@ -535,13 +538,13 @@ String::operator const juce_wchar*() const throw() #endif void String::copyToBuffer (char* const destBuffer, - const int maxCharsToCopy) const throw() + const int bufferSizeBytes) const throw() { - const int len = jmin (maxCharsToCopy, length()); - #if JUCE_STRINGS_ARE_UNICODE + const int len = jmin (bufferSizeBytes, CharacterFunctions::bytesRequiredForCopy (text->text)); CharacterFunctions::copy (destBuffer, text->text, len); #else + const int len = jmin (bufferSizeBytes, length()); memcpy (destBuffer, text->text, len * sizeof (tchar)); #endif