]> git.decadent.org.uk Git - nfs-utils.git/blobdiff - utils/mount/stropts.c
text-based mount command: use po_get_numeric() for handling retry
[nfs-utils.git] / utils / mount / stropts.c
index e4a440890e89ad01b628b4d8aebd4e865e1c8e1f..43791e615edabc8d21b37a093b61e47f941e9320 100644 (file)
@@ -99,19 +99,21 @@ struct nfsmount_info {
 static time_t nfs_parse_retry_option(struct mount_options *options,
                                     unsigned int timeout_minutes)
 {
-       char *retry_option, *endptr;
+       long tmp;
 
-       retry_option = po_get(options, "retry");
-       if (retry_option) {
-               long tmp;
-
-               errno = 0;
-               tmp = strtol(retry_option, &endptr, 10);
-               if (errno == 0 && endptr != retry_option && tmp >= 0)
+       switch (po_get_numeric(options, "retry", &tmp)) {
+       case PO_NOT_FOUND:
+               break;
+       case PO_FOUND:
+               if (tmp >= 0) {
                        timeout_minutes = tmp;
-               else if (verbose)
+                       break;
+               }
+       case PO_BAD_VALUE:
+               if (verbose)
                        nfs_error(_("%s: invalid retry timeout was specified; "
                                        "using default timeout"), progname);
+               break;
        }
 
        return time(NULL) + (time_t)(timeout_minutes * 60);
@@ -353,6 +355,17 @@ static struct mount_options *nfs_rewrite_mount_options(char *str)
        option = po_get(options, "mountvers");
        if (option)
                mnt_server.pmap.pm_vers = atoi(option);
+       option = po_get(options, "mountproto");
+       if (option) {
+               if (strcmp(option, "tcp") == 0) {
+                       mnt_server.pmap.pm_prot = IPPROTO_TCP;
+                       po_remove_all(options, "mountproto");
+               }
+               if (strcmp(option, "udp") == 0) {
+                       mnt_server.pmap.pm_prot = IPPROTO_UDP;
+                       po_remove_all(options, "mountproto");
+               }
+       }
 
        option = po_get(options, "port");
        if (option) {
@@ -421,6 +434,20 @@ static struct mount_options *nfs_rewrite_mount_options(char *str)
 
        }
 
+       if (mnt_server.pmap.pm_prot == IPPROTO_TCP)
+               snprintf(new_option, sizeof(new_option) - 1,
+                        "mountproto=tcp");
+       else
+               snprintf(new_option, sizeof(new_option) - 1,
+                        "mountproto=udp");
+       if (po_append(options, new_option) == PO_FAILED)
+               goto err;
+
+       snprintf(new_option, sizeof(new_option) - 1,
+                "mountport=%lu", mnt_server.pmap.pm_port);
+       if (po_append(options, new_option) == PO_FAILED)
+               goto err;
+
        errno = 0;
        return options;