]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/win32/compat/vss.cpp
small vss improvement (more complete shutdown and startup after each backup instead...
[bacula/bacula] / bacula / src / win32 / compat / vss.cpp
index e59e5e5ea273d0def2285b4a62d5e316480678fc..8234aad31794e88bcfc6bf0bcc77eef2c17dc3f5 100644 (file)
@@ -1,4 +1,4 @@
-//                              -*- Mode: C++ -*-
+
 // vss.cpp -- Interface to Volume Shadow Copies (VSS)
 //
 // Copyright transferred from MATRIX-Computer GmbH to
@@ -72,6 +72,7 @@ using namespace std;
 VSSClient::VSSClient()
 {
     m_bCoInitializeCalled = false;
+    m_bCoInitializeSecurityCalled = false;
     m_dwContext = 0; // VSS_CTX_BACKUP;
     m_bDuringRestore = false;
     m_bBackupIsInitialized = false;
@@ -79,8 +80,8 @@ VSSClient::VSSClient()
     m_pVectorWriterStates = new vector<int>;
     m_pVectorWriterInfo = new vector<string>;
     m_uidCurrentSnapshotSet = GUID_NULL;
-    memset (m_wszUniqueVolumeName,0,sizeof (m_wszUniqueVolumeName));
-    memset (m_szShadowCopyName,0,sizeof (m_szShadowCopyName));
+    memset(m_wszUniqueVolumeName,0, sizeof(m_wszUniqueVolumeName));
+    memset(m_szShadowCopyName,0, sizeof(m_szShadowCopyName));
 }
 
 // Destructor
@@ -107,24 +108,25 @@ VSSClient::~VSSClient()
 BOOL VSSClient::InitializeForBackup()
 {
     //return Initialize (VSS_CTX_BACKUP);
-   return Initialize (0);
+   return Initialize(0);
 }
 
 
 
 
-BOOL VSSClient::GetShadowPath (const char *szFilePath, char *szShadowPath, int nBuflen)
+BOOL VSSClient::GetShadowPath(const char *szFilePath, char *szShadowPath, int nBuflen)
 {
    if (!m_bBackupIsInitialized)
       return FALSE;
 
-   /* check for valid pathname -- note, allow simple drive letter too */
+   /* check for valid pathname */
    BOOL bIsValidName;
    
-   bIsValidName = strlen(szFilePath) >= 2;
+   bIsValidName = strlen(szFilePath) > 3;
    if (bIsValidName)
       bIsValidName &= isalpha (szFilePath[0]) &&
-                      szFilePath[1]==':';
+                      szFilePath[1]==':' && 
+                      szFilePath[2] == '\\';
 
    if (bIsValidName) {
       int nDriveIndex = toupper(szFilePath[0])-'A';
@@ -137,6 +139,7 @@ BOOL VSSClient::GetShadowPath (const char *szFilePath, char *szShadowPath, int n
    }
    
    strncpy(szShadowPath,  szFilePath, nBuflen);
+   errno = EINVAL;
    return FALSE;   
 }