linux/debian/patches/debian/nls-Avoid-ABI-change-from-i...

61 lines
2.0 KiB
Diff

From: Ben Hutchings <ben@decadent.org.uk>
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