gfs2-utils: master - gfs2_convert: Don't use a fixed sized buffer for device path

Andrew Price andyp at fedoraproject.org
Mon Oct 13 15:56:33 UTC 2014


Gitweb:        http://git.fedorahosted.org/git/?p=gfs2-utils.git;a=commitdiff;h=eb5d132a99dda1facef6448d9b86fdee98dcf7fa
Commit:        eb5d132a99dda1facef6448d9b86fdee98dcf7fa
Parent:        7d5f1f6069e0b7b9df386175ca85d9d388407fbe
Author:        Andrew Price <anprice at redhat.com>
AuthorDate:    Mon Oct 13 16:10:18 2014 +0100
Committer:     Andrew Price <anprice at redhat.com>
CommitterDate: Mon Oct 13 16:10:18 2014 +0100

gfs2_convert: Don't use a fixed sized buffer for device path

Previously gfs2_convert only allowed for a 255-char device path. Remove
the fixed-size buffer and use the existing device pointer in the options
struct instead.

Signed-off-by: Andrew Price <anprice at redhat.com>
---
 gfs2/convert/gfs2_convert.c |   42 ++++++++++++++++--------------------------
 1 files changed, 16 insertions(+), 26 deletions(-)

diff --git a/gfs2/convert/gfs2_convert.c b/gfs2/convert/gfs2_convert.c
index 750c4df..a92ee80 100644
--- a/gfs2/convert/gfs2_convert.c
+++ b/gfs2/convert/gfs2_convert.c
@@ -98,7 +98,6 @@ struct gfs2_options {
 
 struct gfs_sb  raw_gfs1_ondisk_sb;
 struct gfs2_sbd sb2;
-char device[256];
 struct inode_block dirs_to_fix;  /* linked list of directories to fix */
 struct inode_dir_block cdpns_to_fix; /* linked list of cdpn symlinks */
 int seconds;
@@ -1536,15 +1535,15 @@ static int sanity_check(struct gfs2_sbd *sdp)
 /* init - initialization code                                                */
 /* Returns: 0 on success, -1 on failure                                      */
 /* ------------------------------------------------------------------------- */
-static int init(struct gfs2_sbd *sbp)
+static int init(struct gfs2_sbd *sbp, struct gfs2_options *opts)
 {
 	struct gfs2_buffer_head *bh;
 	int rgcount;
 	struct gfs2_inum inum;
 
 	memset(sbp, 0, sizeof(struct gfs2_sbd));
-	if ((sbp->device_fd = open(device, O_RDWR)) < 0) {
-		perror(device);
+	if ((sbp->device_fd = open(opts->device, O_RDWR)) < 0) {
+		perror(opts->device);
 		exit(-1);
 	}
 	/* --------------------------------- */
@@ -1626,8 +1625,7 @@ static int init(struct gfs2_sbd *sbp)
 		sbp->sd_sb.sb_header.mh_type != GFS_METATYPE_SB ||
 		sbp->sd_sb.sb_header.mh_format != GFS_FORMAT_SB ||
 		sbp->sd_sb.sb_multihost_format != GFS_FORMAT_MULTI) {
-		log_crit(_("Error: %s does not look like a gfs1 filesystem.\n"),
-				device);
+		log_crit(_("Error: %s does not look like a gfs1 filesystem.\n"), opts->device);
 		close(sbp->device_fd);
 		exit(-1);
 	}
@@ -1725,7 +1723,6 @@ static void process_parameters(int argc, char **argv, struct gfs2_options *opts)
 		usage(argv[0]);
 		exit(0);
 	}
-	memset(device, 0, sizeof(device));
 	while((c = getopt(argc, argv, "hnqvyV")) != -1) {
 		switch(c) {
 
@@ -1754,12 +1751,7 @@ static void process_parameters(int argc, char **argv, struct gfs2_options *opts)
 		}
 	}
 	if(argc > optind) {
-		strcpy(device, argv[optind]);
-		opts->device = device;
-		if(!opts->device) {
-			fprintf(stderr, _("No device specified. Please use '-h' for help\n"));
-			exit(1);
-		}
+		opts->device = argv[optind];
 	} else {
 		fprintf(stderr, _("No device specified. Please use '-h' for help\n"));
 		exit(1);
@@ -2166,7 +2158,7 @@ int main(int argc, char **argv)
 
 	version();
 	process_parameters(argc, argv, &opts);
-	error = init(&sb2);
+	error = init(&sb2, &opts);
 
 	/*
 	 * Check for some common fs errors
@@ -2175,7 +2167,7 @@ int main(int argc, char **argv)
 		if (sanity_check(&sb2)) {
 			log_crit(_("%s is not a clean gfs filesytem. Please use the"
 				   " fsck.gfs2 utility to correct these errors and"
-				   " try again.\n"), device);
+				   " try again.\n"), opts.device);
 			exit(0);
 		}
 	}
@@ -2184,8 +2176,8 @@ int main(int argc, char **argv)
 	/* ---------------------------------------------- */
 	if (!error) {
 		give_warning();
-		if (!gfs2_query(&opts, device)) {
-			log_crit(_("%s not converted.\n"), device);
+		if (!gfs2_query(&opts, opts.device)) {
+			log_crit(_("%s not converted.\n"), opts.device);
 			close(sb2.device_fd);
 			exit(0);
 		}
@@ -2199,8 +2191,7 @@ int main(int argc, char **argv)
 		error = convert_rgs(&sb2);
 		log_notice("\n");
 		if (error)
-			log_crit(_("%s: Unable to convert resource groups.\n"),
-					device);
+			log_crit(_("%s: Unable to convert resource groups.\n"), opts.device);
 		fsync(sb2.device_fd); /* write the buffers to disk */
 	}
 	/* ---------------------------------------------- */
@@ -2211,7 +2202,7 @@ int main(int argc, char **argv)
 		error = inode_renumber(&sb2, sb2.sd_sb.sb_root_dir.no_addr,
 				       (osi_list_t *)&cdpns_to_fix);
 		if (error)
-			log_crit(_("\n%s: Error renumbering inodes.\n"), device);
+			log_crit(_("\n%s: Error renumbering inodes.\n"), opts.device);
 		fsync(sb2.device_fd); /* write the buffers to disk */
 	}
 	/* ---------------------------------------------- */
@@ -2224,7 +2215,7 @@ int main(int argc, char **argv)
 			   (unsigned long long)dirents_fixed);
 		fflush(stdout);
 		if (error)
-			log_crit(_("\n%s: Error fixing directories.\n"), device);
+			log_crit(_("\n%s: Error fixing directories.\n"), opts.device);
 	}
 	/* ---------------------------------------------- */
 	/* Convert cdpn symlinks to empty dirs            */
