]> git.decadent.org.uk Git - nfs-utils.git/blobdiff - utils/mountd/fsloc.c
utils: Return status 0 on clean exits
[nfs-utils.git] / utils / mountd / fsloc.c
index 5b094b09f4eb9d7bb2ce1fc7731cf8f51abd1c3c..bc737d191cf8b830ea9d8c748b5a8695e32e87e1 100644 (file)
@@ -40,12 +40,12 @@ static void replicas_print(struct servers *sp)
 {
        int i;
        if (!sp) {
-               xlog(L_NOTICE, "NULL replicas pointer\n");
+               xlog(L_NOTICE, "NULL replicas pointer");
                return;
        }
-       xlog(L_NOTICE, "replicas listsize=%i\n", sp->h_num);
+       xlog(L_NOTICE, "replicas listsize=%i", sp->h_num);
        for (i=0; i<sp->h_num; i++) {
-               xlog(L_NOTICE, "    %s:%s\n",
+               xlog(L_NOTICE, "    %s:%s",
                       sp->h_mp[i]->h_host, sp->h_mp[i]->h_path);
        }
 }
@@ -120,23 +120,37 @@ static struct servers *parse_list(char **list)
  */
 static struct servers *method_list(char *data)
 {
-       char *copy, *ptr=data;
+       char *copy, *ptr=data, *p;
        char **list;
        int i, listsize;
        struct servers *rv=NULL;
+       bool v6esc = false;
 
-       xlog(L_NOTICE, "method_list(%s)\n", data);
+       xlog(L_NOTICE, "method_list(%s)", data);
        for (ptr--, listsize=1; ptr; ptr=index(ptr, ':'), listsize++)
                ptr++;
        list = malloc(listsize * sizeof(char *));
        copy = strdup(data);
        if (copy)
-               xlog(L_NOTICE, "converted to %s\n", copy);
+               xlog(L_NOTICE, "converted to %s", copy);
        if (list && copy) {
                ptr = copy;
-               for (i=0; i<listsize; i++) {
-                       list[i] = strsep(&ptr, ":");
+               for (p = ptr, i = 0; *p && i < listsize; p++) {
+                       if (*p == '[')
+                               v6esc = true;
+                       else if (*p == ']')
+                               v6esc = false;
+
+                       if (!v6esc && *p == ':') {
+                               *p = '\0';
+                               if (*ptr)
+                                       list[i++] = ptr;
+                               ptr = p + 1;
+                       }
                }
+               if (*ptr)
+                       list[i++] = ptr;
+               list[i] = NULL;
                rv = parse_list(list);
        }
        free(copy);
@@ -146,7 +160,7 @@ static struct servers *method_list(char *data)
 }
 
 /* Returns appropriately filled struct servers, or NULL if had a problem */
-struct servers *replicas_lookup(int method, char *data, char *key)
+struct servers *replicas_lookup(int method, char *data)
 {
        struct servers *sp=NULL;
        switch(method) {