diff options
-rw-r--r-- | src/Permission.cxx | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/src/Permission.cxx b/src/Permission.cxx index a703a9465..a35c80e94 100644 --- a/src/Permission.cxx +++ b/src/Permission.cxx @@ -24,16 +24,15 @@ #include "ConfigOption.hxx" #include "system/FatalError.hxx" +#include <algorithm> #include <map> #include <string> -#include <glib.h> - #include <assert.h> #include <string.h> static constexpr char PERMISSION_PASSWORD_CHAR = '@'; -#define PERMISSION_SEPERATOR "," +static constexpr char PERMISSION_SEPARATOR = ','; static constexpr struct { const char *name; @@ -65,17 +64,23 @@ static unsigned parsePermissions(const char *string) { assert(string != nullptr); - unsigned permission = 0; - gchar **tokens; + const char *const end = string + strlen(string); - tokens = g_strsplit(string, PERMISSION_SEPERATOR, 0); - for (unsigned i = 0; tokens[i] != NULL; ++i) { - char *temp = tokens[i]; - permission |= ParsePermission(temp); + unsigned permission = 0; + while (true) { + const char *comma = std::find(string, end, + PERMISSION_SEPARATOR); + if (comma > string) { + const std::string name(string, comma); + permission |= ParsePermission(name.c_str()); + } + + if (comma == end) + break; + + string = comma + 1; } - g_strfreev(tokens); - return permission; } |