+/*
+ * Return next file in the string. Files are separated with ':'. If the ':'
+ * is escaped with a '\', then that ':' is part of the filename and does not
+ * indicate a new file.
+ */
+static char *get_next_file_name(char **ptr)
+{
+ char *str = *ptr;
+ char *p, *start;
+
+ if (!str || !strlen(str))
+ return NULL;
+
+ start = str;
+ do {
+ /*
+ * No colon, we are done
+ */
+ p = strchr(str, ':');
+ if (!p) {
+ *ptr = NULL;
+ break;
+ }
+
+ /*
+ * We got a colon, but it's the first character. Skip and
+ * continue
+ */
+ if (p == start) {
+ str = ++start;
+ continue;
+ }
+
+ if (*(p - 1) != '\\') {
+ *p = '\0';
+ *ptr = p + 1;
+ break;
+ }
+
+ memmove(p - 1, p, strlen(p) + 1);
+ str = p;
+ } while (1);
+
+ return start;
+}
+