1 /* $OpenBSD: mount_ext2fs.c,v 1.20 2022/12/04 23:50:46 cheloha Exp $ */
2 /* $NetBSD: mount_ffs.c,v 1.3 1996/04/13 01:31:19 jtc Exp $ */
3
4 /*-
5 * Copyright (c) 1993, 1994
6 * The Regents of the University of California. All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 * 1. Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
16 * 3. Neither the name of the University nor the names of its contributors
17 * may be used to endorse or promote products derived from this software
18 * without specific prior written permission.
19 *
20 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
21 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
24 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30 * SUCH DAMAGE.
31 */
32
33 #include <sys/types.h>
34 #include <sys/mount.h>
35
36 #include <err.h>
37 #include <errno.h>
38 #include <stdio.h>
39 #include <stdlib.h>
40 #include <string.h>
41 #include <unistd.h>
42 #include <limits.h>
43
44 #include "mntopts.h"
45
46 void ext2fs_usage(void);
47
48 static const struct mntopt mopts[] = {
49 MOPT_STDOPTS,
50 MOPT_UPDATE,
51 { NULL }
52 };
53
54 int
main(int argc,char * argv[])55 main(int argc, char *argv[])
56 {
57 struct ufs_args args; /* XXX ffs_args */
58 int ch, mntflags;
59 char fs_name[PATH_MAX], *errcause;
60
61 mntflags = 0;
62 optind = optreset = 1; /* Reset for parse of new argv. */
63 while ((ch = getopt(argc, argv, "o:")) != -1)
64 switch (ch) {
65 case 'o':
66 getmntopts(optarg, mopts, &mntflags);
67 break;
68 default:
69 ext2fs_usage();
70 }
71 argc -= optind;
72 argv += optind;
73
74 if (argc != 2)
75 ext2fs_usage();
76
77 args.fspec = argv[0]; /* The name of the device file. */
78 if (realpath(argv[1], fs_name) == NULL) /* The mount point. */
79 err(1, "realpath %s", argv[1]);
80
81 #define DEFAULT_ROOTUID -2
82 args.export_info.ex_root = DEFAULT_ROOTUID;
83 if (mntflags & MNT_RDONLY)
84 args.export_info.ex_flags = MNT_EXRDONLY;
85 else
86 args.export_info.ex_flags = 0;
87
88 if (mount(MOUNT_EXT2FS, fs_name, mntflags, &args) == -1) {
89 switch (errno) {
90 case EMFILE:
91 errcause = "mount table full";
92 break;
93 case EINVAL:
94 errcause =
95 "specified device does not match mounted device";
96 break;
97 case EOPNOTSUPP:
98 errcause = "filesystem not supported by kernel";
99 break;
100 default:
101 errcause = strerror(errno);
102 break;
103 }
104 errx(1, "%s on %s: %s", args.fspec, fs_name, errcause);
105 }
106 exit(0);
107 }
108
109 void
ext2fs_usage(void)110 ext2fs_usage(void)
111 {
112 (void)fprintf(stderr,
113 "usage: mount_ext2fs [-o options] special node\n");
114 exit(1);
115 }
116