[1/6] lib: add u16_strcpy/strdup functions

Message ID 20181101044522.19899-1-takahiro.akashi@linaro.org
State New
Headers show
Series
  • efi_loader: add HII database protocol
Related show

Commit Message

AKASHI Takahiro Nov. 1, 2018, 4:45 a.m.
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(+)

Comments

Heinrich Schuchardt Nov. 1, 2018, 6:10 a.m. | #1
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>
AKASHI Takahiro Nov. 2, 2018, 12:12 a.m. | #2
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>

Patch

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)
 {