mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-28 15:41:40 +00:00
efi_loader: support unaligned u16 strings
Allow unaligned u16 strings as arguments to u16_strdup() and u16_strlen(). Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
This commit is contained in:
parent
ade317a281
commit
317068b8b6
2 changed files with 16 additions and 11 deletions
|
@ -178,7 +178,7 @@ s32 utf_to_upper(const s32 code);
|
|||
* ReturnValue: number of non-zero words.
|
||||
* This is not the number of utf-16 letters!
|
||||
*/
|
||||
size_t u16_strlen(const u16 *in);
|
||||
size_t u16_strlen(const void *in);
|
||||
|
||||
/**
|
||||
* u16_strlen - count non-zero words
|
||||
|
@ -214,7 +214,7 @@ u16 *u16_strcpy(u16 *dest, const u16 *src);
|
|||
* @src: source buffer (null terminated)
|
||||
* Return: allocated new buffer on success, NULL on failure
|
||||
*/
|
||||
u16 *u16_strdup(const u16 *src);
|
||||
u16 *u16_strdup(const void *src);
|
||||
|
||||
/**
|
||||
* utf16_to_utf8() - Convert an utf16 string to utf8
|
||||
|
|
|
@ -335,11 +335,16 @@ s32 utf_to_upper(const s32 code)
|
|||
return ret;
|
||||
}
|
||||
|
||||
size_t u16_strlen(const u16 *in)
|
||||
size_t u16_strlen(const void *in)
|
||||
{
|
||||
size_t i;
|
||||
for (i = 0; in[i]; i++);
|
||||
return i;
|
||||
const char *pos = in;
|
||||
size_t ret;
|
||||
|
||||
for (; pos[0] || pos[1]; pos += 2)
|
||||
;
|
||||
ret = pos - (char *)in;
|
||||
ret >>= 1;
|
||||
return ret;
|
||||
}
|
||||
|
||||
size_t u16_strnlen(const u16 *in, size_t count)
|
||||
|
@ -362,18 +367,18 @@ u16 *u16_strcpy(u16 *dest, const u16 *src)
|
|||
return tmp;
|
||||
}
|
||||
|
||||
u16 *u16_strdup(const u16 *src)
|
||||
u16 *u16_strdup(const void *src)
|
||||
{
|
||||
u16 *new;
|
||||
size_t len;
|
||||
|
||||
if (!src)
|
||||
return NULL;
|
||||
|
||||
new = malloc((u16_strlen(src) + 1) * sizeof(u16));
|
||||
len = (u16_strlen(src) + 1) * sizeof(u16);
|
||||
new = malloc(len);
|
||||
if (!new)
|
||||
return NULL;
|
||||
|
||||
u16_strcpy(new, src);
|
||||
memcpy(new, src, len);
|
||||
|
||||
return new;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue