| .. SPDX-License-Identifier: GPL-2.0+ | |
| Printf() format codes | |
| ===================== | |
| Each conversion specification consists of: | |
| * leading '%' character | |
| * zero or more flags | |
| * an optional minimum field width | |
| * an optional precision field preceded by '.' | |
| * an optional length modifier | |
| * a conversion specifier | |
| Flags | |
| ----- | |
| 'space' | |
| fill up with spaces to reach the specified length | |
| \- | |
| left justify | |
| \+ | |
| add sign field of decimal conversion | |
| # | |
| convert to alternative form | |
| * prepend 0 to octal output | |
| * ignored for decimal output | |
| * prepend 0X to hexadecimal output | |
| 0 | |
| fill up with zeroes to reach the specified length | |
| Integer types | |
| ------------- | |
| Length modifiers | |
| '''''''''''''''' | |
| The optional length modifier specifies the size of the argument. | |
| no modifier | |
| bool, enum, short, int are passed as int | |
| %h | |
| convert to (unsigned) short before printing. | |
| Only the low 16 bits are printed. | |
| %hh | |
| **not implemented** | |
| %j | |
| **not implemented** | |
| %l | |
| long | |
| %ll, %L | |
| long long | |
| %t | |
| ptr_diff_t | |
| %z, %Z | |
| size_t, ssize_t | |
| Conversion specifiers | |
| ''''''''''''''''''''' | |
| Conversion specifiers control the output. | |
| %d | |
| signed decimal | |
| %u | |
| unsigned decimal | |
| %o | |
| unsigned octal | |
| %x | |
| unsigned lower case hexadecimal | |
| %X | |
| unsigned upper case hexadecimal | |
| The floating point conversion specifiers are not implemented: | |
| * %a | |
| * %A | |
| * %e | |
| * %E | |
| * %f | |
| * %F | |
| * %g | |
| * %G | |
| The following tables shows the correct combinations of modifiers and specifiers | |
| for the individual integer types. | |
| =================== ================== | |
| Type Format specifier | |
| =================== ================== | |
| bool %d, %x | |
| char %d, %x | |
| unsigned char %u, %x | |
| short %d, %x | |
| unsigned short %u, %x | |
| int %d, %x | |
| unsigned int %u, %x | |
| long %ld, %lx | |
| unsigned long %lu, %lx | |
| long long %lld, %llx | |
| unsigned long long %llu, %llx | |
| off_t %llu, %llx | |
| ptr_diff_t %td, %tx | |
| fdt_addr_t %pa, see pointers | |
| fdt_size_t %pa, see pointers | |
| phys_addr_t %pa, see pointers | |
| phys_size_t %pa, see pointers | |
| resource_size_t %pa, see pointers | |
| size_t %zu, %zx, %zX | |
| ssize_t %zd, %zx, %zX | |
| =================== ================== | |
| Characters | |
| ---------- | |
| %% | |
| a '%' character is written | |
| %c | |
| prints a single character | |
| %lc | |
| **not implemented** | |
| Strings | |
| ------- | |
| %s | |
| prints a UTF-8 string (char \*) | |
| %ls | |
| prints a UTF-16 string (u16 \*) | |
| Pointers | |
| -------- | |
| %p | |
| prints the address the pointer points to hexadecimally | |
| %pa, %pap | |
| prints the value of a phys_addr_t value that the pointer points to | |
| preceded with 0x and zero padding according to the size of phys_addr_t. | |
| The following types should be printed this way: | |
| * fdt_addr_t | |
| * fdt_size_t | |
| * phys_addr_t | |
| * phys_size_t | |
| * resource_size_t | |
| %pD | |
| prints a UEFI device path | |
| %pi4, %pI4 | |
| prints IPv4 address, e.g. '192.168.0.1' | |
| %pm | |
| prints MAC address without separators, e.g. '001122334455' | |
| %pM | |
| print MAC address colon separated, e.g. '00:01:02:03:04:05' | |
| %pUb | |
| prints GUID big endian, lower case | |
| e.g. '00112233-4455-6677-8899-aabbccddeeff' | |
| %pUB | |
| prints GUID big endian, upper case | |
| e.g. '00112233-4455-6677-8899-AABBCCDDEEFF' | |
| %pUl | |
| prints GUID little endian, lower case | |
| e.g. '33221100-5544-7766-8899-aabbccddeeff' | |
| %pUL | |
| prints GUID little endian, upper case | |
| e.g. '33221100-5544-7766-8899-AABBCCDDEEFF' | |
| %pUs | |
| prints text description of a GUID or if such is not known little endian, | |
| lower case, e.g. 'system' for a GUID identifying an EFI system | |
| partition. |