e2fsdroid: use libselinux function to read file context on device

When e2fsdroid runs on device, location of selinux file contexts
should be determined by libselinux instead of using arbitrary paths.

Bug: 35219933
Change-Id: I413b198422eddb212599498b532ba2c4d8bb36c6
Merged-In: I413b198422eddb212599498b532ba2c4d8bb36c6
diff --git a/contrib/android/perms.c b/contrib/android/perms.c
index 9a7a93f..9ae8e58 100644
--- a/contrib/android/perms.c
+++ b/contrib/android/perms.c
@@ -297,6 +297,7 @@
 	struct selabel_handle *sehnd = NULL;
 
 	/* Retrieve file contexts */
+#if !defined(__ANDROID__)
 	if (nopt > 0) {
 		sehnd = selabel_open(SELABEL_CTX_FILE, seopts, nopt);
 		if (!sehnd) {
@@ -306,6 +307,14 @@
 			return -EINVAL;
 		}
 	}
+#else
+	sehnd = selinux_android_file_context_handle();
+	if (!sehnd) {
+		com_err(__func__, -EINVAL,
+			_("while opening android file_contexts"));
+		return -EINVAL;
+	}
+#endif
 
 	/* Load the FS config */
 	if (fs_config_file) {
diff --git a/contrib/android/perms.h b/contrib/android/perms.h
index 9955bb5..c404cb9 100644
--- a/contrib/android/perms.h
+++ b/contrib/android/perms.h
@@ -25,7 +25,7 @@
 # else
 #  include <selinux/selinux.h>
 #  include <selinux/label.h>
-#  if !defined(HOST)
+#  if defined(__ANDROID__)
 #   include <selinux/android.h>
 #  endif
 #  include <private/android_filesystem_config.h>