Merge Android Pie into master

Bug: 112104996
Change-Id: If4a4f3c2e473a2d60d56ee48fe278abfe4e03af0
diff --git a/lib/blkid/dev.c b/lib/blkid/dev.c
index 1d62dd8..d35513e 100644
--- a/lib/blkid/dev.c
+++ b/lib/blkid/dev.c
@@ -13,7 +13,6 @@
 #include "config.h"
 #include <stdlib.h>
 #include <string.h>
-#include <stdint.h>
 
 #include "blkidP.h"
 
diff --git a/lib/blkid/probe.c b/lib/blkid/probe.c
index 865d9aa..0293b90 100644
--- a/lib/blkid/probe.c
+++ b/lib/blkid/probe.c
@@ -1160,6 +1160,37 @@
 	str[j] = '\0';
 }
 
+static void unicode_16le_to_utf8(unsigned char *str, int out_len,
+				 const unsigned char *buf, int in_len)
+{
+	int i, j;
+	unsigned int c;
+
+	for (i = j = 0; i + 2 <= in_len; i += 2) {
+		c = (buf[i+1] << 8) | buf[i];
+		if (c == 0) {
+			str[j] = '\0';
+			break;
+		} else if (c < 0x80) {
+			if (j+1 >= out_len)
+				break;
+			str[j++] = (unsigned char) c;
+		} else if (c < 0x800) {
+			if (j+2 >= out_len)
+				break;
+			str[j++] = (unsigned char) (0xc0 | (c >> 6));
+			str[j++] = (unsigned char) (0x80 | (c & 0x3f));
+		} else {
+			if (j+3 >= out_len)
+				break;
+			str[j++] = (unsigned char) (0xe0 | (c >> 12));
+			str[j++] = (unsigned char) (0x80 | ((c >> 6) & 0x3f));
+			str[j++] = (unsigned char) (0x80 | (c & 0x3f));
+		}
+	}
+	str[j] = '\0';
+}
+
 static int probe_hfs(struct blkid_probe *probe __BLKID_ATTR((unused)),
 			 struct blkid_magic *id __BLKID_ATTR((unused)),
 			 unsigned char *buf)
@@ -1482,7 +1513,9 @@
 
     label = find_exfat_entry_label(probe, sb);
     if (label) {
-        blkid_set_tag(probe->dev, "LABEL", label->name, label->length);
+        char utf8_label[128];
+        unicode_16le_to_utf8(utf8_label, sizeof(utf8_label), label->name, label->length * 2);
+        blkid_set_tag(probe->dev, "LABEL", utf8_label, 0);
     } else {
         blkid_set_tag(probe->dev, "LABEL", "disk", 4);
     }
diff --git a/lib/ext2fs/Makefile.in b/lib/ext2fs/Makefile.in
index 99302ca..25dc450 100644
--- a/lib/ext2fs/Makefile.in
+++ b/lib/ext2fs/Makefile.in
@@ -93,7 +93,6 @@
 	get_pathname.o \
 	getsize.o \
 	getsectsize.o \
-	hashmap.o \
 	i_block.o \
 	icount.o \
 	ind_block.o \
@@ -173,7 +172,6 @@
 	$(srcdir)/get_pathname.c \
 	$(srcdir)/getsize.c \
 	$(srcdir)/getsectsize.c \
-	$(srcdir)/hashmap.c \
 	$(srcdir)/i_block.c \
 	$(srcdir)/icount.c \
 	$(srcdir)/ind_block.c \
diff --git a/misc/blkid.c b/misc/blkid.c
index 96fffae..472f017 100644
--- a/misc/blkid.c
+++ b/misc/blkid.c
@@ -87,7 +87,9 @@
 			fputc('^', stdout);
 			ch ^= 0x40; /* ^@, ^A, ^B; ^? for DEL */
 		}
-		fputc(ch, stdout);
+		if (ch != '"') {
+			fputc(ch, stdout);
+		}
 	}
 }