diff --git a/src/Permission.cxx b/src/Permission.cxx
index dda13895a..6e613dcc1 100644
--- a/src/Permission.cxx
+++ b/src/Permission.cxx
@@ -22,6 +22,7 @@
 #include "config/Param.hxx"
 #include "config/Data.hxx"
 #include "config/Option.hxx"
+#include "util/IterableSplitString.hxx"
 #include "util/RuntimeError.hxx"
 #include "util/StringView.hxx"
 
@@ -69,21 +70,11 @@ static unsigned parsePermissions(const char *string)
 {
 	assert(string != nullptr);
 
-	const char *const end = string + strlen(string);
-
 	unsigned permission = 0;
-	while (true) {
-		const char *comma = std::find(string, end,
-					      PERMISSION_SEPARATOR);
-		if (comma > string) {
-			permission |= ParsePermission({string, comma});
-		}
 
-		if (comma == end)
-			break;
-
-		string = comma + 1;
-	}
+	for (const auto i : IterableSplitString(string, PERMISSION_SEPARATOR))
+		if (!i.empty())
+			permission |= ParsePermission(i);
 
 	return permission;
 }