1 /* 2 * Copyright (c) 2007 The DragonFly Project. All rights reserved. 3 * 4 * This code is derived from software contributed to The DragonFly Project 5 * by Matthew Dillon <dillon@backplane.com> 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 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 15 * the documentation and/or other materials provided with the 16 * distribution. 17 * 3. Neither the name of The DragonFly Project nor the names of its 18 * contributors may be used to endorse or promote products derived 19 * from this software without specific, prior written permission. 20 * 21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 22 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 23 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 24 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 25 * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 26 * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING, 27 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 28 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 29 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 30 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 31 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 32 * SUCH DAMAGE. 33 * 34 * $DragonFly: src/sbin/mount_hammer/mount_hammer.c,v 1.1 2007/10/10 19:35:19 dillon Exp $ 35 */ 36 37 #include <sys/types.h> 38 #include <sys/diskslice.h> 39 #include <sys/diskmbr.h> 40 #include <sys/stat.h> 41 #include <sys/time.h> 42 #include <vfs/hammer/hammer_mount.h> 43 44 #include <stdio.h> 45 #include <stdlib.h> 46 #include <stdarg.h> 47 #include <stddef.h> 48 #include <unistd.h> 49 #include <string.h> 50 #include <errno.h> 51 #include <fcntl.h> 52 #include <uuid.h> 53 #include <err.h> 54 #include <assert.h> 55 56 #include "mntopts.h" 57 58 static struct mntopt mopts[] = { MOPT_STDOPTS, MOPT_NULL }; 59 60 static void usage(void); 61 62 int 63 main(int ac, char **av) 64 { 65 struct hammer_mount_info info; 66 struct vfsconf vfc; 67 int mount_flags; 68 int error; 69 int ch; 70 char *mountpt; 71 72 mount_flags = 0; 73 while ((ch = getopt(ac, av, "o:T:")) != -1) { 74 switch(ch) { 75 case 'T': 76 /* parse time */ 77 errx(1, "-T option not currently supported"); 78 break; 79 case 'o': 80 getmntopts(optarg, mopts, &mount_flags, 0); 81 break; 82 default: 83 usage(); 84 /* not reached */ 85 } 86 } 87 ac -= optind; 88 av += optind; 89 90 if (ac < 2) { 91 usage(); 92 /* not reached */ 93 } 94 95 /* 96 * Mount arguments: vol [vol...] mountpt 97 */ 98 info.volumes = (const char **)av; 99 info.nvolumes = ac - 1; 100 mountpt = av[ac - 1]; 101 102 /* 103 * Load the hammer module if necessary (this bit stolen from 104 * mount_null). 105 */ 106 error = getvfsbyname("hammer", &vfc); 107 if (error && vfsisloadable("hammer")) { 108 if (vfsload("hammer") != 0) 109 err(1, "vfsload(hammer)"); 110 endvfsent(); 111 error = getvfsbyname("hammer", &vfc); 112 } 113 if (error) 114 errx(1, "hammer filesystem is not available"); 115 116 if (mount(vfc.vfc_name, mountpt, mount_flags, &info)) 117 err(1, NULL); 118 exit(0); 119 } 120 121 static 122 void 123 usage(void) 124 { 125 errx(1, "mount_hammer [-T time] [-o options] " 126 "volume [volume...] mount_pt"); 127 } 128