Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 76597ff9 authored by Andrei Emeltchenko's avatar Andrei Emeltchenko Committed by Linus Torvalds
Browse files

vsprintf: add %pMR for Bluetooth MAC address



Bluetooth uses mostly LE byte order which is reversed for visual
interpretation.  Currently in Bluetooth in use unsafe batostr function.

This is a slightly modified version of Joe's patch (sent Sat, Dec 4,
2010).

Signed-off-by: default avatarAndrei Emeltchenko <andrei.emeltchenko@intel.com>
Cc: Joe Perches <joe@perches.com>
Cc: Marcel Holtmann <marcel@holtmann.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 61e99ab8
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -56,6 +56,7 @@ Struct Resources:
MAC/FDDI addresses:

	%pM	00:01:02:03:04:05
	%pMR	05:04:03:02:01:00
	%pMF	00-01-02-03-04-05
	%pm	000102030405

@@ -67,6 +68,10 @@ MAC/FDDI addresses:
	the 'M' specifier to use dash ('-') separators instead of the default
	separator.

	For Bluetooth addresses the 'R' specifier shall be used after the 'M'
	specifier to use reversed byte order suitable for visual interpretation
	of Bluetooth addresses which are in the little endian order.

IPv4 addresses:

	%pI4	1.2.3.4
+19 −4
Original line number Diff line number Diff line
@@ -662,15 +662,28 @@ char *mac_address_string(char *buf, char *end, u8 *addr,
	char *p = mac_addr;
	int i;
	char separator;
	bool reversed = false;

	if (fmt[1] == 'F') {		/* FDDI canonical format */
	switch (fmt[1]) {
	case 'F':
		separator = '-';
	} else {
		break;

	case 'R':
		reversed = true;
		/* fall through */

	default:
		separator = ':';
		break;
	}

	for (i = 0; i < 6; i++) {
		if (reversed)
			p = hex_byte_pack(p, addr[5 - i]);
		else
			p = hex_byte_pack(p, addr[i]);

		if (fmt[0] == 'M' && i != 5)
			*p++ = separator;
	}
@@ -933,6 +946,7 @@ int kptr_restrict __read_mostly;
 * - 'm' For a 6-byte MAC address, it prints the hex address without colons
 * - 'MF' For a 6-byte MAC FDDI address, it prints the address
 *       with a dash-separated hex notation
 * - '[mM]R For a 6-byte MAC address, Reverse order (Bluetooth)
 * - 'I' [46] for IPv4/IPv6 addresses printed in the usual way
 *       IPv4 uses dot-separated decimal without leading 0's (1.2.3.4)
 *       IPv6 uses colon separated network-order 16 bit hex with leading 0's
@@ -995,7 +1009,8 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr,
		return resource_string(buf, end, ptr, spec, fmt);
	case 'M':			/* Colon separated: 00:01:02:03:04:05 */
	case 'm':			/* Contiguous: 000102030405 */
					/* [mM]F (FDDI, bit reversed) */
					/* [mM]F (FDDI) */
					/* [mM]R (Reverse order; Bluetooth) */
		return mac_address_string(buf, end, ptr, spec, fmt);
	case 'I':			/* Formatted IP supported
					 * 4:	1.2.3.4