@@ -2235,7 +2226,7 @@ int main(int argc, char **argv)
 			   (unsigned long long)cdpns_fixed);
 		fflush(stdout);
 		if (error)
-			log_crit(_("\n%s: Error fixing cdpn symlinks.\n"), device);
+			log_crit(_("\n%s: Error fixing cdpn symlinks.\n"), opts.device);
 	}
 	/* ---------------------------------------------- */
 	/* Convert journal space to rg space              */
@@ -2244,7 +2235,7 @@ int main(int argc, char **argv)
 		log_notice(_("\nConverting journals.\n"));
 		error = journ_space_to_rg(&sb2);
 		if (error)
-			log_crit(_("%s: Error converting journal space.\n"), device);
+			log_crit(_("%s: Error converting journal space.\n"), opts.device);
 		fsync(sb2.device_fd); /* write the buffers to disk */
 	}
 	/* ---------------------------------------------- */
@@ -2356,10 +2347,9 @@ int main(int argc, char **argv)
 
 		error = fsync(sb2.device_fd);
 		if (error)
-			perror(device);
+			perror(opts.device);
 		else
-			log_notice(_("%s: filesystem converted successfully to gfs2.\n"),
-					   device);
+			log_notice(_("%s: filesystem converted successfully to gfs2.\n"), opts.device);
 	}
 	close(sb2.device_fd);
 	if (sd_jindex)


More information about the cluster-commits mailing list