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