extern char *gsVFS_MountFile;
// === PROTOTYPES ===
- int VFS_Mount(char *Device, char *MountPoint, char *Filesystem, char *Options);
-void VFS_UpdateMountFile();
+#if 0
+ int VFS_Mount(const char *Device, const char *MountPoint, const char *Filesystem, const char *Options);
+#endif
+void VFS_UpdateMountFile(void);
// === GLOBALS ===
- int glVFS_MountList = 0;
+tMutex glVFS_MountList;
tVFS_Mount *gVFS_Mounts;
tVFS_Mount *gVFS_RootMount = NULL;
+Uint32 giVFS_NextMountIdent = 1;
// === CODE ===
/**
* \a Filesystem. The options in the string \a Options is passed to the
* driver's mount.
*/
-int VFS_Mount(char *Device, char *MountPoint, char *Filesystem, char *Options)
+int VFS_Mount(const char *Device, const char *MountPoint, const char *Filesystem, const char *Options)
{
tVFS_Mount *mnt;
tVFS_Driver *fs;
// Get the filesystem
fs = VFS_GetFSByName(Filesystem);
if(!fs) {
- Warning("VFS_Mount - Unknown FS Type '%s'", Filesystem);
+ Log_Warning("VFS", "VFS_Mount - Unknown FS Type '%s'", Filesystem);
return -1;
}
free(mnt);
return -2;
}
+
+ mnt->Identifier = giVFS_NextMountIdent++;
+ #if 0
+ // Ensure identifiers don't repeat
+ // - Only a problem if there have been 4 billion mounts
+ while( giVFS_NextMountIdent == 0 || VFS_GetMountByIdent(giVFS_NextMountIdent) )
+ giVFS_NextMountIdent ++;
+ #endif
// Set root
if(!gVFS_RootMount) gVFS_RootMount = mnt;
// Add to mount list
- LOCK( &glVFS_MountList );
+ Mutex_Acquire( &glVFS_MountList );
{
tVFS_Mount *tmp;
mnt->Next = NULL;
gVFS_Mounts = mnt;
}
}
- RELEASE( &glVFS_MountList );
+ Mutex_Release( &glVFS_MountList );
- Log("VFS_Mount: Mounted '%s' to '%s' ('%s')", Device, MountPoint, Filesystem);
+ Log_Log("VFS", "Mounted '%s' to '%s' ('%s')", Device, MountPoint, Filesystem);
VFS_UpdateMountFile();
return 0;
}
+/**
+ * \brief Gets a mount point given the identifier
+ */
+tVFS_Mount *VFS_GetMountByIdent(Uint32 MountID)
+{
+ tVFS_Mount *mnt;
+ for(mnt = gVFS_Mounts; mnt; mnt = mnt->Next)
+ {
+ if(mnt->Identifier == MountID)
+ return mnt;
+ }
+ return NULL;
+}
+
/**
* \brief Updates the mount file buffer
*
* Updates the ProcFS mounts file buffer to match the current mounts list.
*/
-void VFS_UpdateMountFile()
+void VFS_UpdateMountFile(void)
{
int len = 0;
char *buf;