+int manager_parse_server_string(Manager *m, ServerType type, const char *string) {
+ const char *word, *state;
+ size_t length;
+ ServerName *first;
+ int r;
+
+ assert(m);
+ assert(string);
+
+ first = type == SERVER_FALLBACK ? m->fallback_servers : m->system_servers;
+
+ FOREACH_WORD_QUOTED(word, length, string, state) {
+ char buffer[length+1];
+ bool found = false;
+ ServerName *n;
+
+ memcpy(buffer, word, length);
+ buffer[length] = 0;
+
+ /* Filter out duplicates */
+ LIST_FOREACH(names, n, first)
+ if (streq_ptr(n->string, buffer)) {
+ found = true;
+ break;
+ }
+
+ if (found)
+ continue;
+
+ r = server_name_new(m, NULL, type, buffer);
+ if (r < 0)
+ return r;
+ }
+
+ return 0;
+}
+