vboxvfs_vfsops.c revision 2f179a5059fedec182eb061e984f821a8887a1f0
4d939f327b6fe2b8201ab00e2d7e7d12b6d47d23vboxsync * VirtualBox File System Driver for Solaris Guests. VFS operations.
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * Copyright (C) 2008 Sun Microsystems, Inc.
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * Sun Microsystems, Inc. confidential
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * All rights reserved
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync/*******************************************************************************
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync* Header Files *
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync*******************************************************************************/
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync#if defined(DEBUG_ramshankar) && !defined(LOG_ENABLED)
4d939f327b6fe2b8201ab00e2d7e7d12b6d47d23vboxsync/*******************************************************************************
4d939f327b6fe2b8201ab00e2d7e7d12b6d47d23vboxsync* Defined Constants And Macros *
4d939f327b6fe2b8201ab00e2d7e7d12b6d47d23vboxsync*******************************************************************************/
4d939f327b6fe2b8201ab00e2d7e7d12b6d47d23vboxsync/** Mount Options */
static int vboxvfs_CheckMountPerm(vfs_t *pVFS, struct mounta *pMount, vnode_t *pVNodeSpec, cred_t *pCred);
static void *g_pVBoxVFSState;
static int g_VBoxVFSType;
int _init(void)
if (!rc)
if (rc)
return rc;
int _fini(void)
if (!rc)
return rc;
int rc;
if (!rc)
if (!rc)
vboxUninit();
return rc;
int rc = 0;
int Uid = 0;
int Gid = 0;
if (rc)
return EPERM;
return ENOTDIR;
return ENOTSUP;
return EBUSY;
return EINVAL;
&& cbData > 0)
LogRel((DEVICE_NAME: "VBoxVFS_Mount: argument length too long. expected=%d. received=%d\n", sizeof(Args), cbData));
return EINVAL;
if (rc)
return EFAULT;
cbData = 0;
if (rc < 0)
return EINVAL;
if (rc < 0)
return EINVAL;
if (!rc)
if (!rc)
if (!rc)
if (!rc)
return rc;
if (rc)
if (!rc)
return rc;
if (!pVBoxVFSGlobalInfo)
LogRel((DEVICE_NAME ":VBoxVFS_Mount: RTMemAlloc failed to alloc %d bytes for global struct.\n", sizeof(*pVBoxVFSGlobalInfo)));
return ENOMEM;
if (!pShflShareName)
LogRel((DEVICE_NAME ":VBoxVFS_Mount: RTMemAllocZ failed to alloc %d bytes for ShFlShareName.\n", cbShflShareName));
return ENOMEM;
return EPROTO;
if (!pVNodeRoot)
LogRel((DEVICE_NAME ":VBoxVFS_Mount: RTMemAlloc failed to alloc %d bytes for root node.\n", sizeof(*pVNodeRoot)));
return ENOMEM;
LogRel((DEVICE_NAME ":VBoxVFS_Mount: RTMemAllocZ failed to alloc %d bytes for root path.\n", sizeof(SHFLSTRING) + 1));
return ENOMEM;
if (rc)
return rc;
int rc;
if (rc)
return EPERM;
int rc;
rc = vboxCallFSInfo(&g_VBoxVFSClient, &pVBoxVFSGlobalInfo->Map, 0, SHFL_INFO_GET | SHFL_INFO_VOLUME, &cbBuffer,
pStat->f_ffree = 1000; /* don't return 0 here since the guest may think that it is not possible to create any more files */
vboxUninit();
static int vboxvfs_CheckMountPerm(vfs_t *pVFS, struct mounta *pMount, vnode_t *pVNodeSpec, cred_t *pCred)
int rc;
return ENOTBLK;
if (!rc)
return rc;
int rc;
long Val;
if (rc)
if ( !rc