On Sunday 29 May 2022 10:37:23 Masahisa Kojima wrote: > On Sat, 28 May 2022 at 17:37, Heinrich Schuchardt <xypron.g...@gmx.de> wrote: > > On 5/26/22 12:09, Masahisa Kojima wrote: > > > @@ -183,13 +183,13 @@ static int prepare_bootmenu_entry(struct > > > bootmenu_data *menu, > > > return -ENOMEM; > > > > > > len = sep-option; > > > > %s/sep-option/sep - option/ > > OK. > > > > > > - buf = calloc(1, (len + 1) * sizeof(u16)); > > > + buf = calloc(1, (len + 1)); > > > entry->title = buf; > > > if (!entry->title) { > > > free(entry); > > > return -ENOMEM; > > > } > > > - utf8_utf16_strncpy(&buf, option, len); > > > + strncpy(buf, option, len); > > > > Instead of two function calls (calloc, strncpy) simply use strdup(). > > bootmenu_x format is "[title]=[commands]", title is not the > NUL-terminated string, so we can not use strdup here.
Usage of C's strncpy() function should be in most cases avoided as when target buffer does not have enough space this function does not fill nul-term byte. (Anyway, I do not know if U-Boot implements strncpy() according to C standard with this trap or not) But if you already have length of string then you should use memcpy(). > > > > > > > > len = strlen(sep + 1); > > > entry->command = malloc(len + 1); > > > > Use strdup() here too. > > OK, command is NUL-terminated. > > Thank you for your comment. > > Regards, > Masahisa Kojima