From: Ben Hutchings Date: Mon, 9 Apr 2012 00:51:37 +0100 Subject: [PATCH] nls: Avoid ABI change from improvement to utf8s_to_utf16s It's easy to add a temporary wrapper for binary-compatibility. --- fs/nls/nls_base.c | 13 ++++++++++++- include/linux/nls.h | 4 +++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/fs/nls/nls_base.c b/fs/nls/nls_base.c index 0eb059e..91f145a 100644 --- a/fs/nls/nls_base.c +++ b/fs/nls/nls_base.c @@ -129,7 +129,7 @@ static inline void put_utf16(wchar_t *s, unsigned c, enum utf16_endian endian) } } -int utf8s_to_utf16s(const u8 *s, int len, enum utf16_endian endian, +int utf8s_to_utf16s_new(const u8 *s, int len, enum utf16_endian endian, wchar_t *pwcs, int maxlen) { u16 *op; @@ -171,6 +171,17 @@ int utf8s_to_utf16s(const u8 *s, int len, enum utf16_endian endian, } EXPORT_SYMBOL(utf8s_to_utf16s); +/* Binary-compatibility wrapper */ +#undef utf8s_to_utf16s +int utf8s_to_utf16s(const u8 *s, int len, wchar_t *pwcs) +{ + /* Output length in code units is never longer than input + * length in bytes, so we can trivially set maxlen = len. + */ + return utf8s_to_utf16s_new(s, len, UTF16_HOST_ENDIAN, pwcs, len); +} +EXPORT_SYMBOL(utf8s_to_utf16s); + static inline unsigned long get_utf16(unsigned c, enum utf16_endian endian) { switch (endian) { diff --git a/include/linux/nls.h b/include/linux/nls.h index 5dc635f..6a2a00c 100644 --- a/include/linux/nls.h +++ b/include/linux/nls.h @@ -52,8 +52,10 @@ extern struct nls_table *load_nls_default(void); extern int utf8_to_utf32(const u8 *s, int len, unicode_t *pu); extern int utf32_to_utf8(unicode_t u, u8 *s, int maxlen); -extern int utf8s_to_utf16s(const u8 *s, int len, +extern int utf8s_to_utf16s(const u8 *s, int len, wchar_t *pwcs); +extern int utf8s_to_utf16s_new(const u8 *s, int len, enum utf16_endian endian, wchar_t *pwcs, int maxlen); +#define utf8s_to_utf16s utf8s_to_utf16s_new extern int utf16s_to_utf8s(const wchar_t *pwcs, int len, enum utf16_endian endian, u8 *s, int maxlen); -- 1.7.9.5