Message ID | 20181101044522.19899-1-takahiro.akashi@linaro.org |
---|---|
State | New |
Headers | show |
Series | efi_loader: add HII database protocol | expand |
On 11/01/2018 05:45 AM, AKASHI Takahiro wrote: > From: "Akashi Takahiro" <takahiro.akashi@linaro.org> > > Add u16_strcpy() and u16_strdup(). The latter function will be > used later in implementing efi HII database protocol. > > Signed-off-by: Akashi Takahiro <takahiro.akashi@linaro.org> > --- > include/charset.h | 18 ++++++++++++++++++ > lib/charset.c | 29 +++++++++++++++++++++++++++++ > 2 files changed, 47 insertions(+) > > diff --git a/include/charset.h b/include/charset.h > index 4d45e246e515..5807f02b1a04 100644 > --- a/include/charset.h > +++ b/include/charset.h > @@ -191,6 +191,24 @@ size_t u16_strlen(const u16 *in); > */ > size_t u16_strnlen(const u16 *in, size_t count); > > +/* TODO: add descriptions */ You could use the descriptions below. > +/** > + * u16_strcpy() - copy u16 string Copy u16 string pointed to by src, including terminating null word, to the buffer pointed to by dest. > + * > + * @dest: destination buffer > + * @src: source buffer (null terminated) > + * Return: 'dest' address > + */ > +u16 *u16_strcpy(u16 *dest, const u16 *src); > + > +/** > + * u16_strdup() - duplicate u16 string Copy u16 string pointed to by src, including terminating null word, to a newly allocated buffer. > + * > + * @src: source buffer (null terminated) > + * Return: allocated new buffer on success, NULL on failure > + */ > +u16 *u16_strdup(const u16 *src); > + > /** > * utf16_to_utf8() - Convert an utf16 string to utf8 > * > diff --git a/lib/charset.c b/lib/charset.c > index 10557b9e753d..5e349ed5ee45 100644 > --- a/lib/charset.c > +++ b/lib/charset.c > @@ -349,6 +349,35 @@ size_t u16_strnlen(const u16 *in, size_t count) > return i; > } > > +u16 *u16_strcpy(u16 *dest, const u16 *src) > +{ > + u16 *tmp = dest; > + > + for (;; dest++, src++) { > + *dest = *src; > + if (!*src) > + break; > + } > + > + return tmp; > +} > + > +u16 *u16_strdup(const u16 *src) > +{ > + u16 *new; > + > + if (!src) > + return NULL; > + > + new = malloc((u16_strlen(src) + 1) * sizeof(u16)); > + if (!new) > + return NULL; > + > + u16_strcpy(new, src); > + > + return new; > +} > + > /* Convert UTF-16 to UTF-8. */ > uint8_t *utf16_to_utf8(uint8_t *dest, const uint16_t *src, size_t size) > { > For everything I added to charset.c I implemented tests in test/unicode_ut.c. Reviewed-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
On Thu, Nov 01, 2018 at 07:10:59AM +0100, Heinrich Schuchardt wrote: > On 11/01/2018 05:45 AM, AKASHI Takahiro wrote: > > From: "Akashi Takahiro" <takahiro.akashi@linaro.org> > > > > Add u16_strcpy() and u16_strdup(). The latter function will be > > used later in implementing efi HII database protocol. > > > > Signed-off-by: Akashi Takahiro <takahiro.akashi@linaro.org> > > --- > > include/charset.h | 18 ++++++++++++++++++ > > lib/charset.c | 29 +++++++++++++++++++++++++++++ > > 2 files changed, 47 insertions(+) > > > > diff --git a/include/charset.h b/include/charset.h > > index 4d45e246e515..5807f02b1a04 100644 > > --- a/include/charset.h > > +++ b/include/charset.h > > @@ -191,6 +191,24 @@ size_t u16_strlen(const u16 *in); > > */ > > size_t u16_strnlen(const u16 *in, size_t count); > > > > +/* TODO: add descriptions */ > > You could use the descriptions below. Thanks. Actually I forgot to delete this line :) I will take your description anyway. -Takahiro Akashi > > +/** > > + * u16_strcpy() - copy u16 string > > Copy u16 string pointed to by src, including terminating null word, to > the buffer pointed to by dest. > > > + * > > + * @dest: destination buffer > > + * @src: source buffer (null terminated) > > + * Return: 'dest' address > > + */ > > +u16 *u16_strcpy(u16 *dest, const u16 *src); > > + > > +/** > > + * u16_strdup() - duplicate u16 string > > Copy u16 string pointed to by src, including terminating null word, to a > newly allocated buffer. > > > + * > > + * @src: source buffer (null terminated) > > + * Return: allocated new buffer on success, NULL on failure > > + */ > > +u16 *u16_strdup(const u16 *src); > > + > > /** > > * utf16_to_utf8() - Convert an utf16 string to utf8 > > * > > diff --git a/lib/charset.c b/lib/charset.c > > index 10557b9e753d..5e349ed5ee45 100644 > > --- a/lib/charset.c > > +++ b/lib/charset.c > > @@ -349,6 +349,35 @@ size_t u16_strnlen(const u16 *in, size_t count) > > return i; > > } > > > > +u16 *u16_strcpy(u16 *dest, const u16 *src) > > +{ > > + u16 *tmp = dest; > > + > > + for (;; dest++, src++) { > > + *dest = *src; > > + if (!*src) > > + break; > > + } > > + > > + return tmp; > > +} > > + > > +u16 *u16_strdup(const u16 *src) > > +{ > > + u16 *new; > > + > > + if (!src) > > + return NULL; > > + > > + new = malloc((u16_strlen(src) + 1) * sizeof(u16)); > > + if (!new) > > + return NULL; > > + > > + u16_strcpy(new, src); > > + > > + return new; > > +} > > + > > /* Convert UTF-16 to UTF-8. */ > > uint8_t *utf16_to_utf8(uint8_t *dest, const uint16_t *src, size_t size) > > { > > > > For everything I added to charset.c I implemented tests in > test/unicode_ut.c. > > Reviewed-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
diff --git a/include/charset.h b/include/charset.h index 4d45e246e515..5807f02b1a04 100644 --- a/include/charset.h +++ b/include/charset.h @@ -191,6 +191,24 @@ size_t u16_strlen(const u16 *in); */ size_t u16_strnlen(const u16 *in, size_t count); +/* TODO: add descriptions */ +/** + * u16_strcpy() - copy u16 string + * + * @dest: destination buffer + * @src: source buffer (null terminated) + * Return: 'dest' address + */ +u16 *u16_strcpy(u16 *dest, const u16 *src); + +/** + * u16_strdup() - duplicate u16 string + * + * @src: source buffer (null terminated) + * Return: allocated new buffer on success, NULL on failure + */ +u16 *u16_strdup(const u16 *src); + /** * utf16_to_utf8() - Convert an utf16 string to utf8 * diff --git a/lib/charset.c b/lib/charset.c index 10557b9e753d..5e349ed5ee45 100644 --- a/lib/charset.c +++ b/lib/charset.c @@ -349,6 +349,35 @@ size_t u16_strnlen(const u16 *in, size_t count) return i; } +u16 *u16_strcpy(u16 *dest, const u16 *src) +{ + u16 *tmp = dest; + + for (;; dest++, src++) { + *dest = *src; + if (!*src) + break; + } + + return tmp; +} + +u16 *u16_strdup(const u16 *src) +{ + u16 *new; + + if (!src) + return NULL; + + new = malloc((u16_strlen(src) + 1) * sizeof(u16)); + if (!new) + return NULL; + + u16_strcpy(new, src); + + return new; +} + /* Convert UTF-16 to UTF-8. */ uint8_t *utf16_to_utf8(uint8_t *dest, const uint16_t *src, size_t size) {