Re: [PATCH 01/12] nls: add a nls_nullsize inline

Suresh Jayaraman <[email protected]>
Newsgroups gmane.linux.file-systems.cifs
Message-ID <[email protected]>
Jeff Layton wrote:
> 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 <[email protected]>
> ---
>  include/linux/nls.h |   19 +++++++++++++++++++
>  1 files changed, 19 insertions(+), 0 deletions(-)
> 
> diff --git a/include/linux/nls.h b/include/linux/nls.h
> index 6a88220..52b1a76 100644
> --- a/include/linux/nls.h
> +++ b/include/linux/nls.h
> @@ -58,6 +58,25 @@ static inline int nls_strnicmp(struct nls_table *t, const unsigned char *s1,
>  	return 0;
>  }
>  
> +/*
> + * nls_nullsize - return length of null character for codepage
> + * @codepage - codepage for which to return length of NULL terminator
> + *
> + * Since we can't guarantee that the null terminator will be a particular
> + * length, we have to check against the codepage. If there's a problem
> + * determining it, assume a single-byte NULL terminator.
> + */
> +static inline int
> +nls_nullsize(const struct nls_table *codepage)
> +{
> +	int charlen;
> +	char tmp[NLS_MAX_CHARSET_SIZE];
> +
> +	charlen = codepage->uni2char(0, tmp, NLS_MAX_CHARSET_SIZE);
> +
> +	return charlen > 0 ? charlen : 1;
> +}
> +
>  #define MODULE_ALIAS_NLS(name)	MODULE_ALIAS("nls_" __stringify(name))
>  
>  #endif /* _LINUX_NLS_H */

Though any of the supported charsets does seem to use multi-byte null
termination, it makes more sense to have forward-compatible code with
negligible overhead.

Acked-by: Suresh Jayaraman <[email protected]>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.