Merge "e2fsdroid: Correctly process the root inode" am: 702c28b202
am: 33cc4403b5

Change-Id: I5f0e07ab579f0cf5c5728a110f7e454fc2c9df60
diff --git a/contrib/android/e2fsdroid.c b/contrib/android/e2fsdroid.c
index 237df51..e784428 100644
--- a/contrib/android/e2fsdroid.c
+++ b/contrib/android/e2fsdroid.c
@@ -265,10 +265,12 @@
 		case 'u':
 			if (!parse_ugid_map(optarg, &uid_map))
 				exit(EXIT_FAILURE);
+			android_configure = 1;
 			break;
 		case 'g':
 			if (!parse_ugid_map(optarg, &gid_map))
 				exit(EXIT_FAILURE);
+			android_configure = 1;
 			break;
 		default:
 			usage(EXIT_FAILURE);
diff --git a/contrib/android/perms.c b/contrib/android/perms.c
index 546c059..d86249d 100644
--- a/contrib/android/perms.c
+++ b/contrib/android/perms.c
@@ -135,7 +135,12 @@
 
 	/* Permissions */
 	if (params->fs_config_func != NULL) {
-		params->fs_config_func(params->filename, S_ISDIR(inode.i_mode),
+		const char *filename = params->filename;
+		if (strcmp(filename, params->mountpoint) == 0) {
+			/* The root of the filesystem needs to be an empty string. */
+			filename = "";
+		}
+		params->fs_config_func(filename, S_ISDIR(inode.i_mode),
 				       params->target_out, &uid, &gid, &imode,
 				       &capabilities);
 		uid = resolve_ugid(params->uid_map, uid);
@@ -305,10 +310,7 @@
 	if (strlen(mountpoint) == 1 && mountpoint[0] == '/')
 		params.path = "";
 
-	retval = set_selinux_xattr(fs, EXT2_ROOT_INO, &params);
-	if (retval)
-		return retval;
-	retval = set_timestamp(fs, EXT2_ROOT_INO, &params);
+	retval = androidify_inode(fs, EXT2_ROOT_INO, &params);
 	if (retval)
 		return retval;