Add verbose option to make_ext4 command

Enabeling the -v switch will cuase the
make_ext4 command to output the selinux
labeling context for all files.

Change-Id: Ifae8a11eb2c3f4644873d9784affffafb27775bf
diff --git a/ext4_utils/ext4_utils.h b/ext4_utils/ext4_utils.h
index 520b356..26952c0 100644
--- a/ext4_utils/ext4_utils.h
+++ b/ext4_utils/ext4_utils.h
@@ -175,7 +175,7 @@
 int make_ext4fs_internal(int fd, const char *directory,
                          const char *mountpoint, fs_config_func_t fs_config_func, int gzip,
                          int sparse, int crc, int wipe, int init_itabs,
-                         struct selabel_handle *sehnd);
+                         struct selabel_handle *sehnd, int verbose);
 
 #ifdef __cplusplus
 }
diff --git a/ext4_utils/make_ext4fs.c b/ext4_utils/make_ext4fs.c
index e69b473..5c1003d 100644
--- a/ext4_utils/make_ext4fs.c
+++ b/ext4_utils/make_ext4fs.c
@@ -109,7 +109,7 @@
    if the image were mounted at the specified mount point */
 static u32 build_directory_structure(const char *full_path, const char *dir_path,
 		u32 dir_inode, fs_config_func_t fs_config_func,
-		struct selabel_handle *sehnd)
+		struct selabel_handle *sehnd, int verbose)
 {
 	int entries = 0;
 	struct dentry *dentries;
@@ -183,11 +183,9 @@
 			if (selabel_lookup(sehnd, &dentries[i].secon, dentries[i].path, stat.st_mode) < 0) {
 				error("cannot lookup security context for %s", dentries[i].path);
 			}
-#if 0
-			// TODO make this a debug flag
-			if (dentries[i].secon)
+
+			if (dentries[i].secon && verbose)
 				printf("Labeling %s as %s\n", dentries[i].path, dentries[i].secon);
-#endif
 		}
 #endif
 
@@ -256,7 +254,7 @@
 			if (ret < 0)
 				critical_error_errno("asprintf");
 			entry_inode = build_directory_structure(subdir_full_path,
-					subdir_dir_path, inode, fs_config_func, sehnd);
+					subdir_dir_path, inode, fs_config_func, sehnd, verbose);
 			free(subdir_full_path);
 			free(subdir_dir_path);
 		} else if (dentries[i].file_type == EXT4_FT_SYMLINK) {
@@ -363,7 +361,7 @@
 	reset_ext4fs_info();
 	info.len = len;
 
-	return make_ext4fs_internal(fd, NULL, mountpoint, NULL, 0, 1, 0, 0, 0, sehnd);
+	return make_ext4fs_internal(fd, NULL, mountpoint, NULL, 0, 1, 0, 0, 0, sehnd, 0);
 }
 
 int make_ext4fs(const char *filename, long long len,
@@ -381,7 +379,7 @@
 		return EXIT_FAILURE;
 	}
 
-	status = make_ext4fs_internal(fd, NULL, mountpoint, NULL, 0, 0, 0, 1, 0, sehnd);
+	status = make_ext4fs_internal(fd, NULL, mountpoint, NULL, 0, 0, 0, 1, 0, sehnd, 0);
 	close(fd);
 
 	return status;
@@ -447,7 +445,7 @@
 int make_ext4fs_internal(int fd, const char *_directory,
                          const char *_mountpoint, fs_config_func_t fs_config_func, int gzip,
                          int sparse, int crc, int wipe, int init_itabs,
-                         struct selabel_handle *sehnd)
+                         struct selabel_handle *sehnd, int verbose)
 {
 	u32 root_inode_num;
 	u16 root_mode;
@@ -555,7 +553,7 @@
 #else
 	if (directory)
 		root_inode_num = build_directory_structure(directory, mountpoint, 0,
-                        fs_config_func, sehnd);
+                        fs_config_func, sehnd, verbose);
 	else
 		root_inode_num = build_default_directory_structure();
 #endif
@@ -570,7 +568,7 @@
 		if (selabel_lookup(sehnd, &secontext, mountpoint, S_IFDIR) < 0) {
 			error("cannot lookup security context for %s", mountpoint);
 		}
-		if (secontext) {
+		if (secontext && verbose) {
 			printf("Labeling %s as %s\n", mountpoint, secontext);
 			inode_set_selinux(root_inode_num, secontext);
 		}
diff --git a/ext4_utils/make_ext4fs_main.c b/ext4_utils/make_ext4fs_main.c
index 71fc3c1..739c4a1 100644
--- a/ext4_utils/make_ext4fs_main.c
+++ b/ext4_utils/make_ext4fs_main.c
@@ -53,7 +53,7 @@
 	fprintf(stderr, "    [ -g <blocks per group> ] [ -i <inodes> ] [ -I <inode size> ]\n");
 	fprintf(stderr, "    [ -L <label> ] [ -f ] [ -a <android mountpoint> ]\n");
 	fprintf(stderr, "    [ -S file_contexts ]\n");
-	fprintf(stderr, "    [ -z | -s ] [ -t ] [ -w ] [ -c ] [ -J ]\n");
+	fprintf(stderr, "    [ -z | -s ] [ -t ] [ -w ] [ -c ] [ -J ] [ -v ]\n");
 	fprintf(stderr, "    <filename> [<directory>]\n");
 }
 
@@ -71,12 +71,13 @@
 	int init_itabs = 0;
 	int fd;
 	int exitcode;
+	int verbose = 0;
 	struct selabel_handle *sehnd = NULL;
 #ifndef USE_MINGW
 	struct selinux_opt seopts[] = { { SELABEL_OPT_PATH, "" } };
 #endif
 
-	while ((opt = getopt(argc, argv, "l:j:b:g:i:I:L:a:fwzJsctS:")) != -1) {
+	while ((opt = getopt(argc, argv, "l:j:b:g:i:I:L:a:S:fwzJsctv")) != -1) {
 		switch (opt) {
 		case 'l':
 			info.len = parse_num(optarg);
@@ -140,6 +141,9 @@
 			}
 #endif
 			break;
+		case 'v':
+			verbose = 1;
+			break;
 		default: /* '?' */
 			usage(argv[0]);
 			exit(EXIT_FAILURE);
@@ -198,7 +202,7 @@
 	}
 
 	exitcode = make_ext4fs_internal(fd, directory, mountpoint, fs_config_func, gzip,
-			sparse, crc, wipe, init_itabs, sehnd);
+			sparse, crc, wipe, init_itabs, sehnd, verbose);
 	close(fd);
 
 	return exitcode;