]> git.decadent.org.uk Git - nfs-utils.git/blobdiff - utils/mount/stropts.c
mount.nfs: Fix compiler warning in stropts.c
[nfs-utils.git] / utils / mount / stropts.c
index e94265a67e96b6986d6c82de71817f78b04c1145..9d82bb141d37fbea3052c5ee02b0c5eb9cc6d75f 100644 (file)
@@ -130,12 +130,14 @@ static int nfs_append_generic_address_option(const struct sockaddr *sap,
 {
        char address[NI_MAXHOST];
        char new_option[512];
+       int len;
 
        if (!nfs_present_sockaddr(sap, salen, address, sizeof(address)))
                goto out_err;
 
-       if (snprintf(new_option, sizeof(new_option), "%s=%s",
-                                       keyword, address) >= sizeof(new_option))
+       len = snprintf(new_option, sizeof(new_option), "%s=%s",
+                                               keyword, address);
+       if (len < 0 || (size_t)len >= sizeof(new_option))
                goto out_err;
 
        if (po_append(options, new_option) != PO_SUCCEEDED)
@@ -283,7 +285,16 @@ static int nfs_validate_options(struct nfsmount_info *mi)
        if (!nfs_append_sloppy_option(mi->options))
                return 0;
 
-       return nfs_append_addr_option(sap, salen, mi->options);
+       if (!nfs_append_addr_option(sap, salen, mi->options))
+               return 0;
+
+       /*
+        * Update option string to be recorded in /etc/mnttab
+        */
+       if (po_join(mi->options, mi->extra_opts) == PO_FAILED)
+               return 0;
+
+       return 1;
 }
 
 /*
@@ -303,16 +314,14 @@ static int nfs_extract_server_addresses(struct mount_options *options,
        option = po_get(options, "addr");
        if (option == NULL)
                return 0;
-       if (!nfs_string_to_sockaddr(option, strlen(option),
-                                               nfs_saddr, nfs_salen))
+       if (!nfs_string_to_sockaddr(option, nfs_saddr, nfs_salen))
                return 0;
 
        option = po_get(options, "mountaddr");
        if (option == NULL) {
                memcpy(mnt_saddr, nfs_saddr, *nfs_salen);
                *mnt_salen = *nfs_salen;
-       } else if (!nfs_string_to_sockaddr(option, strlen(option),
-                                               mnt_saddr, mnt_salen))
+       } else if (!nfs_string_to_sockaddr(option, mnt_saddr, mnt_salen))
                return 0;
 
        return 1;
@@ -476,7 +485,7 @@ out:
  */
 static int nfs_try_mount(struct nfsmount_info *mi)
 {
-       char **extra_opts = mi->extra_opts;
+       char *options = NULL;
        int result;
 
        if (strncmp(mi->type, "nfs4", 4) != 0) {
@@ -484,20 +493,20 @@ static int nfs_try_mount(struct nfsmount_info *mi)
                        return 0;
        }
 
-       if (po_join(mi->options, extra_opts) == PO_FAILED) {
+       if (po_join(mi->options, &options) == PO_FAILED) {
                errno = EIO;
                return 0;
        }
 
        if (verbose)
                printf(_("%s: trying text-based options '%s'\n"),
-                       progname, *extra_opts);
+                       progname, options);
 
        if (mi->fake)
                return 1;
 
        result = mount(mi->spec, mi->node, mi->type,
-                       mi->flags & ~(MS_USER|MS_USERS), *extra_opts);
+                       mi->flags & ~(MS_USER|MS_USERS), options);
        if (verbose && result) {
                int save = errno;
                nfs_error(_("%s: mount(2): %s"), progname, strerror(save));