mirror of
https://github.com/brain-hackers/u-boot-brain
synced 2024-09-27 23:20:26 +09: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
@ -178,7 +178,7 @@ s32 utf_to_upper(const s32 code);
|
|||||||
* ReturnValue: number of non-zero words.
|
* ReturnValue: number of non-zero words.
|
||||||
* This is not the number of utf-16 letters!
|
* 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
|
* u16_strlen - count non-zero words
|
||||||
@ -214,7 +214,7 @@ u16 *u16_strcpy(u16 *dest, const u16 *src);
|
|||||||
* @src: source buffer (null terminated)
|
* @src: source buffer (null terminated)
|
||||||
* Return: allocated new buffer on success, NULL on failure
|
* 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
|
* utf16_to_utf8() - Convert an utf16 string to utf8
|
||||||
|
@ -335,11 +335,16 @@ s32 utf_to_upper(const s32 code)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t u16_strlen(const u16 *in)
|
size_t u16_strlen(const void *in)
|
||||||
{
|
{
|
||||||
size_t i;
|
const char *pos = in;
|
||||||
for (i = 0; in[i]; i++);
|
size_t ret;
|
||||||
return i;
|
|
||||||
|
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)
|
size_t u16_strnlen(const u16 *in, size_t count)
|
||||||
@ -362,18 +367,18 @@ u16 *u16_strcpy(u16 *dest, const u16 *src)
|
|||||||
return tmp;
|
return tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
u16 *u16_strdup(const u16 *src)
|
u16 *u16_strdup(const void *src)
|
||||||
{
|
{
|
||||||
u16 *new;
|
u16 *new;
|
||||||
|
size_t len;
|
||||||
|
|
||||||
if (!src)
|
if (!src)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
len = (u16_strlen(src) + 1) * sizeof(u16);
|
||||||
new = malloc((u16_strlen(src) + 1) * sizeof(u16));
|
new = malloc(len);
|
||||||
if (!new)
|
if (!new)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
memcpy(new, src, len);
|
||||||
u16_strcpy(new, src);
|
|
||||||
|
|
||||||
return new;
|
return new;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user