diff options
| -rw-r--r-- | common/encoding.cpp | 16 | ||||
| -rw-r--r-- | common/encoding.h | 12 | 
2 files changed, 28 insertions, 0 deletions
diff --git a/common/encoding.cpp b/common/encoding.cpp index fc743e5119..3c70f19334 100644 --- a/common/encoding.cpp +++ b/common/encoding.cpp @@ -499,4 +499,20 @@ uint32 *Encoding::transliterateUTF32(const uint32 *string, size_t length) {  	return result;  } +size_t Encoding::stringLength(const char *string, const String &encoding) { +	if (encoding.hasPrefixIgnoreCase("UTF-16")) { +		const uint16 *i = (const uint16 *) string; +		for (;*i != 0; i++) {} +		return (const char *) i - string; +	} else if (encoding.hasPrefixIgnoreCase("UTF-32")) { +		const uint32 *i = (const uint32 *) string; +		for (;*i != 0; i++) {} +		return (const char *) i - string; +	} else { +		const char *i = string; +		for (;*i != 0; i++) {} +		return i - string; +	} +} +  } diff --git a/common/encoding.h b/common/encoding.h index 2b079ad962..adb61191d1 100644 --- a/common/encoding.h +++ b/common/encoding.h @@ -108,6 +108,18 @@ class Encoding {  		 * @return Array of characters with the opposite endianity  		 */  		static char *switchEndian(const char *string, int length, int bitCount); + +		/** +		 * Computes length (in bytes) of a string in a given encoding.  +		 * The string must be zero ended. Similar to strlen +		 * (could be used instead of strlen). +		 * +		 * @param string String, which size should be computed. +		 * @param encoding Encoding of the string. +		 * +		 * @return Size of the string in bytes. +		 */ +		static size_t stringLength(const char *string, const String &encoding);  	private:  		/** The encoding, which is currently being converted to */  | 
