efi_loader: rename utf16_strlen, utf16_strnlen
authorHeinrich Schuchardt <xypron.glpk@gmx.de>
Fri, 31 Aug 2018 19:31:26 +0000 (21:31 +0200)
committerAlexander Graf <agraf@suse.de>
Sun, 23 Sep 2018 19:55:29 +0000 (21:55 +0200)
The function names utf16_strlen() and utf16_strnlen() are misnomers.
The functions do not count utf-16 characters but non-zero words.
So let's rename them to u16_strlen and u16_strnlen().

In utf16_dup() avoid assignment in if clause.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Signed-off-by: Alexander Graf <agraf@suse.de>
include/charset.h
lib/charset.c
lib/efi_loader/efi_bootmgr.c
lib/efi_loader/efi_console.c
lib/efi_loader/efi_file.c
lib/efi_loader/efi_variable.c
lib/vsprintf.c

index 11832cbd122eb4b8c3be417d467babad1174c647..2c6deb8034fd63a0c6fae15a8f4917201a048835 100644 (file)
 #define MAX_UTF8_PER_UTF16 3
 
 /**
- * utf16_strlen() - Get the length of an utf16 string
+ * u16_strlen - count non-zero words
  *
- * Returns the number of 16 bit characters in an utf16 string, not
- * including the terminating NULL character.
+ * This function matches wsclen() if the -fshort-wchar compiler flag is set.
+ * In the EFI context we explicitly need a function handling u16 strings.
  *
- * @in     the string to measure
- * @return the string length
+ * @in:                        null terminated u16 string
+ * ReturnValue:                number of non-zero words.
+ *                     This is not the number of utf-16 letters!
  */
-size_t utf16_strlen(const uint16_t *in);
+size_t u16_strlen(const u16 *in);
 
 /**
- * utf16_strnlen() - Get the length of a fixed-size utf16 string.
+ * u16_strlen - count non-zero words
  *
- * Returns the number of 16 bit characters in an utf16 string,
- * not including the terminating NULL character, but at most
- * 'count' number of characters.  In doing this, utf16_strnlen()
- * looks at only the first 'count' characters.
+ * This function matches wscnlen_s() if the -fshort-wchar compiler flag is set.
+ * In the EFI context we explicitly need a function handling u16 strings.
  *
- * @in     the string to measure
- * @count  the maximum number of characters to count
- * @return the string length, up to a maximum of 'count'
+ * @in:                        null terminated u16 string
+ * @count:             maximum number of words to count
+ * ReturnValue:                number of non-zero words.
+ *                     This is not the number of utf-16 letters!
  */
-size_t utf16_strnlen(const uint16_t *in, size_t count);
+size_t u16_strnlen(const u16 *in, size_t count);
 
 /**
  * utf16_strcpy() - UTF16 equivalent of strcpy()
index cd186a5a5ae6735a75ae88a1188f6d6e4e5851d5..8ff8d59957d6502cf15fd646d4b6a5e32b4b2b69 100644 (file)
  * utf8/utf16 conversion mostly lifted from grub
  */
 
-size_t utf16_strlen(const uint16_t *in)
+size_t u16_strlen(const u16 *in)
 {
        size_t i;
        for (i = 0; in[i]; i++);
        return i;
 }
 
-size_t utf16_strnlen(const uint16_t *in, size_t count)
+size_t u16_strnlen(const u16 *in, size_t count)
 {
        size_t i;
        for (i = 0; count-- && in[i]; i++);
@@ -39,7 +39,11 @@ uint16_t *utf16_strcpy(uint16_t *dest, const uint16_t *src)
 uint16_t *utf16_strdup(const uint16_t *s)
 {
        uint16_t *new;
-       if (!s || !(new = malloc((utf16_strlen(s) + 1) * 2)))
+
+       if (!s)
+               return NULL;
+       new = malloc((u16_strlen(s) + 1) * 2);
+       if (!new)
                return NULL;
        utf16_strcpy(new, s);
        return new;
index 853358ab937874051eb01f401944516061957b65..0c5764db127bad0c2df9d97a066ff7438f8be8fa 100644 (file)
@@ -60,7 +60,7 @@ static void parse_load_option(struct load_option *lo, void *ptr)
        ptr += sizeof(u16);
 
        lo->label = ptr;
-       ptr += (utf16_strlen(lo->label) + 1) * 2;
+       ptr += (u16_strlen(lo->label) + 1) * 2;
 
        lo->file_path = ptr;
        ptr += lo->file_path_length;
index b487288785347a5c03c9e7d8d9a15d0a2b5a7085..f3d612880c9f05de3c78779047d0e9c12083f867 100644 (file)
@@ -114,7 +114,7 @@ static efi_status_t EFIAPI efi_cout_output_string(
 
        EFI_ENTRY("%p, %p", this, string);
 
-       unsigned int n16 = utf16_strlen(string);
+       unsigned int n16 = u16_strlen(string);
        char buf[MAX_UTF8_PER_UTF16 * n16 + 1];
        u16 *p;
 
index 2107730ba5ac2c0ec70132de0c77d3eaf4af568c..5dafe280706926321b5eec20b2904981b3d89968 100644 (file)
@@ -140,7 +140,7 @@ static struct efi_file_handle *file_open(struct file_system *fs,
 
        if (file_name) {
                utf16_to_utf8((u8 *)f0, (u16 *)file_name, 1);
-               flen = utf16_strlen((u16 *)file_name);
+               flen = u16_strlen((u16 *)file_name);
        }
 
        /* we could have a parent, but also an absolute path: */
index 90b637215e43db1fee9456cbdf73cab838903cdf..770c67abb98035250661d3378b71b24fcb511a00 100644 (file)
@@ -106,7 +106,7 @@ static efi_status_t efi_to_native(char *native, u16 *variable_name,
 {
        size_t len;
 
-       len = utf16_strlen((u16 *)variable_name);
+       len = u16_strlen((u16 *)variable_name);
        if (len >= MAX_VAR_NAME)
                return EFI_DEVICE_ERROR;
 
index 632796f864df42a076ef532cbe19713e3555203b..5abf734750412ce17dcee80866573c629d91c39d 100644 (file)
@@ -280,7 +280,7 @@ static char *string16(char *buf, char *end, u16 *s, int field_width,
                int precision, int flags)
 {
        u16 *str = s ? s : L"<NULL>";
-       int utf16_len = utf16_strnlen(str, precision);
+       int utf16_len = u16_strnlen(str, precision);
        u8 utf8[utf16_len * MAX_UTF8_PER_UTF16];
        int utf8_len, i;