]> git.proxmox.com Git - mirror_edk2.git/blobdiff - IntelFrameworkPkg/Library/FrameworkUefiLib/UefiLibPrint.c
SignedCapsulePkg/Include: Add EdkiiSystemCapsuleLib definition.
[mirror_edk2.git] / IntelFrameworkPkg / Library / FrameworkUefiLib / UefiLibPrint.c
index 3f4f4f5f57ec70085a5e0eb3a0bfab335bf27aae..f0dcf9fb25f4fe5165f58c1998c8f4ea64766d8d 100644 (file)
@@ -2,7 +2,7 @@
   Mde UEFI library API implementation.\r
   Print to StdErr or ConOut defined in EFI_SYSTEM_TABLE\r
 \r
-  Copyright (c) 2007 - 2009, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2007 - 2015, Intel Corporation. All rights reserved.<BR>\r
   This program and the accompanying materials\r
   are licensed and made available under the terms and conditions of the BSD License\r
   which accompanies this distribution.  The full text of the license may be found at\r
@@ -623,6 +623,8 @@ PrintXY (
 \r
   PrintNum = UnicodeVSPrint (Buffer, BufferSize, Format, Marker);\r
 \r
+  VA_END (Marker);\r
+\r
   ReturnNum = InternalPrintGraphic (PointX, PointY, ForeGround, BackGround, Buffer, PrintNum);\r
 \r
   FreePool (Buffer);\r
@@ -699,6 +701,8 @@ AsciiPrintXY (
 \r
   PrintNum = UnicodeSPrintAsciiFormat (Buffer, BufferSize, Format, Marker);\r
 \r
+  VA_END (Marker);\r
+\r
   ReturnNum = InternalPrintGraphic (PointX, PointY, ForeGround, BackGround, Buffer, PrintNum);\r
 \r
   FreePool (Buffer);\r
@@ -706,3 +710,106 @@ AsciiPrintXY (
   return ReturnNum;\r
 }\r
 \r
+/** \r
+  Appends a formatted Unicode string to a Null-terminated Unicode string\r
\r
+  This function appends a formatted Unicode string to the Null-terminated \r
+  Unicode string specified by String.   String is optional and may be NULL.\r
+  Storage for the formatted Unicode string returned is allocated using \r
+  AllocatePool().  The pointer to the appended string is returned.  The caller\r
+  is responsible for freeing the returned string.\r
\r
+  If String is not NULL and not aligned on a 16-bit boundary, then ASSERT().\r
+  If FormatString is NULL, then ASSERT().\r
+  If FormatString is not aligned on a 16-bit boundary, then ASSERT().\r
\r
+  @param[in] String         A Null-terminated Unicode string.\r
+  @param[in] FormatString   A Null-terminated Unicode format string.\r
+  @param[in]  Marker        VA_LIST marker for the variable argument list.\r
+\r
+  @retval NULL    There was not enough available memory.\r
+  @return         Null-terminated Unicode string is that is the formatted \r
+                  string appended to String.\r
+**/\r
+CHAR16*\r
+EFIAPI\r
+CatVSPrint (\r
+  IN  CHAR16  *String, OPTIONAL\r
+  IN  CONST CHAR16  *FormatString,\r
+  IN  VA_LIST       Marker\r
+  )\r
+{\r
+  UINTN   CharactersRequired;\r
+  UINTN   SizeRequired;\r
+  CHAR16  *BufferToReturn;\r
+  VA_LIST ExtraMarker;\r
+\r
+  VA_COPY (ExtraMarker, Marker);\r
+  CharactersRequired = SPrintLength(FormatString, ExtraMarker);\r
+  VA_END (ExtraMarker);\r
+\r
+  if (String != NULL) {\r
+    SizeRequired = StrSize(String) + (CharactersRequired * sizeof(CHAR16));\r
+  } else {\r
+    SizeRequired = sizeof(CHAR16) + (CharactersRequired * sizeof(CHAR16));\r
+  }\r
+\r
+  BufferToReturn = AllocatePool(SizeRequired);\r
+\r
+  if (BufferToReturn == NULL) {\r
+    return NULL;\r
+  } else {\r
+    BufferToReturn[0] = L'\0';\r
+  }\r
+\r
+  if (String != NULL) {\r
+    StrCpyS(BufferToReturn, SizeRequired / sizeof(CHAR16), String);\r
+  }\r
+\r
+  UnicodeVSPrint(BufferToReturn + StrLen(BufferToReturn), (CharactersRequired+1) * sizeof(CHAR16), FormatString, Marker);\r
+\r
+  ASSERT(StrSize(BufferToReturn)==SizeRequired);\r
+\r
+  return (BufferToReturn);\r
+}\r
+\r
+/** \r
+  Appends a formatted Unicode string to a Null-terminated Unicode string\r
\r
+  This function appends a formatted Unicode string to the Null-terminated \r
+  Unicode string specified by String.   String is optional and may be NULL.\r
+  Storage for the formatted Unicode string returned is allocated using \r
+  AllocatePool().  The pointer to the appended string is returned.  The caller\r
+  is responsible for freeing the returned string.\r
\r
+  If String is not NULL and not aligned on a 16-bit boundary, then ASSERT().\r
+  If FormatString is NULL, then ASSERT().\r
+  If FormatString is not aligned on a 16-bit boundary, then ASSERT().\r
\r
+  @param[in] String         A Null-terminated Unicode string.\r
+  @param[in] FormatString   A Null-terminated Unicode format string.\r
+  @param[in] ...            The variable argument list whose contents are \r
+                            accessed based on the format string specified by \r
+                            FormatString.\r
+\r
+  @retval NULL    There was not enough available memory.\r
+  @return         Null-terminated Unicode string is that is the formatted \r
+                  string appended to String.\r
+**/\r
+CHAR16 *\r
+EFIAPI\r
+CatSPrint (\r
+  IN  CHAR16  *String, OPTIONAL\r
+  IN  CONST CHAR16  *FormatString,\r
+  ...\r
+  )\r
+{\r
+  VA_LIST   Marker;\r
+  CHAR16    *NewString;\r
+\r
+  VA_START (Marker, FormatString);\r
+  NewString = CatVSPrint(String, FormatString, Marker);\r
+  VA_END (Marker);\r
+  return NewString;\r
+}\r
+\r