]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
boot: Use xstrdup8/16 23512/head
authorJan Janssen <medhefgo@web.de>
Wed, 25 May 2022 09:05:19 +0000 (11:05 +0200)
committerJan Janssen <medhefgo@web.de>
Tue, 31 May 2022 13:15:01 +0000 (15:15 +0200)
Note that xstrdup is now safe to call with a NULL pointer and will
just return NULL in that case.

src/boot/efi/boot.c
src/boot/efi/cpio.c
src/boot/efi/util.h

index e3964033c27769536e0785de07c105a541c6ffb4..71f1227923120ca84e8ee2f643a148962d87b478 100644 (file)
@@ -418,11 +418,11 @@ static CHAR16 *update_timeout_efivar(UINT32 *t, BOOLEAN inc) {
 
         switch (*t) {
         case TIMEOUT_UNSET:
-                return xstrdup(L"Menu timeout defined by configuration file.");
+                return xstrdup16(u"Menu timeout defined by configuration file.");
         case TIMEOUT_MENU_FORCE:
-                return xstrdup(L"Timeout disabled, menu will always be shown.");
+                return xstrdup16(u"Timeout disabled, menu will always be shown.");
         case TIMEOUT_MENU_HIDDEN:
-                return xstrdup(L"Menu disabled. Hold down key at bootup to show menu.");
+                return xstrdup16(u"Menu disabled. Hold down key at bootup to show menu.");
         default:
                 return xpool_print(L"Menu timeout set to %u s.", *t);
         }
@@ -861,7 +861,7 @@ static BOOLEAN menu_run(
                 case KEYPRESS(0, 0, 'H'):
                 case KEYPRESS(0, 0, '?'):
                         /* This must stay below 80 characters! Q/v/Ctrl+l/f deliberately not advertised. */
-                        status = xstrdup(L"(d)efault (t/T)timeout (e)dit (r/R)resolution (p)rint (h)elp");
+                        status = xstrdup16(u"(d)efault (t/T)timeout (e)dit (r/R)resolution (p)rint (h)elp");
                         break;
 
                 case KEYPRESS(0, 0, 'Q'):
@@ -873,13 +873,13 @@ static BOOLEAN menu_run(
                 case KEYPRESS(0, 0, 'D'):
                         if (config->idx_default_efivar != idx_highlight) {
                                 FreePool(config->entry_default_efivar);
-                                config->entry_default_efivar = xstrdup(config->entries[idx_highlight]->id);
+                                config->entry_default_efivar = xstrdup16(config->entries[idx_highlight]->id);
                                 config->idx_default_efivar = idx_highlight;
-                                status = xstrdup(L"Default boot entry selected.");
+                                status = xstrdup16(u"Default boot entry selected.");
                         } else {
                                 config->entry_default_efivar = mfree(config->entry_default_efivar);
                                 config->idx_default_efivar = IDX_INVALID;
-                                status = xstrdup(L"Default boot entry cleared.");
+                                status = xstrdup16(u"Default boot entry cleared.");
                         }
                         config->use_saved_entry_efivar = FALSE;
                         refresh = TRUE;
@@ -1360,13 +1360,13 @@ good:
         entry->tries_left = left;
         entry->tries_done = done;
 
-        entry->path = xstrdup(path);
-        entry->current_name = xstrdup(file);
+        entry->path = xstrdup16(path);
+        entry->current_name = xstrdup16(file);
 
         next_left = left <= 0 ? 0 : left - 1;
         next_done = done >= (UINTN) -2 ? (UINTN) -2 : done + 1;
 
-        prefix = xstrdup(file);
+        prefix = xstrdup16(file);
         prefix[i] = 0;
 
         entry->next_name = xpool_print(L"%s+%" PRIuN L"-%" PRIuN L"%s", prefix, next_left, next_done, strempty(suffix));
@@ -1547,7 +1547,7 @@ static void config_entry_add_type1(
                 return;
 
         entry->device = device;
-        entry->id = xstrdup(file);
+        entry->id = xstrdup16(file);
         strtolower16(entry->id);
 
         config_add_entry(config, entry);
@@ -1792,7 +1792,7 @@ static void config_title_generate(Config *config) {
         for (UINTN i = 0; i < config->entry_count; i++) {
                 assert(!config->entries[i]->title_show);
                 unique[i] = TRUE;
-                config->entries[i]->title_show = xstrdup(config->entries[i]->title ?: config->entries[i]->id);
+                config->entries[i]->title_show = xstrdup16(config->entries[i]->title ?: config->entries[i]->id);
         }
 
         if (entries_unique(config->entries, unique, config->entry_count))
@@ -1911,11 +1911,11 @@ static ConfigEntry *config_entry_add_loader_auto(
 
         ConfigEntry *entry = xnew(ConfigEntry, 1);
         *entry = (ConfigEntry) {
-                .id = xstrdup(id),
+                .id = xstrdup16(id),
                 .type = LOADER_AUTO,
-                .title = xstrdup(title),
+                .title = xstrdup16(title),
                 .device = device,
-                .loader = xstrdup(loader),
+                .loader = xstrdup16(loader),
                 .key = key,
                 .tries_done = UINTN_MAX,
                 .tries_left = UINTN_MAX,
@@ -2197,13 +2197,13 @@ static void config_entry_add_unified(
 
                 ConfigEntry *entry = xnew(ConfigEntry, 1);
                 *entry = (ConfigEntry) {
-                        .id = xstrdup(f->FileName),
+                        .id = xstrdup16(f->FileName),
                         .type = LOADER_UNIFIED_LINUX,
-                        .title = xstrdup(good_name),
-                        .version = good_version ? xstrdup(good_version) : NULL,
+                        .title = xstrdup16(good_name),
+                        .version = xstrdup16(good_version),
                         .device = device,
                         .loader = xpool_print(L"\\EFI\\Linux\\%s", f->FileName),
-                        .sort_key = good_sort_key ? xstrdup(good_sort_key) : NULL,
+                        .sort_key = xstrdup16(good_sort_key),
                         .key = 'l',
                         .tries_done = UINTN_MAX,
                         .tries_left = UINTN_MAX,
@@ -2545,8 +2545,8 @@ static void config_load_all_entries(
         if (config->auto_firmware && FLAGS_SET(get_os_indications_supported(), EFI_OS_INDICATIONS_BOOT_TO_FW_UI)) {
                 ConfigEntry *entry = xnew(ConfigEntry, 1);
                 *entry = (ConfigEntry) {
-                        .id = xstrdup(L"auto-reboot-to-firmware-setup"),
-                        .title = xstrdup(L"Reboot Into Firmware Interface"),
+                        .id = xstrdup16(u"auto-reboot-to-firmware-setup"),
+                        .title = xstrdup16(u"Reboot Into Firmware Interface"),
                         .call = reboot_into_firmware,
                         .tries_done = UINTN_MAX,
                         .tries_left = UINTN_MAX,
index 18689d9d6b78d33d343d56c4201f5ccfd0d273c6..66ef5da31383140206cc9f59f912cc92d17c9c94 100644 (file)
@@ -391,7 +391,7 @@ EFI_STATUS pack_cpio(
                 if (strlen16(dirent->FileName) > 255) /* Max filename size on Linux */
                         continue;
 
-                d = xstrdup(dirent->FileName);
+                d = xstrdup16(dirent->FileName);
 
                 if (n_items+2 > n_allocated) {
                         UINTN m;
index fcfadf3a6eb8560a02fc0fd9303b9be65bd275ba..06c298d776df354fa0af65c3da9b58bf92d579ea 100644 (file)
@@ -41,7 +41,6 @@ assert_cc(sizeof(int) == sizeof(UINT32));
 #define xallocate_zero_pool(size) ASSERT_SE_PTR(AllocateZeroPool(size))
 #define xreallocate_pool(p, old_size, new_size) ASSERT_SE_PTR(ReallocatePool((p), (old_size), (new_size)))
 #define xpool_print(fmt, ...) ((CHAR16 *) ASSERT_SE_PTR(PoolPrint((fmt), ##__VA_ARGS__)))
-#define xstrdup(str) ((CHAR16 *) ASSERT_SE_PTR(StrDuplicate(str)))
 #define xnew(type, n) xnew_alloc(type, (n), xallocate_pool)
 #define xnew0(type, n) xnew_alloc(type, (n), xallocate_zero_pool)