Commit d37dc42ab6f040b8f0f2962ab219c5b2accf748d
Committed by
Steve French
1 parent
cbb7fe129b
Exists in
master
and in
7 other branches
nls: add a nls_nullsize inline
It's possible for character sets to require a multi-byte null string terminator. Add a helper function that determines the size of the null terminator at runtime. Signed-off-by: Jeff Layton <jlayton@redhat.com> Acked-by: Suresh Jayaraman <sjayaraman@suse.de> Signed-off-by: Steve French <sfrench@us.ibm.com>
Showing 1 changed file with 19 additions and 0 deletions Side-by-side Diff
include/linux/nls.h
... | ... | @@ -58,6 +58,25 @@ |
58 | 58 | return 0; |
59 | 59 | } |
60 | 60 | |
61 | +/* | |
62 | + * nls_nullsize - return length of null character for codepage | |
63 | + * @codepage - codepage for which to return length of NULL terminator | |
64 | + * | |
65 | + * Since we can't guarantee that the null terminator will be a particular | |
66 | + * length, we have to check against the codepage. If there's a problem | |
67 | + * determining it, assume a single-byte NULL terminator. | |
68 | + */ | |
69 | +static inline int | |
70 | +nls_nullsize(const struct nls_table *codepage) | |
71 | +{ | |
72 | + int charlen; | |
73 | + char tmp[NLS_MAX_CHARSET_SIZE]; | |
74 | + | |
75 | + charlen = codepage->uni2char(0, tmp, NLS_MAX_CHARSET_SIZE); | |
76 | + | |
77 | + return charlen > 0 ? charlen : 1; | |
78 | +} | |
79 | + | |
61 | 80 | #define MODULE_ALIAS_NLS(name) MODULE_ALIAS("nls_" __stringify(name)) |
62 | 81 | |
63 | 82 | #endif /* _LINUX_NLS_H */ |