From 910fbac9acc7f1ba0a1641cfa85e8ed0b96e94cb Mon Sep 17 00:00:00 2001
From: Bernhard Rosenkraenzer <bero@arklinux.ch>
Date: Fri, 4 Feb 2011 10:31:14 +0059
Subject: [PATCH] Add a --force option

---
 mkfs.c |   47 ++++++++++++++++++++++++++++-------------------
 1 files changed, 28 insertions(+), 19 deletions(-)

diff --git a/mkfs.c b/mkfs.c
index 2e99b95..2fa8be8 100644
--- a/mkfs.c
+++ b/mkfs.c
@@ -271,6 +271,7 @@ static void print_usage(void)
 	fprintf(stderr, "\t -A --alloc-start the offset to start the FS\n");
 	fprintf(stderr, "\t -b --byte-count total number of bytes in the FS\n");
 	fprintf(stderr, "\t -d --data data profile, raid0, raid1, raid10 or single\n");
+	fprintf(stderr, "\t -f --force bypass check if the device is already mounted\n");
 	fprintf(stderr, "\t -l --leafsize size of btree leaves\n");
 	fprintf(stderr, "\t -L --label set a label\n");
 	fprintf(stderr, "\t -m --metadata metadata profile, values like data profile\n");
@@ -332,6 +333,7 @@ static struct option long_options[] = {
 	{ "sectorsize", 1, NULL, 's' },
 	{ "data", 1, NULL, 'd' },
 	{ "version", 0, NULL, 'V' },
+	{ "force", 0, NULL, 'f' },
 	{ 0, 0, 0, 0}
 };
 
@@ -358,10 +360,11 @@ int main(int ac, char **av)
 	int first_fd;
 	int ret;
 	int i;
+	int force = 0;
 
 	while(1) {
 		int c;
-		c = getopt_long(ac, av, "A:b:l:n:s:m:d:L:V", long_options,
+		c = getopt_long(ac, av, "A:b:l:n:s:m:d:L:Vf", long_options,
 				&option_index);
 		if (c < 0)
 			break;
@@ -401,6 +404,9 @@ int main(int ac, char **av)
 			case 'V':
 				print_version();
 				break;
+			case 'f':
+				force = 1;
+				break;
 			default:
 				print_usage();
 		}
@@ -423,13 +429,15 @@ int main(int ac, char **av)
 
 	file = av[optind++];
 	ret = check_mounted(file);
-	if (ret < 0) {
-		fprintf(stderr, "error checking %s mount status\n", file);
-		exit(1);
-	}
-	if (ret == 1) {
-		fprintf(stderr, "%s is mounted\n", file);
-		exit(1);
+	if (!force) {
+		if (ret < 0) {
+			fprintf(stderr, "error checking %s mount status\n", file);
+			exit(1);
+		}
+		if (ret == 1) {
+			fprintf(stderr, "%s is mounted\n", file);
+			exit(1);
+		}
 	}
 	ac--;
 	fd = open(file, O_RDWR);
@@ -479,16 +487,18 @@ int main(int ac, char **av)
 	zero_end = 1;
 	while(ac-- > 0) {
 		file = av[optind++];
-		ret = check_mounted(file);
-		if (ret < 0) {
-			fprintf(stderr, "error checking %s mount status\n",
-				file);
-			exit(1);
-		}
-		if (ret == 1) {
-			fprintf(stderr, "%s is mounted\n", file);
-			exit(1);
-		}
+		if (!force) {
+			ret = check_mounted(file);
+			if (ret < 0) {
+				fprintf(stderr, "error checking %s mount status\n",
+					file);
+				exit(1);
+			}
+			if (ret == 1) {
+				fprintf(stderr, "%s is mounted\n", file);
+				exit(1);
+			}
+		}	
 		fd = open(file, O_RDWR);
 		if (fd < 0) {
 			fprintf(stderr, "unable to open %s\n", file);
@@ -534,4 +544,3 @@ raid_groups:
 	free(label);
 	return 0;
 }
-
-- 
1.7.3

