VirtualBox

source: vbox/trunk/src/VBox/Additions/solaris/SharedFolders/vboxvfs_mount.c@ 16684

Last change on this file since 16684 was 10456, checked in by vboxsync, 16 years ago

Solaris vboxvfs: older bits commiting now.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 4.8 KB
Line 
1/* $Id: vboxvfs_mount.c 10456 2008-07-10 07:04:39Z vboxsync $ */
2/** @file
3 * VirtualBox File System Mount Helper, Solaris host.
4 * Userspace mount wrapper that parses mount (or user-specified) options
5 * and passes it to mount(2) syscall
6 */
7
8/*
9 * Copyright (C) 2008 Sun Microsystems, Inc.
10 *
11 * This file is part of VirtualBox Open Source Edition (OSE), as
12 * available from http://www.virtualbox.org. This file is free software;
13 * you can redistribute it and/or modify it under the terms of the GNU
14 * General Public License (GPL) as published by the Free Software
15 * Foundation, in version 2 as it comes in the "COPYING" file of the
16 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
17 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
18 *
19 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
20 * Clara, CA 95054 USA or visit http://www.sun.com if you need
21 * additional information or have any questions.
22 */
23
24/*******************************************************************************
25* Header Files *
26*******************************************************************************/
27#include <stdio.h>
28#include <stdlib.h>
29#include <strings.h>
30#include <sys/vfs.h>
31#include <sys/mount.h>
32
33#include "vboxvfs.h"
34
35/*******************************************************************************
36* Global Variables *
37*******************************************************************************/
38static char g_achOptBuf[MAX_MNTOPT_STR] = { '\0', };
39static int g_cbOptBuf = 0;
40static const int g_RetErr = 33;
41static const int g_RetMagic = 2;
42static const int g_RetOK = 0;
43
44static void Usage(char *pszName)
45{
46 fprintf(stderr, "Usage: %s [OPTIONS] NAME MOUNTPOINT\n"
47 "Mount the VirtualBox shared folder NAME from the host system to MOUNTPOINT.\n"
48 "\n"
49 " -w mount the shared folder writably (the default)\n"
50 " -r mount the shared folder read-only\n"
51 " -o OPTION[,OPTION...] use the mount options specified\n"
52 "\n", pszName);
53 fprintf(stderr, "Available mount options are:\n"
54 "\n"
55 " rw mount writably (the default)\n"
56 " ro mount read only\n"
57 " uid=UID set the default file owner user id to UID\n"
58 " gid=GID set the default file owner group id to GID\n"
59 " ttl=TTL set the \"time to live\" to TID for the dentry\n"
60 " iocharset CHARSET use the character set CHARSET for i/o operations (default utf8)\n"
61 " convertcp CHARSET convert the shared folder name from the character set CHARSET to utf8\n\n");
62 fprintf(stderr, "Less common used options:\n"
63 " noexec,exec,nodev,dev,nosuid,suid\n");
64 exit(1);
65}
66
67int main(int argc, char **argv)
68{
69 char *pszName = NULL;
70 char *pszSpecial = NULL;
71 char *pszMount = NULL;
72 char achType[MAXFIDSZ];
73 int c = '?';
74 int rc = -1;
75 int parseError = 0;
76 int mntFlags = 0;
77 int quietFlag = 0;
78
79 pszName = strrchr(argv[0], '/');
80 pszName = pszName ? pszName + 1 : argv[0];
81 snprintf(achType, sizeof(achType), "%s_%s", DEVICE_NAME, pszName);
82
83 while ((c = getopt(argc, argv, "o:rmoQ")) != EOF)
84 {
85 switch (c)
86 {
87 case '?':
88 {
89 parseError = 1;
90 break;
91 }
92
93 case 'q':
94 {
95 quietFlag = 1;
96 break;
97 }
98
99 case 'r':
100 {
101 mntFlags |= MS_RDONLY;
102 break;
103 }
104
105 case 'O':
106 {
107 mntFlags |= MS_OVERLAY;
108 break;
109 }
110
111 case 'm':
112 {
113 mntFlags |= MS_NOMNTTAB;
114 break;
115 }
116
117 case 'o':
118 {
119 if (strlcpy(g_achOptBuf, optarg, sizeof(g_achOptBuf)) >= sizeof(g_achOptBuf))
120 {
121 fprintf(stderr, "%s: invalid argument: %s\n", pszName, optarg);
122 return g_RetMagic;
123 }
124 g_cbOptBuf = strlen(g_achOptBuf);
125 break;
126 }
127
128 default:
129 {
130 Usage(pszName);
131 break;
132 }
133 }
134 }
135
136 if ( argc - optind != 2
137 || parseError)
138 {
139 Usage(pszName);
140 }
141
142 pszSpecial = argv[argc - 2];
143 pszMount = argv[argc - 1];
144
145 rc = mount(pszSpecial, pszMount, mntFlags | MS_OPTIONSTR, DEVICE_NAME, NULL, 0, g_achOptBuf, MAX_MNTOPT_STR);
146 if (rc)
147 {
148 fprintf(stderr, "mount:");
149 perror(pszSpecial);
150 return g_RetErr;
151 }
152
153 return g_RetOK;
154}
155
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette