]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Enhance the string formatting function to take "%p" to print pointer.
authorqwang12 <qwang12@6f19259b-4bc3-4df7-8a09-765794883524>
Wed, 23 Jul 2008 07:07:07 +0000 (07:07 +0000)
committerqwang12 <qwang12@6f19259b-4bc3-4df7-8a09-765794883524>
Wed, 23 Jul 2008 07:07:07 +0000 (07:07 +0000)
    'p' - arugment is VOID *; printed as hex number

Example is :

  ASPrint (Buffer, 1024, "This is a %p\n", SystemTable);

  ASPrint (Buffer, 1024, "This is a %10p\n", SystemTable);

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@5554 6f19259b-4bc3-4df7-8a09-765794883524

EdkCompatibilityPkg/Foundation/Library/Dxe/Graphics/Print.c
EdkCompatibilityPkg/Foundation/Library/Dxe/Print/Print.c
EdkCompatibilityPkg/Foundation/Library/Pei/PeiLib/Print/Print.c

index 4e0980a1fc71cc02fc5a4482c97e602ce9432810..2ed4eeca23d95c338d0046f207e7186c46360aa4 100644 (file)
@@ -573,6 +573,27 @@ Returns:
       //\r
       Format = GetFlagsAndWidth (Format, &Flags, &Width, &Marker);\r
       switch (*Format) {\r
+      case 'p':\r
+        //\r
+        // Flag space, +, 0, L & l are invalid for type p.\r
+        //\r
+        Flags &= ~(PREFIX_BLANK| PREFIX_SIGN | LONG_TYPE);\r
+        if (sizeof (VOID *) > 4) {\r
+          Flags |= LONG_TYPE;\r
+          Value = VA_ARG (Marker, UINT64);\r
+        } else {\r
+          Value = VA_ARG (Marker, UINTN);\r
+        }\r
+        Flags |= PREFIX_ZERO;\r
+      \r
+        EfiValueToHexStr (TempBuffer, Value, Flags, Width);\r
+        UnicodeStr = TempBuffer;\r
+      \r
+        for ( ;(*UnicodeStr != '\0') && (Index < NumberOfCharacters - 1); UnicodeStr++) {\r
+          Buffer[Index++] = *UnicodeStr;\r
+        }\r
+        break;\r
+        \r
       case 'X':\r
         Flags |= PREFIX_ZERO;\r
         Width = sizeof (UINT64) * 2;\r
index b4f9a740ce3ff358bcebdb2a374ab5f6be6580e6..f72cac41caf808ec9cf4b7e9821e4c45234edb6c 100644 (file)
@@ -39,6 +39,7 @@ Abstract:
     Decimal number that represents width of print\r
 \r
   type:\r
+    'p' - arugment is VOID *; printed as hex number\r
     'X' - argument is a UINTN hex number, prefix '0'\r
     'x' - argument is a hex number\r
     'd' - argument is a decimal number\r
@@ -206,6 +207,27 @@ Returns:
       //\r
       Format = GetFlagsAndWidth (Format, &Flags, &Width, &Marker);\r
       switch (*Format) {\r
+      case 'p':\r
+        //\r
+        // Flag space, +, 0, L & l are invalid for type p.\r
+        //\r
+        Flags &= ~(PREFIX_BLANK| PREFIX_SIGN | LONG_TYPE);\r
+        if (sizeof (VOID *) > 4) {\r
+          Flags |= LONG_TYPE;\r
+          Value = VA_ARG (Marker, UINT64);\r
+        } else {\r
+          Value = VA_ARG (Marker, UINTN);\r
+        }\r
+        Flags |= PREFIX_ZERO;\r
+\r
+        EfiValueToHexStr (TempBuffer, Value, Flags, Width);\r
+        UnicodeStr = TempBuffer;\r
+\r
+        for ( ;(*UnicodeStr != '\0') && (Index < NumberOfCharacters - 1); UnicodeStr++) {\r
+          Buffer[Index++] = *UnicodeStr;\r
+        }\r
+        break;\r
+        \r
       case 'X':\r
         Flags |= PREFIX_ZERO;\r
         Width = sizeof (UINT64) * 2;\r
index 458bb9ce4abd3343c244c759d044af0c14689e70..c35b830b5122b3aa74b45b62a909f32f4014b835 100644 (file)
@@ -39,6 +39,7 @@ Abstract:
     Decimal number that represents width of print\r
 \r
   type:\r
+    'p' - arugment is VOID *; printed as hex number\r
     'X' - argument is a UINTN hex number, prefix '0'\r
     'x' - argument is a hex number\r
     'd' - argument is a decimal number\r
@@ -220,6 +221,26 @@ Returns:
       //\r
       Format = GetFlagsAndWidth (Format, &Flags, &Width, &Marker);\r
       switch (*Format) {\r
+      case 'p':\r
+        //\r
+        // Flag space, +, 0, L & l are invalid for type p.\r
+        //\r
+        Flags &= ~(PREFIX_BLANK| PREFIX_SIGN | LONG_TYPE);\r
+        if (sizeof (VOID *) > 4) {\r
+          Flags |= LONG_TYPE;\r
+          Value = VA_ARG (Marker, UINT64);\r
+        } else {\r
+          Value = VA_ARG (Marker, UINTN);\r
+        }\r
+        Flags |= PREFIX_ZERO;\r
+      \r
+        ValueTomHexStr (TempBuffer, Value, Flags, Width);\r
+        AsciiStr = TempBuffer;\r
+\r
+        for (; (*AsciiStr != '\0') && (Index < BufferSize - 1); AsciiStr++) {\r
+          Buffer[Index++] = *AsciiStr;\r
+        }\r
+        break;\r
       case 'X':\r
         Flags |= PREFIX_ZERO;\r
         Width = sizeof (UINT64) * 2;\r