1// SPDX-License-Identifier: GPL-2.0+ 2/* 3 * String functions 4 * 5 * Copyright (c) 2020 AKASHI Takahiro, Linaro Limited 6 */ 7 8#include <common.h> 9#include <charset.h> 10#include <efi_loader.h> 11 12/** 13 * efi_create_indexed_name - create a string name with an index 14 * @buffer: Buffer 15 * @name: Name string 16 * @index: Index 17 * 18 * Create a utf-16 string with @name, appending @index. 19 * For example, L"Capsule0001" 20 * 21 * The caller must ensure that the buffer has enough space for the resulting 22 * string including the trailing L'\0'. 23 * 24 * Return: A pointer to the next position after the created string 25 * in @buffer, or NULL otherwise 26 */ 27u16 *efi_create_indexed_name(u16 *buffer, size_t buffer_size, const char *name, 28 unsigned int index) 29{ 30 u16 *p = buffer; 31 char index_buf[5]; 32 size_t size; 33 34 size = (utf8_utf16_strlen(name) * sizeof(u16) + 35 sizeof(index_buf) * sizeof(u16)); 36 if (buffer_size < size) 37 return NULL; 38 utf8_utf16_strcpy(&p, name); 39 snprintf(index_buf, sizeof(index_buf), "%04X", index); 40 utf8_utf16_strcpy(&p, index_buf); 41 42 return p; 43} 44