Re: [PATCH v3 1/3] lib/string: introduce ascii2utf16le() helper
On 02/06/2017 05:48 PM, Sergei Shtylyov wrote: > Hello! > > On 02/06/2017 05:03 PM, Richard Leitner wrote: > >> For USB string descriptors we need to convert ASCII strings to UTF16-LE. >> Therefore make a simple helper function (based on ascii2desc from >> drivers/usb/core/hcd.c) for that purpose. >> >> Signed-off-by: Richard Leitner> [...] >> diff --git a/lib/string.c b/lib/string.c >> index ed83562..a113e3e 100644 >> --- a/lib/string.c >> +++ b/lib/string.c >> @@ -952,3 +952,29 @@ char *strreplace(char *s, char old, char new) >> return s; >> } >> EXPORT_SYMBOL(strreplace); >> + >> +/** >> + * ascii2utf16le() - Helper routine for producing UTF-16LE string >> descriptors >> + * @s: Null-terminated ASCII (actually ISO-8859-1) string >> + * @buf: Buffer for UTF-16LE string >> + * @len: Length (in bytes; may be odd) of UTF-16LE buffer. >> + * >> + * Return: The number of bytes filled in: 2*strlen(s) or @len, >> whichever is less >> + */ >> +unsigned int ascii2utf16le(char const *s, u8 *buf, unsigned int len) >> +{ >> +unsigned int n, t = 2 * strlen(s); >> + >> +if (len > t) >> +len = t; >> +n = len; >> +while (n--) { >> +t = (unsigned char)*s++; >> +*buf++ = t; >> +if (!n--) >> +break; >> +*buf++ = t >> 8; > >Isn't it always 0? As I will remove this function and use utf8s_to_utf16s() instead (as suggested by Alan Stern) IMHO this issue needs no more attention. Nonetheless, thank you for your feedback! > >> +} >> +return len; >> +} >> +EXPORT_SYMBOL(ascii2utf16le); regards, Richard L -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v3 1/3] lib/string: introduce ascii2utf16le() helper
Hello! On 02/06/2017 05:03 PM, Richard Leitner wrote: For USB string descriptors we need to convert ASCII strings to UTF16-LE. Therefore make a simple helper function (based on ascii2desc from drivers/usb/core/hcd.c) for that purpose. Signed-off-by: Richard Leitner[...] diff --git a/lib/string.c b/lib/string.c index ed83562..a113e3e 100644 --- a/lib/string.c +++ b/lib/string.c @@ -952,3 +952,29 @@ char *strreplace(char *s, char old, char new) return s; } EXPORT_SYMBOL(strreplace); + +/** + * ascii2utf16le() - Helper routine for producing UTF-16LE string descriptors + * @s: Null-terminated ASCII (actually ISO-8859-1) string + * @buf: Buffer for UTF-16LE string + * @len: Length (in bytes; may be odd) of UTF-16LE buffer. + * + * Return: The number of bytes filled in: 2*strlen(s) or @len, whichever is less + */ +unsigned int ascii2utf16le(char const *s, u8 *buf, unsigned int len) +{ + unsigned int n, t = 2 * strlen(s); + + if (len > t) + len = t; + n = len; + while (n--) { + t = (unsigned char)*s++; + *buf++ = t; + if (!n--) + break; + *buf++ = t >> 8; Isn't it always 0? + } + return len; +} +EXPORT_SYMBOL(ascii2utf16le); MBR, Sergei -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v3 1/3] lib/string: introduce ascii2utf16le() helper
On 02/06/2017 04:40 PM, Alan Stern wrote: > On Mon, 6 Feb 2017, Richard Leitner wrote: >> So it would be OK to include linux/nls.h and use utf8s_to_utf16s() in >> drivers/usb/{core/hcd.c,misc/usb251xb.c}? > > Well, we already include linux/nls.h in drivers/usb/core/message.c and > a few files under drivers/usb/gadget. Putting it in a few more places > shouldn't hurt. OK. Thanks! I will change that for v4. regards, Richard L -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v3 1/3] lib/string: introduce ascii2utf16le() helper
On Mon, 6 Feb 2017, Richard Leitner wrote: > On 02/06/2017 04:12 PM, Alan Stern wrote: > > On Mon, 6 Feb 2017, Richard Leitner wrote: > > > >> For USB string descriptors we need to convert ASCII strings to UTF16-LE. > >> Therefore make a simple helper function (based on ascii2desc from > >> drivers/usb/core/hcd.c) for that purpose. > > > > You know, we already have utf8s_to_utf16s() in fs/nls/nls_base.c. > > Maybe it doesn't do exactly what you want, but it should be pretty > > close. Adding another helper function to do essentially the same thing > > seems unnecessary. > > Thanks for that pointer. I totally agree with you. > > So it would be OK to include linux/nls.h and use utf8s_to_utf16s() in > drivers/usb/{core/hcd.c,misc/usb251xb.c}? Well, we already include linux/nls.h in drivers/usb/core/message.c and a few files under drivers/usb/gadget. Putting it in a few more places shouldn't hurt. Alan Stern -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v3 1/3] lib/string: introduce ascii2utf16le() helper
On 02/06/2017 04:12 PM, Alan Stern wrote: > On Mon, 6 Feb 2017, Richard Leitner wrote: > >> For USB string descriptors we need to convert ASCII strings to UTF16-LE. >> Therefore make a simple helper function (based on ascii2desc from >> drivers/usb/core/hcd.c) for that purpose. > > You know, we already have utf8s_to_utf16s() in fs/nls/nls_base.c. > Maybe it doesn't do exactly what you want, but it should be pretty > close. Adding another helper function to do essentially the same thing > seems unnecessary. Thanks for that pointer. I totally agree with you. So it would be OK to include linux/nls.h and use utf8s_to_utf16s() in drivers/usb/{core/hcd.c,misc/usb251xb.c}? Thanks & regards, Richard L -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v3 1/3] lib/string: introduce ascii2utf16le() helper
On Mon, 6 Feb 2017, Richard Leitner wrote: > For USB string descriptors we need to convert ASCII strings to UTF16-LE. > Therefore make a simple helper function (based on ascii2desc from > drivers/usb/core/hcd.c) for that purpose. You know, we already have utf8s_to_utf16s() in fs/nls/nls_base.c. Maybe it doesn't do exactly what you want, but it should be pretty close. Adding another helper function to do essentially the same thing seems unnecessary. Alan Stern -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH v3 1/3] lib/string: introduce ascii2utf16le() helper
For USB string descriptors we need to convert ASCII strings to UTF16-LE. Therefore make a simple helper function (based on ascii2desc from drivers/usb/core/hcd.c) for that purpose. Signed-off-by: Richard Leitner--- include/linux/string.h | 1 + lib/string.c | 26 ++ 2 files changed, 27 insertions(+) diff --git a/include/linux/string.h b/include/linux/string.h index 26b6f6a..48fd0c6 100644 --- a/include/linux/string.h +++ b/include/linux/string.h @@ -135,6 +135,7 @@ static inline int strtobool(const char *s, bool *res) } int match_string(const char * const *array, size_t n, const char *string); +unsigned int ascii2utf16le(char const *s, u8 *buf, unsigned int len); #ifdef CONFIG_BINARY_PRINTF int vbin_printf(u32 *bin_buf, size_t size, const char *fmt, va_list args); diff --git a/lib/string.c b/lib/string.c index ed83562..a113e3e 100644 --- a/lib/string.c +++ b/lib/string.c @@ -952,3 +952,29 @@ char *strreplace(char *s, char old, char new) return s; } EXPORT_SYMBOL(strreplace); + +/** + * ascii2utf16le() - Helper routine for producing UTF-16LE string descriptors + * @s: Null-terminated ASCII (actually ISO-8859-1) string + * @buf: Buffer for UTF-16LE string + * @len: Length (in bytes; may be odd) of UTF-16LE buffer. + * + * Return: The number of bytes filled in: 2*strlen(s) or @len, whichever is less + */ +unsigned int ascii2utf16le(char const *s, u8 *buf, unsigned int len) +{ + unsigned int n, t = 2 * strlen(s); + + if (len > t) + len = t; + n = len; + while (n--) { + t = (unsigned char)*s++; + *buf++ = t; + if (!n--) + break; + *buf++ = t >> 8; + } + return len; +} +EXPORT_SYMBOL(ascii2utf16le); -- 2.1.4 -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html