Author: kib
Date: Sun Jan 13 00:58:02 2013
New Revision: 245354
URL: http://svnweb.freebsd.org/changeset/base/245354

Log:
  MFC r245005:
  Allow to specify "cache" and "nocache" as an option for
  mount_nullfs(8).

Modified:
  stable/9/sbin/mount_nullfs/mount_nullfs.c
Directory Properties:
  stable/9/sbin/mount_nullfs/   (props changed)

Modified: stable/9/sbin/mount_nullfs/mount_nullfs.c
==============================================================================
--- stable/9/sbin/mount_nullfs/mount_nullfs.c   Sun Jan 13 00:55:30 2013        
(r245353)
+++ stable/9/sbin/mount_nullfs/mount_nullfs.c   Sun Jan 13 00:58:02 2013        
(r245354)
@@ -57,27 +57,35 @@ static const char rcsid[] =
 
 #include "mntopts.h"
 
-struct mntopt mopts[] = {
-       MOPT_STDOPTS,
-       MOPT_END
-};
-
 int    subdir(const char *, const char *);
 static void    usage(void) __dead2;
 
 int
 main(int argc, char *argv[])
 {
-       struct iovec iov[6];
-       int ch, mntflags;
+       struct iovec *iov;
+       char *p, *val;
        char source[MAXPATHLEN];
        char target[MAXPATHLEN];
+       char errmsg[255];
+       int ch, mntflags, iovlen;
+       char nullfs[] = "nullfs";
 
+       iov = NULL;
+       iovlen = 0;
        mntflags = 0;
+       errmsg[0] = '\0';
        while ((ch = getopt(argc, argv, "o:")) != -1)
                switch(ch) {
                case 'o':
-                       getmntopts(optarg, mopts, &mntflags, 0);
+                       val = strdup("");
+                       p = strchr(optarg, '=');
+                       if (p != NULL) {
+                               free(val);
+                               *p = '\0';
+                               val = p + 1;
+                       }
+                       build_iovec(&iov, &iovlen, optarg, val, (size_t)-1);
                        break;
                case '?':
                default:
@@ -97,21 +105,16 @@ main(int argc, char *argv[])
                errx(EX_USAGE, "%s (%s) and %s are not distinct paths",
                    argv[0], target, argv[1]);
 
-       iov[0].iov_base = strdup("fstype");
-       iov[0].iov_len = sizeof("fstype");
-       iov[1].iov_base = strdup("nullfs");
-       iov[1].iov_len = strlen(iov[1].iov_base) + 1;
-       iov[2].iov_base = strdup("fspath");
-       iov[2].iov_len = sizeof("fspath");
-       iov[3].iov_base = source;
-       iov[3].iov_len = strlen(source) + 1;
-       iov[4].iov_base = strdup("target");
-       iov[4].iov_len = sizeof("target");
-       iov[5].iov_base = target;
-       iov[5].iov_len = strlen(target) + 1;
-
-       if (nmount(iov, 6, mntflags))
-               err(1, NULL);
+       build_iovec(&iov, &iovlen, "fstype", nullfs, (size_t)-1);
+       build_iovec(&iov, &iovlen, "fspath", source, (size_t)-1);
+       build_iovec(&iov, &iovlen, "target", target, (size_t)-1);
+       build_iovec(&iov, &iovlen, "errmsg", errmsg, sizeof(errmsg));
+       if (nmount(iov, iovlen, mntflags) < 0) {
+               if (errmsg[0] != 0)
+                       err(1, "%s: %s", source, errmsg);
+               else
+                       err(1, "%s", source);
+       }
        exit(0);
 }
 
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to