diff --git a/GBM/Classes/clsBackup.vb b/GBM/Classes/clsBackup.vb index f790844..4654aa9 100644 --- a/GBM/Classes/clsBackup.vb +++ b/GBM/Classes/clsBackup.vb @@ -49,7 +49,7 @@ ReadOnly Property FileSafeName As String Get - Return mgrPath.ValidateFileNameForOS(sName) + Return mgrPath.ValidateFileName(sName) End Get End Property diff --git a/GBM/Classes/clsGame.vb b/GBM/Classes/clsGame.vb index 9df191f..94584b4 100644 --- a/GBM/Classes/clsGame.vb +++ b/GBM/Classes/clsGame.vb @@ -50,7 +50,7 @@ Public Class clsGame Property ID As String Set(value As String) If Not value Is Nothing Then - sGameID = mgrPath.ValidateFileNameForOS(value) + sGameID = mgrPath.ValidateFileName(value) End If End Set Get @@ -70,7 +70,7 @@ Public Class clsGame ReadOnly Property FileSafeName As String Get - Return mgrPath.ValidateFileNameForOS(sGameName) + Return mgrPath.ValidateFileName(sGameName) End Get End Property diff --git a/GBM/Forms/frmGameManager.vb b/GBM/Forms/frmGameManager.vb index 2846580..54c4a26 100644 --- a/GBM/Forms/frmGameManager.vb +++ b/GBM/Forms/frmGameManager.vb @@ -1361,7 +1361,7 @@ Public Class frmGameManager oApp.IsRegEx = chkRegEx.Checked If Not oApp.IsRegEx Then - txtProcess.Text = mgrPath.ValidateFileNameForOS(txtProcess.Text) + txtProcess.Text = mgrPath.ValidateFileName(txtProcess.Text) If Path.HasExtension(txtProcess.Text) Then If txtProcess.Text.ToLower.EndsWith(".exe") Then txtProcess.Text = Path.GetFileNameWithoutExtension(txtProcess.Text) diff --git a/GBM/Managers/mgrCommon.vb b/GBM/Managers/mgrCommon.vb index 3d6ec2a..af84183 100644 --- a/GBM/Managers/mgrCommon.vb +++ b/GBM/Managers/mgrCommon.vb @@ -445,21 +445,36 @@ Public Class mgrCommon 'Get the drive format of a location (Unix) Public Shared Function GetBackupDriveFormatUnix(ByVal sPath As String) As String - Dim prsdf As Process + Dim prs As Process Dim sOutput As String + Dim sDevice As String = String.Empty Dim sDriveFormat As String = String.Empty Try - prsdf = New Process - prsdf.StartInfo.FileName = "/bin/df" - prsdf.StartInfo.Arguments = "-T " & sPath - prsdf.StartInfo.UseShellExecute = False - prsdf.StartInfo.RedirectStandardOutput = True - prsdf.StartInfo.CreateNoWindow = True - prsdf.Start() - sOutput = prsdf.StandardOutput.ReadToEnd - 'Parse df output to grab "Type" value + prs = New Process + prs.StartInfo.FileName = "/bin/df" + prs.StartInfo.Arguments = "-T " & sPath + prs.StartInfo.UseShellExecute = False + prs.StartInfo.RedirectStandardOutput = True + prs.StartInfo.CreateNoWindow = True + prs.Start() + + sOutput = prs.StandardOutput.ReadToEnd + sDevice = sOutput.Split(vbLf)(1).Split(New Char() {" "}, StringSplitOptions.RemoveEmptyEntries)(0) sDriveFormat = sOutput.Split(vbLf)(1).Split(New Char() {" "}, StringSplitOptions.RemoveEmptyEntries)(1) + + 'If we are dealing with a fuseblk we have to figure out what the underlying file system is. + If sDriveFormat = "fuseblk" Then + prs = New Process + prs.StartInfo.FileName = "/bin/lsblk" + prs.StartInfo.Arguments = sDevice & " -no fstype" + prs.StartInfo.UseShellExecute = False + prs.StartInfo.RedirectStandardOutput = True + prs.StartInfo.CreateNoWindow = True + prs.Start() + + sDriveFormat = prs.StandardOutput.ReadToEnd + End If Catch 'Do Nothing End Try diff --git a/GBM/Managers/mgrPath.vb b/GBM/Managers/mgrPath.vb index b80d245..a47ddb0 100644 --- a/GBM/Managers/mgrPath.vb +++ b/GBM/Managers/mgrPath.vb @@ -111,15 +111,29 @@ Public Class mgrPath Return sCheckString.Trim End Function - Public Shared Function ValidateFileNameForOS(ByVal sCheckString As String) As String - Dim cInvalidCharacters As Char() = Path.GetInvalidFileNameChars + Public Shared Function ValidateFileName(ByVal sCheckString As String) As String + Dim sFormat As String + Dim oSettings As New mgrSettings + Dim cInvalidCharacters As Char() + + oSettings.LoadSettings() + sFormat = oSettings.BackupDriveFormat.ToLower + + If sFormat.Contains("fat") Or sFormat.Contains("ntfs") Then + cInvalidCharacters = {"\", "/", ":", "*", "?", """", "<", ">", "|", Convert.ToChar(0)} + ElseIf sFormat.Contains("ext") Then + cInvalidCharacters = {"/", Convert.ToChar(0)} + Else + 'When unable to determine the format, use the invalid characters provided by the OS. + cInvalidCharacters = Path.GetInvalidFileNameChars + End If For Each c As Char In cInvalidCharacters sCheckString = sCheckString.Replace(c, "") Next - If sCheckString.Length > 257 Then - sCheckString = sCheckString.Substring(0, 257) + If sCheckString.Length > 255 Then + sCheckString = sCheckString.Substring(0, 255) End If Return sCheckString.Trim