There are three helpers that convert sockaddr-style addresses to text
authorChuck Lever <chuck.lever@oracle.com>
Tue, 15 Jul 2008 17:33:32 +0000 (13:33 -0400)
committerSteve Dickson <steved@redhat.com>
Tue, 15 Jul 2008 17:33:32 +0000 (13:33 -0400)
addresses, then construct mount options to pass these addresses to the
kernel.  The tail of each of these helpers does exactly the same thing,
so introduce a helper that handles the common code.

Magically, the new helper supports IPv6 as well as IPv4.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
utils/mount/stropts.c

index a9c0b50..a1ffca2 100644 (file)
@@ -194,6 +194,37 @@ static time_t nfs_parse_retry_option(struct mount_options *options,
        return time(NULL) + (time_t)(timeout_minutes * 60);
 }
 
+/*
+ * Convert the passed-in sockaddr-style address to presentation
+ * format, then append an option of the form "keyword=address".
+ *
+ * Returns 1 if the option was appended successfully; otherwise zero.
+ */
+static int nfs_append_generic_address_option(const struct sockaddr *sap,
+                                            const socklen_t salen,
+                                            const char *keyword,
+                                            struct mount_options *options)
+{
+       char address[NI_MAXHOST];
+       char new_option[512];
+
+       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))
+               goto out_err;
+
+       if (po_append(options, new_option) != PO_SUCCEEDED)
+               goto out_err;
+
+       return 1;
+
+out_err:
+       nfs_error(_("%s: failed to construct %s option"), progname, keyword);
+       return 0;
+}
+
 /*
  * Append the 'addr=' option to the options string to pass a resolved
  * server address to the kernel.  After a successful mount, this address