/* Allocate new memory and concatenate Source on the end of Destination. */
VOID NewStringCat(IN OUT CHAR16 **Dest, IN CHAR16 *Src)
/* Allocate new memory and concatenate Source on the end of Destination. */
VOID NewStringCat(IN OUT CHAR16 **Dest, IN CHAR16 *Src)
{
  CHAR16  *NewHiiString;
  UINTN   MaxLen;
  if (*Dest == NULL) {
    NewStringCopy (Dest, Src);
    return;
  }
  MaxLen       = (StrSize (*Dest) + StrSize (Src) - 2) / sizeof (CHAR16);
  NewHiiString = AllocatePool (MaxLen * sizeof (CHAR16));
  if (NewHiiString == NULL) {
    return;
  }
  StrCpyS (NewHiiString, MaxLen, *Dest);
  StrCatS (NewHiiString, MaxLen, Src);
  FreePool (*Dest);
  *Dest = NewHiiString;
}