void mount_ext2fs_parseargs(int argc, char *argv[], struct ufs_args *args, int *mntflags, char *canon_dev, char *canon_dir) { int ch; mntoptparse_t mp; memset(args, 0, sizeof(*args)); *mntflags = 0; optind = optreset = 1; /* Reset for parse of new argv. */ while ((ch = getopt(argc, argv, "o:")) != -1) switch (ch) { case 'o': mp = getmntopts(optarg, mopts, mntflags, 0); if (mp == NULL) err(1, "getmntopts"); freemntopts(mp); break; case '?': default: ext2fs_usage(); } argc -= optind; argv += optind; if (argc != 2) ext2fs_usage(); pathadj(argv[0], canon_dev); args->fspec = canon_dev; pathadj(argv[1], canon_dir); }
int main(int argc, char *argv[]) { struct ufs_args args; /* XXX ffs_args */ int ch, mntflags; char fs_name[MAXPATHLEN], *errcause; mntflags = 0; optind = optreset = 1; /* Reset for parse of new argv. */ while ((ch = getopt(argc, argv, "o:")) != -1) switch (ch) { case 'o': getmntopts(optarg, mopts, &mntflags); break; case '?': default: ext2fs_usage(); } argc -= optind; argv += optind; if (argc != 2) ext2fs_usage(); args.fspec = argv[0]; /* The name of the device file. */ if (realpath(argv[1], fs_name) == NULL) /* The mount point. */ err(1, "realpath %s", argv[1]); #define DEFAULT_ROOTUID -2 args.export_info.ex_root = DEFAULT_ROOTUID; if (mntflags & MNT_RDONLY) args.export_info.ex_flags = MNT_EXRDONLY; else args.export_info.ex_flags = 0; if (mount(MOUNT_EXT2FS, fs_name, mntflags, &args) < 0) { switch (errno) { case EMFILE: errcause = "mount table full"; break; case EINVAL: errcause = "specified device does not match mounted device"; break; case EOPNOTSUPP: errcause = "filesystem not supported by kernel"; break; default: errcause = strerror(errno); break; } errx(1, "%s on %s: %s", args.fspec, fs_name, errcause); } exit(0); }