[Ocfs2-tools-devel] [PATCH 18/32] libocfs2: Cleanup flag name printing in feature_string.c

Sunil Mushran sunil.mushran at oracle.com
Tue Sep 14 15:54:48 PDT 2010


A lot of code is duplicated in flag name printing. This patch crunches
up the code without changing the external interface.

Signed-off-by: Sunil Mushran <sunil.mushran at oracle.com>
Signed-off-by: Joel Becker <joel.becker at oracle.com>
---
 libocfs2/feature_string.c |  153 +++++++++++----------------------------------
 1 files changed, 38 insertions(+), 115 deletions(-)

diff --git a/libocfs2/feature_string.c b/libocfs2/feature_string.c
index 77a6def..0f3dcf8 100644
--- a/libocfs2/feature_string.c
+++ b/libocfs2/feature_string.c
@@ -43,21 +43,9 @@ struct feature_name {
 						   feature */
 };
 
-struct tunefs_flag_name {
-	const char	*tfn_name;
-	uint16_t	tfn_flag;
-};
-
-/* Printable names for extent flags */
-struct extent_flag_name {
-	const char	*efn_name;
-	uint8_t		efn_flag;
-};
-
-/* Printable names for refcount flags */
-struct refcount_flag_name {
-	const char	*rfn_name;
-	uint32_t	rfn_flag;
+struct flag_name {
+	const char		*fl_name;
+	uint32_t		fl_flag;
 };
 
 struct feature_level_translation {
@@ -290,17 +278,17 @@ static struct feature_name ocfs2_feature_names[] = {
  *
  * These MUST be kept in sync with the flags in ocfs2_fs.h.
  */
-static struct tunefs_flag_name ocfs2_tunefs_flag_names[] = {
+static struct flag_name ocfs2_tunefs_flag_names[] = {
 	{
-		.tfn_name = "remove-slot",
-		.tfn_flag = OCFS2_TUNEFS_INPROG_REMOVE_SLOT,
+		.fl_name = "remove-slot",
+		.fl_flag = OCFS2_TUNEFS_INPROG_REMOVE_SLOT,
 	},
 	{
-		.tfn_name = "dir-trailer",
-		.tfn_flag = OCFS2_TUNEFS_INPROG_DIR_TRAILER,
+		.fl_name = "dir-trailer",
+		.fl_flag = OCFS2_TUNEFS_INPROG_DIR_TRAILER,
 	},
 	{
-		.tfn_name = NULL,
+		.fl_name = NULL,
 	},
 };
 
@@ -310,17 +298,17 @@ static struct tunefs_flag_name ocfs2_tunefs_flag_names[] = {
  *
  * These MUST be kept in sync with the flags in ocfs2_fs.h.
  */
-static struct extent_flag_name ocfs2_extent_flag_names[] = {
+static struct flag_name ocfs2_extent_flag_names[] = {
 	{
-		.efn_name = "Unwritten",
-		.efn_flag = OCFS2_EXT_UNWRITTEN,
+		.fl_name = "Unwritten",
+		.fl_flag = OCFS2_EXT_UNWRITTEN,
 	},
 	{
-		.efn_name = "Refcounted",
-		.efn_flag = OCFS2_EXT_REFCOUNTED,
+		.fl_name = "Refcounted",
+		.fl_flag = OCFS2_EXT_REFCOUNTED,
 	},
 	{
-		.efn_name = NULL,
+		.fl_name = NULL,
 	},
 };
 
@@ -330,17 +318,17 @@ static struct extent_flag_name ocfs2_extent_flag_names[] = {
  *
  * These MUST be kept in sync with the flags in ocfs2_fs.h.
  */
-static struct refcount_flag_name ocfs2_refcount_flag_names[] = {
+static struct flag_name ocfs2_refcount_flag_names[] = {
 	{
-		.rfn_name = "Leaf",
-		.rfn_flag = OCFS2_REFCOUNT_LEAF_FL,
+		.fl_name = "Leaf",
+		.fl_flag = OCFS2_REFCOUNT_LEAF_FL,
 	},
 	{
-		.rfn_name = "Tree",
-		.rfn_flag = OCFS2_REFCOUNT_TREE_FL,
+		.fl_name = "Tree",
+		.fl_flag = OCFS2_REFCOUNT_TREE_FL,
 	},
 	{
-		.rfn_name = NULL,
+		.fl_name = NULL,
 	},
 };
 
@@ -446,7 +434,9 @@ errcode_t ocfs2_snprint_feature_flags(char *str, size_t size,
 	return err;
 }
 
-errcode_t ocfs2_snprint_tunefs_flags(char *str, size_t size, uint16_t flags)
+static errcode_t ocfs2_snprint_flag_names(struct flag_name *flag_names,
+					  char *str, size_t size,
+					  uint32_t flags)
 {
 	int i, printed;
 	char *ptr = str;
@@ -455,14 +445,14 @@ errcode_t ocfs2_snprint_tunefs_flags(char *str, size_t size, uint16_t flags)
 	char *sep = " ";
 	uint16_t found = 0;
 
-	for (i = 0; ocfs2_tunefs_flag_names[i].tfn_name; i++) {
-		if (!(flags & ocfs2_tunefs_flag_names[i].tfn_flag))
+	for (i = 0; flag_names[i].fl_name; i++) {
+		if (!(flags & flag_names[i].fl_flag))
 			continue;
-		found |= ocfs2_tunefs_flag_names[i].tfn_flag;
+		found |= flag_names[i].fl_flag;
 
 		printed = snprintf(ptr, remain, "%s%s",
 				   ptr == str ? "" : sep,
-				   ocfs2_tunefs_flag_names[i].tfn_name);
+				   flag_names[i].fl_name);
 		if (printed < 0)
 			err = OCFS2_ET_INTERNAL_FAILURE;
 		else if (printed >= remain)
@@ -488,91 +478,24 @@ errcode_t ocfs2_snprint_tunefs_flags(char *str, size_t size, uint16_t flags)
 	return err;
 }
 
-errcode_t ocfs2_snprint_extent_flags(char *str, size_t size, uint8_t flags)
+errcode_t ocfs2_snprint_tunefs_flags(char *str, size_t size, uint16_t flags)
 {
-	int i, printed;
-	char *ptr = str;
-	size_t remain = size;
-	errcode_t err = 0;
-	char *sep = " ";
-	uint8_t found = 0;
-
-	for (i = 0; ocfs2_extent_flag_names[i].efn_name; i++) {
-		if (!(flags & ocfs2_extent_flag_names[i].efn_flag))
-			continue;
-		found |= ocfs2_extent_flag_names[i].efn_flag;
-
-		printed = snprintf(ptr, remain, "%s%s",
-				   ptr == str ? "" : sep,
-				   ocfs2_extent_flag_names[i].efn_name);
-		if (printed < 0)
-			err = OCFS2_ET_INTERNAL_FAILURE;
-		else if (printed >= remain)
-			err = OCFS2_ET_NO_SPACE;
-		if (err)
-			break;
-
-		remain -= printed;
-		ptr += printed;
-	}
-
-	if (!err) {
-		if (found != flags) {
-			printed = snprintf(ptr, remain, "%sUnknown",
-					   ptr == str ? "" : sep);
-			if (printed < 0)
-				err = OCFS2_ET_INTERNAL_FAILURE;
-			else if (printed >= remain)
-				err = OCFS2_ET_NO_SPACE;
-		}
-	}
+	return ocfs2_snprint_flag_names(ocfs2_tunefs_flag_names,
+					str, size, (uint32_t)flags);
+}
 
-	return err;
+errcode_t ocfs2_snprint_extent_flags(char *str, size_t size, uint8_t flags)
+{
+	return ocfs2_snprint_flag_names(ocfs2_extent_flag_names,
+					str, size, (uint32_t)flags);
 }
 
 errcode_t ocfs2_snprint_refcount_flags(char *str, size_t size, uint8_t flags)
 {
-	int i, printed;
-	char *ptr = str;
-	size_t remain = size;
-	errcode_t err = 0;
-	char *sep = " ";
-	uint8_t found = 0;
-
-	for (i = 0; ocfs2_refcount_flag_names[i].rfn_name; i++) {
-		if (!(flags & ocfs2_refcount_flag_names[i].rfn_flag))
-			continue;
-		found |= ocfs2_refcount_flag_names[i].rfn_flag;
-
-		printed = snprintf(ptr, remain, "%s%s",
-				   ptr == str ? "" : sep,
-				   ocfs2_refcount_flag_names[i].rfn_name);
-		if (printed < 0)
-			err = OCFS2_ET_INTERNAL_FAILURE;
-		else if (printed >= remain)
-			err = OCFS2_ET_NO_SPACE;
-		if (err)
-			break;
-
-		remain -= printed;
-		ptr += printed;
-	}
-
-	if (!err) {
-		if (found != flags) {
-			printed = snprintf(ptr, remain, "%sUnknown",
-					   ptr == str ? "" : sep);
-			if (printed < 0)
-				err = OCFS2_ET_INTERNAL_FAILURE;
-			else if (printed >= remain)
-				err = OCFS2_ET_NO_SPACE;
-		}
-	}
-
-	return err;
+	return ocfs2_snprint_flag_names(ocfs2_refcount_flag_names,
+					str, size, (uint32_t)flags);
 }
 
-
 /*
  * If we are asked to clear a feature, we also need to clear any other
  * features that depend on it.
-- 
1.7.0.4




More information about the Ocfs2-tools-devel mailing list