lib: add u16_strcpy/strdup functions
authorAkashi, Takahiro <takahiro.akashi@linaro.org>
Fri, 14 Dec 2018 10:10:38 +0000 (19:10 +0900)
committerAlexander Graf <agraf@suse.de>
Wed, 13 Feb 2019 08:40:05 +0000 (09:40 +0100)
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>
Reviewed-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Signed-off-by: Alexander Graf <agraf@suse.de>
include/charset.h
lib/charset.c

index 4d45e246e5158fdb6d7c8acf6133d42c4a8ce0e2..65087f76d1fc386385055e7f922850f71ecf4b64 100644 (file)
@@ -191,6 +191,29 @@ size_t u16_strlen(const u16 *in);
  */
 size_t u16_strnlen(const u16 *in, size_t count);
 
+/**
+ * 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
  *
index 10557b9e753dd39a36eda86b9fc39c6391461bc8..5e349ed5ee45248a8183accf806bb23ecabb8f94 100644 (file)
@@ -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)
 {