summary refs log tree commit diff
path: root/fs/fs_parser.c
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2019-12-16 13:45:41 -0500
committerAl Viro <viro@zeniv.linux.org.uk>2020-02-07 14:47:52 -0500
commit34264ae3fa22429ec4fd9151602342d1f21486eb (patch)
tree687392b53b9d246d3ec1193abcade23ad85186b5 /fs/fs_parser.c
parent5eede625297f4d21dc12ea7a7418fd21672f131d (diff)
downloadlinux-34264ae3fa22429ec4fd9151602342d1f21486eb.tar.gz
don't bother with explicit length argument for __lookup_constant()
Have the arrays of constant_table self-terminated (by NULL ->name
in the final entry).  Simplifies lookup_constant() and allows to
reuse the search for enum params as well.

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/fs_parser.c')
-rw-r--r--fs/fs_parser.c33
1 files changed, 18 insertions, 15 deletions
diff --git a/fs/fs_parser.c b/fs/fs_parser.c
index d032ac4a758d..065ce6c22587 100644
--- a/fs/fs_parser.c
+++ b/fs/fs_parser.c
@@ -20,27 +20,31 @@ static const struct constant_table bool_names[] = {
 	{ "no",		false },
 	{ "true",	true },
 	{ "yes",	true },
+	{ },
 };
 
+static const struct constant_table *
+__lookup_constant(const struct constant_table *tbl, const char *name)
+{
+	for ( ; tbl->name; tbl++)
+		if (strcmp(name, tbl->name) == 0)
+			return tbl;
+	return NULL;
+}
+
 /**
  * lookup_constant - Look up a constant by name in an ordered table
  * @tbl: The table of constants to search.
- * @tbl_size: The size of the table.
  * @name: The name to look up.
  * @not_found: The value to return if the name is not found.
  */
-int __lookup_constant(const struct constant_table *tbl, size_t tbl_size,
-		      const char *name, int not_found)
+int lookup_constant(const struct constant_table *tbl, const char *name, int not_found)
 {
-	unsigned int i;
+	const struct constant_table *p = __lookup_constant(tbl, name);
 
-	for (i = 0; i < tbl_size; i++)
-		if (strcmp(name, tbl[i].name) == 0)
-			return tbl[i].value;
-
-	return not_found;
+	return p ? p->value : not_found;
 }
-EXPORT_SYMBOL(__lookup_constant);
+EXPORT_SYMBOL(lookup_constant);
 
 static const struct fs_parameter_spec *fs_lookup_key(
 	const struct fs_parameter_description *desc,
@@ -189,11 +193,10 @@ int fs_parse(struct fs_context *fc,
 		goto maybe_okay;
 
 	case fs_param_is_enum:
-		for (e = p->data; e->name; e++) {
-			if (strcmp(e->name, param->string) == 0) {
-				result->uint_32 = e->value;
-				goto okay;
-			}
+		e = __lookup_constant(p->data, param->string);
+		if (e) {
+			result->uint_32 = e->value;
+			goto okay;
 		}
 		goto bad_value;