/* Allocate new memory and concatinate Source on the end of Destination. */
VOID NewStringCat(IN OUT CHAR16 **Dest, IN CHAR16 *Src)
/* Allocate new memory and concatinate Source on the end of Destination. */
VOID NewStringCat(IN OUT CHAR16 **Dest, IN CHAR16 *Src)
{
  CHAR16  *NewString;
  UINTN   MaxLen;
  if (*Dest == NULL) {
    NewStringCpy (Dest, Src);
    return;
  }
  MaxLen    = (StrSize (*Dest) + StrSize (Src) - 1) / sizeof (CHAR16);
  NewString = AllocateZeroPool (MaxLen * sizeof (CHAR16));
  ASSERT (NewString != NULL);
  StrCpyS (NewString, MaxLen, *Dest);
  StrCatS (NewString, MaxLen, Src);
  FreePool (*Dest);
  *Dest = NewString;
}